⚙️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