Traducción: Instrucción en NASM Una instrucción en NASM es una operación que le indica a la CPU qué hacer. Cada instrucción está formada por un mnemónico y uno o más operandos. El mnemónico es una palabra clave que identifica la operación, mientras que los operandos son los datos que se utilizan para realizar la operación. Por ejemplo, la instrucción ADD sumará dos operandos y almacenará el resultado en otro operando. La sintaxis de la instrucción sería la siguiente: ADD destino, origen1, origen2 Donde “destino” es el registro o la dirección de memoria donde se almacenará el resultado, mientras que “origen1” y “origen2” son los dos operandos que se sumarán. NASM es un ensamblador muy potente que permite escribir código de bajo nivel con gran precisión. Si desea aprender a programar en NASM, deberá conocer el conjunto de instrucciones, la sintaxis y las convenciones de llamada. Con un poco de práctica, podrá crear programas muy eficientes y rápidos en lenguaje de ensamblaje.
Estoy tratando de aprender nasm, siguiendo este tutorial, he escrito este código
section .text
global _start
_start:
mov al, 1ah ; 0001 1010
mov bl, 40h ; 0100 0000
or al, bl ; 0101 1010 ==> 'Z'
add al, byte '0' ; convertir de decimal a ascii
mov [result], al
mov eax, 4 ;syscall (write)
mov ebx, 1 ;descriptor de archivo
mov ecx, result ;mensaje para escribir
mov edx, 1 ;longitud del mensaje
int 0x80 ;llamar al kernel
jmp outprog
outprog:
mov eax, 1
int 0x80
segment .bss
result resb 1
el resultado de nasm -f elf hello.asm ; ld -m elf_i386 -s -o hello hello.o; ./hello es un carácter extraño �% en lugar de imprimir ‘z’
¿Me estoy perdiendo algo?
davy.ai
Parece que falta la instrucción
mov [result], al
después de la instrucciónadd al, byte '0'
. Esta instrucción es necesaria para almacenar el resultado de la instrucciónadd
en la variableresult
. Sin esta instrucción, la variableresult
permanecerá sin cambios y la salida del programa será el valor predeterminado de la variableresult
, que es�%
.