我需要写入一个字节数组,但我不太理解,只有 [matrix + 0]
和 [matrix + 1]
被写入了(我的意思是EAX应该等于0301070F
),我做错了什么吗?
这是我的代码:
%include "asm_io.inc"
segment .data
matrix times 4 db 0
segment .bss
segment .text
global asm_main
asm_main:
enter 0,0
pusha
mov eax, 0
mov dword [matrix + 3], 15
mov dword [matrix], 3
mov dword [matrix + 1], 1
mov dword [matrix + 2], 7
mov ah, [matrix]
mov al, [matrix + 1]
rol eax, 16
mov ah, [matrix + 2]
mov al, [matrix + 3]
dump_regs 1
popa
mov eax, 0
leave
ret
以下是运行dump_regs 1
后的输出:
Register Dump # 1
EAX = 03010000 EBX = B774FFF4 ECX = BFF7C924 EDX = BFF7C8B4
ESI = 00000000 EDI = 00000000 EBP = BFF7C868 ESP = BFF7C848
EIP = 080484D8 FLAGS = 0282 SF
调用者是一段简单的
C
程序:int main() {
int ret_status;
ret_status = asm_main();
return ret_status;
}
编辑:
我发现这里有些错误,如果我执行这段代码,所有内容都可以正常工作:
mov dword [matrix], 3
mov dword [matrix + 1], 1
mov dword [matrix + 2], 7
mov dword [matrix + 3], 15
但是如果我执行这个操作,它不起作用:
mov dword [matrix + 3], 15
mov dword [matrix], 3
mov dword [matrix + 1], 1
mov dword [matrix + 2], 7
为什么?
matrix
是一个单字节呢?在数据段中,你计划处理除matrix
地址之外的内容吗?为什么不使用matrix times 8 db 0
呢? - David C. Rankinmatrix times 8 db 0
是什么? - user3697569gdb
中运行它,看看发生了什么。 - David C. Rankinbyte
而不是dword
会有帮助的话就更好了(也许可以用一些 ASCII 艺术来展示内存中正在发生的事情)。我删除了我的答案,并将其重新发布为评论,因为它更像是一个“有根据的猜测”。 - Frerich Raabe