es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Parece que falta la instrucción mov [result], al después de la instrucción add al, byte '0'. Esta instrucción es necesaria para almacenar el resultado de la instrucción add en la variable result. Sin esta instrucción, la variable result permanecerá sin cambios y la salida del programa será el valor predeterminado de la variable result, que es �%.

Comments are closed.