Professional Documents
Culture Documents
Lenguaje ensamblador
Instrucciones aritmticas
Agosto-Diciembre 2012
28-10-2012
Instrucciones aritmticas
1. Grupo de adicin... 1.1 ADD suma.. 1.2 ADC suma con acarreo .. 1.3 AAA ajuste ASCII para la suma 1.4 DAA ajuste decimal para la suma . 1.5 INC 2. Grupo de sustraccin. 2.1 SUB resta.. 2.2 SBB resta con acarreo negativo ... 2.3 AAS ajuste ASCII para la resta 2.4 DAS ajuste decimal para la resta . 2.5 DEC 2.6 CMP .. 3.- Grupo de multiplicacin... 3.1 MUL multiplicacin. 3.2 IMUL multiplicacin entera .. 3.3 AAM ajuste ASCII para la multiplicacin... 4.- Grupo de divisin.. 4.1 DIV divisin. 4.2 IDIV divisin entera .. 4.3 AAD ajuste ASCII para la divisin. 5.- Instruccin NEG.. 6.- Programa de ejemplificacin... 7.- Conclusin 8.- Fuentes de informacin. 2 2 2 3 3 4 4 4 5 5 6 6 7 7 7 8 8 8 8 9 9 10 11 33 34
Pg. 1
1.1.- Instruccin ADD Suma Propsito: Sintaxis: Indicadores: OF DF IF TF SF ZF AF PF CF x - - - x x x x x Suma los operandos y guarda el resultado en el operando destino. Los valores pueden ser de un byte, Word o doble Word (80386 y posteriores). Adicin de los operandos. ADD destino {registro/memoria}, fuente {registro/memoria/inmediato}
Ejemplos: ADD AX,BX ADD AH,AL ADD AX,VAR ADD AX,5 ADD BYTE PTR VAR,0Ah
1.2.- Instruccin ADC Propsito: Sintaxis: Indicadores: Adicin con acarreo. ADC destino {registro/memoria}, fuente {registro/memoria/inmediato}
OF DF IF TF SF ZF AF PF CF x - - - x x x x x Lleva a cabo la suma de dos operandos y suma uno al resultado en caso de que la bandera CF est activada, esto es, en caso de que exista acarreo. El resultado se guarda en el operando destino. Ejemplos: ADC CL, BL ADC AL, 12h ADC CX, DX
; CL = CL + BL + CF ; AL = AL + 12h + CF ; CX = CX + DX + CF
Pg. 2
Ejemplo:
1.4.- Instruccin DAA Propsito: Sintaxis: Indicadores: OF DF IF TF SF ZF AF PF CF ? - - - x x x x x Convierte el contenido del registro AL en un par de valores BCD: si los cuatro bits menos significativos de AL son un nmero mayor que 9, el indicador AF se pone a 1 y se suma 6 a AL. De igual forma, si los cuatro bits ms significativos de AL tras la operacin anterior son un nmero mayor que 9, el indicador CF se pone a 1 y se suma 60h a AL. Ajuste decimal para la suma. DAA (sin operando)
Ejemplo:
Pg. 3
2.1.- Instruccin SUB. Propsito: Sintaxis: Indicadores: OF DF IF TF SF ZF AF PF CF x - - - x x x x x Resta el operando destino al operando origen, colocando el resultado en el operando destino. Los operandos pueden tener o no signo, siendo necesario que sean del mismo tipo, byte o Word. Substraccin de operandos. SUB destino {registro/memoria}, fuente {registro/memoria/inmediato}
Resta el operando fuente del destino Ejemplos: SUB AX,BX ; AX=AX-BX SUB AX,VAR ; AX=AX-VAR SUB WORD PTR VAR,10 ; VAR=VAR-10 SUB CX,5 ; CX=CX-5
Pg. 4
Resta el operando origen del operando destino y el resultado lo almacena en el operando destino. Si est a 1 el indicador de acarreo adems resta una unidad ms. Los operandos pueden ser de tipo byte o palabra. Se utiliza normalmente para restar nmeros grandes, de ms de 16 bits, en varios pasos, considerando lo que nos llevamos (el acarreo) de la resta anterior. Ejemplos: SBB AX, AX SBB CH, DH 2.3.- Instruccin AAS Propsito: Sintaxis: Indicadores: OF DF IF TF SF ZF AF PF CF ? - - - ? ? x ? x Convierte el resultado de la sustraccin de dos operandos BCD no empaquetados para que siga siendo un nmero BCD no empaquetado. Si el nibble inferior de AL tiene un valor mayor que 9, de AL se resta 6, se decrementa AH, AF se pone a 1 y CF se iguala a AF. El resultado se guarda en AL con los bits de 4 a 7 puestos a 0. Ajuste ASCII para la resta AAS (sin operando)
Ejemplo:
En el ejemplo, tras la resta de dos nmeros BCD no empaquetados colocados en AL y BL, el resultado (por medio de AAS) sigue siendo un nmero BCD no empaquetado.
Pg. 5
2.5 DEC Propsito: Sintaxis: Indicadores: OF DF IF TF SF ZF AF PF CF x - - - x x x x Resta una unidad del operando destino. El operando puede ser byte o palabra. Obsrvese que esta instruccin no modifica el bit de acarreo (CF) y no es posible detectar un desbordamiento por este procedimiento (utilcese ZF). Ejemplo: DEC AX DEC MEM_BYTE 2.6 CMP Propsito: Sintaxis: Comparacin. CMP destino, origen Decrementar. DEC destino
Pg. 6
3.1.- Instruccin MUL Propsito: Multiplicacin sin signo Sintaxis: MUL operando (operando no puede ser un operando inmediato) Indicadores: OF DF IF TF SF ZF AF PF CF x - - - ? ? ? ? x Caso 1- Si el operando es un byte, multiplica el contenido de AL por el contenido del operando y almacena el resultado en AX. AX=AL*operando Ejemplo: MOV AL, 3 MOV BL, 100 MUL BL ; AX=3 * 100 AX=300
Caso 2-Si el operando es de 16 bits multiplica el contenido de AX por el operando y el resultado ser almacenado en los registros DX:AX. DX:AX=AX*operando. Ejemplo: MOV AX,1000h MOV BX,100h MUL BX
Pg. 7
Caso 2- Si el operando es de 2 byte multiplica el contenido de AX por el operando y el resultado ser almacenado en los registros DX:AX. DX:AX=AX*operando 3.3 Instruccin AAM Propsito: Sintaxis: Indicadores: OF DF IF TF SF ZF AF PF CF ? - - - x x ? x ? Corrige el resultado en AX del producto de dos nmeros BCD no empaquetados, convirtindolo en un valor BCD tambin no empaquetado. En AH sita el cociente de AL /10 quedando en AL el resto de dicha operacin. Ejemplo: MUL BL AAM En el ejemplo, tras el producto de dos nmeros BCD no empaquetados colocados en AL y BL, el resultado (por medio de AAA) sigue siendo, en AX, un nmero BCD no empaquetado. Ajuste ASCII para la multiplicacin. AAM
Pg. 8
4.1 Instruccin DIV Propsito: Sintaxis: Indicadores: Divide nmeros enteros sin signo. DIV operando {registro/memoria}
OF DF IF TF SF ZF AF PF CF ? ? ? ? ? ? ? ? ?
Caso 1- Si el operando es un byte, divide el contenido de AX entre el contenido del operando, almacena el resultado en AL y el residuo en AH. AL=AX/operando AH=AX MOD operando Ejemplo: MOV AX, 10 MOV BL, 3 DIV BL
; AL=3 AH=1
Caso 2- Si el operando es de 2 byte divide el contenido de DX:AX entre el operando, el resultado ser almacenado en AX y el residuo ser almacenado en DX. AX = DX:AX/operando Ejemplo: MOV DX, 0 MOV AX, 12345 MOV BX, 1000 DIV BX MOD 1000
El dividiendo es implcito; solo el divisor es dado como operando. El tipo de divisor determina el uso de registros
Dividiendo AX AX: DX
Cociente AL AX
Residuo AH DX
4.3 Instruccin AAD Propsito: Sintaxis: Indicadores: OF DF IF TF SF ZF AF PF CF ? - - - x x ? x ? Convierte dos nmeros BCD no empaquetados contenidos en AH y AL en un dividendo de un byte que queda almacenado en AL. Tras la operacin AH queda a cero. Esta instruccin es necesaria ANTES de la operacin de dividir, al contrario que AAM. Ejemplo: AAD DIV BL En el ejemplo, tras convertir los dos nmeros BCD no empaquetados (en AX) en un dividendo vlido, la instruccin de dividir genera un resultado correcto. Ajuste ASCII para la divisin. AAD
Calcula el valor negativo en complemento a dos del operando y devuelve el resultado enel mismo operando. Ejemplo:
Pg. 10
Pg. 11
* * * * * * * * * * * * * * * * * * * *$'
;===========================================================
;=========================================================== msgpar DB " sipar nopar i j t Ingrese un numero de dos digitos $"
msgpar1 DB "Si es un digito agregue un cero a la izquierda$" DB "El numero si es par$" DB "El numero es impar$" DB 0 DB 1 DB ? Ingrese un numero del 1 al 12: $"
;===========================================================
msgfibo DB " unidades DB ? decenas DB ? centenas DB ? just opcion nprimo sprimo _i sumas cont orden u DB 1
;===========================================================
;=========================================================== DB "Regresar al menu principal S/N$" DB "El numero no es primo$" DB "El numero si es primo$" DB 2 Dw 0 Dw ? DW 4 DUP (?) Dw ? ;===========================================================
;===========================================================
;===========================================================
Pg. 12
;===========================================================
Pg. 13
Pg. 14
Pg. 15
Pg. 16
Pg. 17
Pg. 18
Pg. 19
Pg. 20
Pg. 21
Pg. 22
;====================================================== primo: mov dx, offset msgpar mov ah, 09h int 21h mov ah, 02h mov bh, 00h mov dx, 0A12H int 10h mov dx, offset msgpar1 mov ah, 09h int 21h mov ah, 02h mov bh, 00h mov dx, 0B12H int 10h leeruno1: mov ah, 02h mov bh, 00h mov dx, 0B12H int 10h mov ah, 01h INT 21H cmp al, 30h jb leeruno1 cmp al, 39h ja leeruno1 sub al, 30h
Pg. 23
Pg. 24
siesprimo: mov dx, offset sprimo mov ah, 09h int 21h jmp retorno noesprimo: mov dx, offset nprimo mov ah, 09h int 21h jmp retorno sumatoria: mov dx, offset msgpar mov ah, 09h int 21h mov ah, 02h mov bh, 00h mov dx, 0A12H int 10h mov dx, offset msgpar1 mov ah, 09h int 21h mov ah, 02h mov bh, 00h
Pg. 25
Pg. 26
cmp cont, 00 je imp dec cont jmp sum ;======================================================= _menuprin: jmp menuprin ;======================================================= imp: sub cx, cx sub dx, dx mov ax, sumas mov si, 0006h mov cont, 0004h conv: mov cx, 10 sub dx, dx
Pg. 27
Pg. 28
Pg. 29
Pg. 30
Pg. 31
end inicio
7.- Conclusin
Las operaciones matemticas son sin duda las situaciones que ms se presentan en nuestros programas, por eso es importante saber las herramientas que nos ofrece el lenguaje ensamblador para poder realizar estas operaciones, debemos
Pg. 32
http://es.scribd.com/doc/6643575/unidad-2-ensamblador
Programacin avanzada en lenguaje ensamblador Ramn Medina 1992 (El documento proporciona poca informacin del autor y de la editorial)
Pg. 33