assembly 我正在用x86汇编语言计算一个数组元素的和,我应该在ecx寄存器中得到100000,但是我得到了A0000?[已关闭]

bxfogqkk  于 2023-02-04  发布在  其他
关注(0)|答案(1)|浏览(113)

这个问题是由打字错误或无法再重现的问题引起的。虽然类似的问题在这里可能是on-topic,但这个问题的解决方式不太可能帮助未来的读者。
2天前关闭。
Improve this question
所以我有一个DWORD类型变量:变量2数据字10000小时、20000小时、30000小时、40000小时
我的程序是:

.data
var2 DWORD 10000h,20000h,30000h,40000h

.code
main PROC

mov eax, 0
mov ebx, 0
mov ecx, 0
mov edx, 0
mov eax, [var2]
mov ebx, [var2+4]
mov ecx, [var2+8]
mov edx, [var2+12]
add eax,ebx
add ecx, edx
add ecx, eax


call DumpRegs

exit

main ENDP
END main

一切似乎都工作正常,我的寄存器看起来像

但实际的答案应该是100000小时,不是吗?因为10000 + 20000 + 30000 + 40000是100000小时。
我试过改变寄存器,把总数放在一个变量中,然后把它移到一个寄存器中,但是我总是得到相同的A0000。

v1uwarro

v1uwarro1#

但实际的答案应该是100000小时,不是吗?因为10000 + 20000 + 30000 + 40000是100000小时。
不,你搞错了。
10000小时+20000小时+30000小时+40000小时= A0000小时
(To得到100000h,你必须在最后再加上60000h。)
你可以在任何一个支持十六进制的计算器中尝试这个方法(例如Windows,如果你切换到程序员模式的话)。从十进制的1 + 2 + 3 + 4 = 10,十进制的10在十六进制中是A的事实来看,这也是合乎逻辑的。

00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10
|1>|--2->|---3--->|-----4---->^^

相关问题