Explicación de operación matemática en Emulador

 




section .text -----------> Indica que comieza la seccion de codigo del programa

 

global _start -----------> Esta linea declara la etiqueta global `_start, que es el punto de entrada del                                              programa

 

_start:          ------------> Aquí comienza la definicion del codigo en sí

 

 

 

    mov     eax, [x]   --------> Esta instruccion mueve el valor almacenado en la direccion de memoria                                                  apuntada por la etiqueta `x`al registro èax

 



    sub     eax, '0'    ----------> Aquí se resta el valor  ASCII de `0` a èax`. Esto se hace para convertir                                                 el valor en el registro  èax`de un digito en su equivalente numerico. 

 

    mov     ebx, [y] ----------> Esta instruccion mueve el valor almacenado en la direccion de memoria                                                 apuntada por la etiqueta `y`al registro èbx`

 

    sub     ebx, '0' --------------> Al igual que antes, se resta el valor ASCII  de `'0'`al registro èbx`para                                                   convertir el valor en su equivalente numerico

 

    add     eax, ebx  ------------> Aquí se suma e valor en èax`con valor en èbx`y se almacena el                                                              resultado en èax`

 

    add     eax, '0'   --------------> Se suma el valor ASCII  de `0`al registro èax`para convertir                                                                     el resultado nuevamente en su equivalente ASCII

 

 

 

    mov     [sum], eax ----------> El valor `eax` se alamcena en la direccion de memoria apuntada                                                             por la etiqueta `sum`

 

 

 

    mov     ecx, msg -------------> Se mueve la direccion de memoria apuntada por la etiqueta `msg`                                                          al registro `ecx`

 

    mov     edx, len -------------> Se mueve el valor almacenado en la etiqueta `len`(que                                                                           representa la longitud del mensaje) al registro `edx

 

    mov     ebx, 1----------------> El valor  se mueve al registro `ebx`. en la llamada al sistema,                                                               `ebx`se utiliza para indicar el descriptor del archivo, donde                                                                       representa la salida estandar (STDOUT)

 

    mov     eax, 4 ---------------> El valor se mueve al registro `eax. en la llamada al sistema,                                                                    `eax`se utiliza para indicar la funcion de la llamada , donde                                                                     representa la llamada al sistema `Write`

 

    int     0x80   ------------------> Esta instruccion genera una interrupcion de software para realizar                                                          la llamada al sistema

 

 

 

    mov     ecx, sum --------------> se mueve la direccionde memoria apuntada por la etiqueta `sum`                                                           al regitro `ecx`

 

    mov     edx, 1   -----------> El valor 1se mueve al registro `edx`, que representa la longitud                                                             de  los datos que se van a escribir

 

    mov     ebx, 1  ----------> El valor se mueve al registro `ebx`, que indica el descriptor de                                                               archivo (STDOUT) para la salida estandar

 

    mov     eax, 4   -------> El valor 4 se mueve al registro `eax`para la llamada al sistema

 

    int     0x80  ---------> Invoca la interrupcion `0x80` para realizar la segunda llamada al sistema

 

 

 

    mov     eax, 1 ---------> mueve el vaor 1 al registro `eax`, que representa la lamada al sistema `exit`

 

    int     0x80 --------> Invoca la interrupcion `0x80` para finalizar el programa

 

 

 

section .data   _------> Esta linea define la seccion de datos del programa, donde se                                                                  colocan los datos inicializados

 

    x db '5'  _------> definir la variable llamada `x`y se le asigna el valor `5`. La                                                                     instruccion `db`significa `define byte`, indicando que la variable                                                           ocupará un byte de memoria

 

    y db '3' --------> Definir la variable llamada `y`y se le asigna el valor `3`. Al igual                                                           que en la linea anterior, se utiliza la intruccion `db`para definir un byte

 

    msg db  "sum of x and y is "  ---------> Esta linea define una llamada constante `msg` y se                                                                                   le asigna el mensaje `sum of xey is`. Nuevamente,                                                                                   se utiliza la intruccion `db`àra definir un byte

 

    len equ $ - msg    ---------> Esta linea define una llamada constante `len ` y la iguala a la                                                                  diferencia entre la posicion actual en el programa (Representada                                                            por `$`) y la posicion de la etiqueta `msg`. en otras palabras, esta                                                          linea calcula la longitud de la cadena `msg`.

 

 

 

segment .bss  ------------> Esta linea define una seccion llamada `.bss`donde se colocan los                                                            datos no inicializados

 

 

 

    sum resb 1  --------> Reserva un byte de memoria para una variable llamada `sum`. La                                                         instruccion `resb`significa `reserva bytes`y se utiliza para asignar                                                           espacio en memoria sin inicializarlo

Comentarios

Entradas más populares de este blog

Código Java Notación polaca-polaca Inversa

1.6 Generación de la tabla de símbolo y de direcciones

Código en EMU8086