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
Publicar un comentario