El registro no se está configurando con el valor del buffer en NASM x64.
Espero que puedas ayudarme con este problema. Tengo que leer datos de otro archivo en nasm y quería comprobar el valor de los registros con gdb, pero descubrí que no se puede, así que codifiqué el valor del archivo en un “String”. Estoy bastante seguro de que hice algo terrible y es por eso que no está funcionando, pero como soy un principiante en nasm, no puedo encontrar mi error.
¿No se supone que eax es el valor del búfer? (valor de DebugStr en el ejemplo) ¿Por qué veo 0x31313130? Realmente espero que ustedes puedan ayudarme
SECTION .data
DebugStr: db "01111100 10101010 01111000", 10
DebugStrLen: equ 32
SECTION .bss
SECTION .text
global _start
_start:
xor rax, rax ; rax = 0
xor rbx, rbx ; rbx = 0
xor rcx, rcx ; rcx = 0
xor rdx, rdx ; rdx = 0
mov r8, DebugStr ; r8 = dirección de ReadBuffer
mov r9, Output ; r9 = dirección de OutputBuffer
;mov rax, 0 ; Especificar llamada a sys_read
;mov rdi, 0 ; Especificar Descriptor de Archivo 0: Entrada Estándar
;mov rsi, r8 ; Pasar el desplazamiento del búfer para leer
;mov rdx, ReadBufferSize ; Pasar el número de bytes a leer en un solo paso
;syscall
mov eax, [r8] ; eax = valor de ReadBuffer a eax = 01111100 10101010 01111000
davy.ai
Parece que el problema podría estar en la forma en que se accede al valor en
DebugStr
.Cuando se ejecuta
mov eax, [r8]
, se cargan los primeros 4 bytes de la ubicación de memoria a la que apuntar8
(que es la dirección deDebugStr
) eneax
. En este caso, esos primeros 4 bytes son'0111'
en representación ASCII, que al convertirse a hexadecimal es0x31313130
. Por lo tanto,eax
se está cargando con el valor0x31313130
.Para solucionar esto, podría ser necesario cargar todo el valor de
DebugStr
en un registro, por ejemplo, mediante el uso de un bucle para cargar cada byte individualmente eneax
. Alternativamente, podría ser necesario utilizar un tipo de datos o codificación diferente para el valor enDebugStr
, dependiendo de los requisitos de su programa.