【发布时间】:2014-12-14 20:27:30
【问题描述】:
我需要写一个字节数组但我不明白,只写了[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? -
嗯,
matrix times 8 db 0是什么? -
和
matrix db 0,0,0,0,0,0,0,0一样,是创建times n长度标签的便捷方式。 -
哦,很好,抱歉我不知道。但我有同样的问题,
EAX = 03010000应该是EAX = 0301070F。 -
嗯。让我处理它,我会回信。我会追踪 pcasm asm_io.inc 并在
gdb中运行它,看看发生了什么。