# 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
    
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://bla0x1s-organization.gitbook.io/untitled-1/reverse-engineering/assembly-x86/numeros.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
