我写了这个汇编程序:
start:
call read_hex
mov edi, eax ; edi stores the limit.
mov esi, 0 ; esi stores the counting variable.
loopBody:
inc esi
mov eax, esi
call print_eax
mov eax, edi
call print_eax
cmp edi, esi
JE finishUp
call read_hex
add ebx, eax
JMP loopBody
finishUp:
mov eax, edi
call print_eax
push 0
call [ExitProcess]
归属分配是:
编写一个以值m作为输入的程序。然后接收m 来自用户的连续数字,将所有这些数字相加并将总和打印回控制台。
我的想法是存储用户输入的限制。
esi用作计数变量。
现在假设我已输入3作为限制(它应计算三个连续数字)。 0是我每次输入下一个数字时输入的内容。
我得到以下结果:
第一次通过循环时,一切都在预料之中。
esi是1,edi是3。
但是下一个循环直到edi的值已经改为6ff7b !!
为什么edi改变了它的价值?
我没有碰过它!
答案 0 :(得分:3)
问题是由包含的功能" read_hex"。
引起的" read_hex"的代码可以在这里看到:
https://github.com/xorpd/asm_prog_ex/blob/master/include/training.inc
edi在函数内多次更改。由此引起了意想不到的行为。
因此,对所有其他汇编程序的初学者:
包含其他人的代码时要小心。请记住,它可以改变您的计划状态。