You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
ORG 2000H ;empiezo en la 2000MOVAX,1 ;Al registro le pongo 1 en ALMOVBX,1000H CARGA: MOV[BX],AX ; A la direccion 1000H mando 1 que es AXADDBX,2 ; A 1000h le sumo 2h= 1002hADDAX,AX ;hago 1 + 1 =2CMPAX,200 ; resto Ax - 200 JS CARGA ; Vuelve a carga hasta que Ax-200 sea positivoHLTEND;1,2,4,8,16,32,64,128,256
Suma_De_Elementos_En_Una_Tabla
Variables
Programa Principal
ORG 1000H TABLA DB 2,4,6,8,10,12,14,16,18,20 FIN DB ? ;Lo empiezo con basura 1010h TOTAL DB ? ;Tambien tiene basura 1011h MAX DB 13 ; 1012h
ORG 2000HMOVAL,0 ;Pongo el registro AL en 0MOVCL, OFFSET FIN-OFFSET TABLA ;Resta ambas direcciones ;100Ah-1000h ;El resultado nos da la cantidad de elementos que tiene tablaMOVBX, OFFSET TABLA ;Mandamos al registro BX la dir de tabla (1000h) SUMA: ADDAL,[BX];Sumo a lo que apunta 1000h se lo suma al registo ALINCBX ;Incremento la posicion de memoria para ir a 1001hDECCL ;Decremento el contador de elementos que tengo en la tablaJNZ SUMA ;Mientras nuestro contador no esta en ceroHLTEND; El resultado final es 6E (110 en decimal)
Menores_o_Iguales_de_X_en_una_Tabla
Variables
Programa Principal
ORG 1000H TABLA DB 2,4,6,8,10,12,14,16,18,20 FIN DB ? TOTAL DB ? MAX DB 13
ORG 2000HMOVAL,0 ;Inicializo el contador de elementos menores igualesMOVCL, OFFSET FIN-OFFSET TABLA ;Saco los elementos de la tabla MOVBX, OFFSET TABLA ;Le paso la posicion de tabla (1000h)MOVDL, MAX ;Inicializo Max que es 13 COMPARA: CMP[BX],DL ;A lo que apunta BX le resto 13 JS MENOR_IGUAL ;Si [BX] - 13 es negativo lo mando a la etiquetaJZ MENOR_IGUAL ; Si es igual tambien lo mando a la etiquetaJMP SIGUE ;Si no se cumple ningunas, salto a sigue e incremento en BX MENOR_IGUAL: INCAL;El contador SIGUE: INCBXDECCL ;Decrenebto hasta que los elementos sean 0JNZ COMPARA ;Si el contador no llego a 0 vuelvo a compararmov TOTAL,AL ;La cantidad de elementos menores iguales los paso a totalHLTEND
Suma_De_Vectores
Variables
Programa Principal
; Memoria de DatosORG 1000H TAB1 DW 1,1,1,1,1,1 ;6 Elementos de 16 bits c/u TAB2 DW 2,2,2,2,2,2 TAB3 DW ?, ?, ?, ?, ?, ? ;Guardo las direcciones para el resultado Contador DB 6 ;Para recorrer la tabla DIRECCION DW ? ;Es solo para no perder la direccion de TAB3
ORG 2000HMOVAX, OFFSET TAB1 ;Guardo la dir de Tab1 en AXMOVCX, OFFSET TAB2 ;Guardo la dir de Tab2 en CXMOV DIRECCION, OFFSET TAB3;Guardo la dir de Tab3 en DIRECCION BUCLE: MOVBX,AX ;Copio AX en BXMOVDX,[BX] ;Copio el contenido de la direccion BXMOVBX,CX ;Copio CX en BXADDDX,[BX];Sumo TAB1 con TAB2MOVBX, DIRECCION ;Copio en BX la direccion de TAB3MOV[BX],DX ;A TAB3 le paso la suma de TAB1 + TAB2ADDAX,2 ;Como tengo 2 bytes por numero, avanzo sumando 2ADDCX,2 ;x2ADD DIRECCION,2 ;x3DEC Contador; Repito para todos los numeros de la tablaJNZ BUCLE ;Si el flag Z no es 0, vuelvo a ejecutarHLTEND
Subrutinas
Variables
Modulo
Programa Principal
ORG 1000H NUM1 DW 3 NUM2 DW 3 RES DW ?
ORG 3000HMUL:MOVCX,0 ;Por el momento el resultado es 0LOOP: ADDCX,BXDECAXJNZLOOP FIN: RET
ORG 2000H ;Inicializamos AX y BXMOVAX,NUM1MOVBX,NUM2CALLMULMOV RES,CXHLTEND
Parametros_Por_Valor
Variables
Modulo
Programa Principal
ORG 1000H NUM1 DW 3 NUM2 DW 3 RES DW ?
ORG 3000HMUL:MOVCX,0 ;Por el momento el resultado es 0MOVBX,SPADDBX,2 ;Posiciono en NUM2MOVDX,[BX] ;Tomo NUM2 en DXADDBX,2 ;Posiciono en NUM1MOVAX,[BX];Tomo NUM1 en AXLOOP: ADDCX,DXDECAXJNZLOOP FIN: RET
ORG 2000H ;Inicializamos AX y BXMOVAX,NUM1MOVBX,NUM2 ;Apilamos antes de llamarPUSHAXPUSHBXCALLMULMOV RES,CXPOPAXPOPBXHLTEND
Parametros_Por_Referencia
Variables
Modulo
Programa Principal
ORG 1000H NUM1 DW 3 NUM2 DW 3 RES DW ?
ORG 3000HMUL:MOVBX,SP ;Tomo Valor de NUM2 en AXADDBX,2 ;Posiciono en DIR de NUM2MOVAX,[BX] ;AX = Dir de NUM2MOVDX,BX ;Backup de BXMOVBX,AX ;BX = Dir de NUM2MOVAX,[BX] ;AX = NUM2MOVBX,DX ;Recupero el puntero de la pila ;Tomo valor NUM1 en DXADDBX,2MOVDX,[BX] ;DX = DIR NUM1(1000H)MOVBX,DX ;BX = DIR NUM1(1000H)MOVDX,[BX] ;DX = NU1 ;MULTIPLICARLOOP: ADDCX,DXDECAXJNZLOOP FIN: RET
ORG 2000H ;Inicializamos AX y BXMOVAX,NUM1MOVBX,NUM2 ;Apilamos antes de llamarPUSHAXPUSHBXCALLMULMOV RES,CXPOPAXPOPBXHLTEND
SWAP
Variables
Modulo
Programa Principal
ORG 1000H NUM1 DW 3 NUM2 DW 2
ORG 3000H SWAP: PUSHAXPUSHBXPUSHCXPUSHDXMOVBX,SP ;Tomar Dir NUM1ADDBX,12MOVAX,[BX] ;Tomar Dir NUM2SUBBX,2MOVCX,[BX] ;Tomar Valor NUM1MOVBX,AXMOVAX,[BX]MOVDX,BX ;GUARDAMOS DIR NUM1 ;Tomar Valor NUM2MOVBX,CXMOVCX,[BX] ;Insertar Valor de Num1 en Dir Num2MOV[BX],AX ;Insertar Valor de Num1 en Dir Num2MOVBX,DXMOV[BX],CXPOPDXPOPCXPOPBXPOPAXRET
ORG 2000H ;Inicializamos AX y BXMOVAX,OFFSET NUM1PUSHAXMOVAX,OFFSET NUM2PUSHAXCALL SWAPHLTEND
Suma_tabla_par
ORG 1000H TABLA DB 2,4,6,8,10,12,14,16,18,20 FIN DB ? MENSAJE DB "PAR " FIN1 DB ? MENSAJE2 DB "IMPAR" FIN2 DB ?ORG 2000HMOVDL,0 ;Pongo el registro AL en 0MOVCL, OFFSET FIN-OFFSET TABLA ;Resta ambas direccionesMOVBX, OFFSET TABLA SUMA: ADDDL,[BX]INCBXDECCLJNZ SUMA ANDDL,1HJZ PARMOVBX, OFFSET MENSAJE2MOVAL, OFFSET FIN2 - OFFSET MENSAJE2INT7JMP TERMINA PAR: MOVBX, OFFSET MENSAJEMOVAL, OFFSET FIN1 - OFFSET MENSAJEINT7 TERMINA: INT0END; El resultado final es 6E (110 en decimal)