我是个汇编新手,我尝试迭代数组,找到和,然后把和放入eax。这是我目前为止的代码。
.data
myArray db 1, 2, 3
.code
main PROC
mov eax, 3
mov ebx, 0
mov esi, OFFSET myArray
top: add ebx, [esi]
add ecx, 1
dec eax
jnz top
done:
mov eax, ebx
INVOKE ExitProcess, 0
我很确定我使用了错误的偏移量。当我调试程序时,ebx仍然是0,即使我添加了[esi]到它。就像我说的,我很确定我使用了错误的偏移量,但是关于如何修复它的任何提示,以便在每次迭代中将[esi]添加到ebx。当我在mov eax,ebx有断点时注册:EAX = 00000000电子采购交易= 00090603电子采购交易= 009B1008电子采购交易= 009B1005电子采购服务= 009B4000电子采购数据交换= 009B1005电子采购实施计划= 009B1025电子采购计划= 0082FE18电子采购业务计划= 0082FE24电子采购计划= 00000246
1条答案
按热度按时间zzzyeukh1#
对于MASM风格的汇编程序,使用
OFFSET
是可以的,但是add ecx, 1
应该是add esi, 1
?add ebx, [esi]
指令将整个双字添加到EBX。由于 myArray 由字节组成,因此需要扩展值
这两个错误都解释了为什么转储最后显示
EBX = 00090603
(00030201 h +00030201 h +00030201 h = 00090603 h)。因为最终你还是想在EAX中得到结果,所以在循环中也要加到EAX而不是EBX中。