⚙️NUMEROS
Los datos numerocps generalmente se representan en un sistema binario. Las instrucciones aritmeticas operan sobre datos binarios. Cuando los numeros se muestran en la pantalla o se ingresan desde el teclado, estan en formato ASCII.
Hasta ahora, hemos convertido estos datos de entrada en formato ASCII a binario para calculos aritmeticos y convertimos el resultado nuevamente a binario. Veamos esto:
section .data
msg db 'El resultaso es:', 0xA, 0xD
len equ $ - msg
segment . bss
sum resb 1
section .text
global _start
_start:
mov eax, '3'
sub eax, '0'
mov ebx, '4'
sub ebx, '0'
add eax, ebx
add eax, '0'
mov [sum], eax
mov ecx, msg
mov edx, len
mov ebx, 1
mov eax, 4
int 0x80
mov ecx, sum
mov edx, 1
mov ebx, 1
mov eax, 4
int 0x80
mov eax, 1
int 0x80
Tales conversiones, sin embargo, tienen una sobrecarga, y la programcion en lenguaje ensamblador permite procesar numeros de una manera mas eficiente, en forma binaria. Los numeros decimales se pueden representar de doa formas:
ASCII
BDC (decimal codificado a binario)
Representacion ASCII
En la representacion ASCII, los decimales se almacenan como cadenas de cracteres ascii. Por ejemplo, el valor decimal 1234 se almacena como:
31 32 33 34H
Donde 31H es el valor ascii para 1, 32H es para el 2 y asi sucesivamente. Hay cuatro instrucciones para procesar numeros en ASCII:
AAA - Ajuste ASCII despues de la adicion.
AAS - Ajuste ASCII despues de la resta.
AAM - Ajuste ASCII despues de la multipicaion.
AAD - Ajuste ASCII antes de la division.
estas instrucciones no toman ningun operando y asumen que el operando requerido esta en el registro AL.
Representacion BCD:
Hay dos tipos de representacion BCD:
Representacion BCD sin empaquetar.
Representacion BCD empaquetada.
En la representacion BCD sin empaquetar, cada byte alamacena un equivalente binario de un digito decimal. Por ejemplo, el numero 1234 se almacena como:
01 02 03 04H
Hay dos instrucciones para procesar estos numeros:
AAM - Ajuste ASCII despues de la multiplicacion.
AAD - Ajuste ASCII antes de la division.
Las cuatro instrucciones de ajuste ASCII, AAA, AAS, AAM y AAD, tambien se pueden usar con la representacion BCD sin empaquetar. En la representacion BCD empaquetada, cada digito se almacena utilizando 4 bits. Dos digitos decimales se empaquetan en un byte. Por ejemplo, el numero 1234 se almacena como:
12 34H
Hay dos instrucciones para procesar estos numeros:
DAA - Ajuste decimal despues de la suma.
DAS - Ajuste decimal despues de la resta
EJEMPLO:
El siguiente programa suma dos numeros decimales de 5 diigitos y muestra la suma.
selection .data
msg db 'La suma es: ', 0xA
len equ $ - msg
num1 db '12345'
num2 db '23456'
sum db ' '
section .txt
global _start
_start:
mov esi, 4
mov ecx, 5
clc
add_loop:
mov al, [num1 + esi]
mov al, [num2 + esi]
aaa
pushf
or al, 30h
popf
mov [sum + esi], al
dec esi
loop add_loop
mov edx, leng
mov ecx, msg
mov ebx, 1
mov eax, 4
int 0x80
mov edx, 5
mov ecx, sum
mov ebx, 1
mov eax, 4
int 0x80
mov eax, 1
int 0x80
Última actualización