Suma y resta en Ensamblador X86
Dos operaciones basicas, que sufren un pequeño cambio.
La operación de suma o adicción (ADD) permite realizar la suma de dos números enteros a nivel de bits, de igual forma que la operación de sustracción (SUB) permite restar dos números enteros, en ambos casos los datos a operar pueden estar almacenados en registros de 8, 16, 32 o 64 bits.
ADD destino, fuenteSUB destino, fuente
De este modo, en un lenguaje de alto nivel se puede representar la suma echa en ensamblador como:
destino = destino + fuente
donde el operando destino forma parte de la operación y al mismo tiempo almacena el resultado de la misma, el mismo proceso ocurre con la resta.
destino = destino — fuente
Ambas operaciones aritméticas tanto suma como resta se pueden realizar entre:
- Dos registros.
- Un registro y una ubicación de memoria.
- Una ubicación de memoria y un registro.
- Un registro y una ubicación de memoria.
- Un registro y una constante.
- Una ubicación de memoria y una constante.
Las operaciones de suma y resta afectan las banderas de estado de acarreo y de desbordamiento.
segment .bss
res resb 1section .text
global _start
_start:
mov eax, 2 ; en el registro eax de 32 bits se almacena un 2
mov ebx, 3 ; en el registro ebx de 32 bits se almacena un 3 add eax, ebx ;se realiza la suma de los valores almacenados
;en los registros eax y ebx, el resultado se almacena en eax
; imprime en en pantalla el resultado
; convirtiendo el número a su correspondiente código ASCII
; sumado 48 o el caracter '0' (cero)
add eax, '0'
mov [res], eax
mov eax, 4
mov ebx, 1
mov ecx, res
mov edx, 1
int 0x80 mov eax, 5 ; en el registro eax de 32 bits se almacena un 5
mov ebx, 2 ; en el registro ebx de 32 bits se almacena un 2 sub eax, ebx ;se realiza la resta de los valores almacenados
;en los registros eax y ebx, el resultado se almacena en eax
add eax, '0'
mov [res], eax
mov eax, 4
mov ebx, 1
mov ecx, res
mov edx, 1
int 0x80
salir:
mov eax, 1
mov ebx, 0
int 0x80
En esta salida en pantalla como no se envió a imprimir los caracteres de nueva línea y retorno de carro, el resultado de ambas operaciones se colocan juntos; sin embargo, si se recuerda el orden en el que se realizaron las impresiones en pantalla, el ’5’ corresponde al resultado de la suma y el ’3’ al resultado de la resta.
/code # nasm -f elf sumaresta.asm /code # ld -m -o elf_i386 sumaresta sumaresta.o
/code # ./sumaresta
53/code #
Para realizar la suma y la resta en Ensamblador con acarreo, se emplearán un par de instrucciones que son variaciones de las anteriores, la diferencia principal radica en que la operación toma en cuenta el valor de la bandera de acarreo.
ADC destino fuenteSBB destino fuente
Por lo tanto, si en la bandera de acarreo existe un uno y se realiza la suma de cuatro y tres, el resultado será ocho.
destino = destino + fuente+ acarreo
Si ha disfrutado de este artículo y siente que ha aprendido algo valioso, por favor compártalo.