使用用户输入将Intel x86 Loop组装程序n次

时间:2019-06-03 01:37:12

标签: loops assembly x86 intel

我正在学习x86汇编语言,并且试图编写一个程序,该程序从用户输入中读取数字n(2位数字)并迭代n次。

我尝试了很多方法,但是遇到了无限循环或段错误。

=IFERROR(ARRAYFORMULA((SUM(IFERROR(VLOOKUP(TRANSPOSE(C2:2), 
 'Data Validation'!C:D, 2, 0))/COUNTA(C2:2))*1)))

我想保存在ecx中,并将此数字重复n次

1 个答案:

答案 0 :(得分:0)

ecx的调用使您的printf寄存器被吹走了。

ecx在某些调用约定中是易失性寄存器,很可能loop中留下的内容破坏了您的printf

首先,我会在原始问题所附的评论中遵循Raymond的建议,并附加调试器以亲自见证这种行为。

关于解决方案,您可以尝试保留ecx并在通话后恢复它,以查看区别:

; for example
mov edi,ecx
call printf
mov ecx,edi

这里可能会有更多问题(由于代码不完整而难以确定……但是诸如堆栈分配之类的东西似乎出于某种原因似乎很有趣)-但这是一个好地方开始。

Peter在我的回答下留下了评论,指出您可以通过完全不使用ecx来循环解决问题并通过手动执行来优化我的解决方案,进行代码更改:

   mov edi, eax

printNTimes:

    push msgDig
    call printf
    add esp, 4
    dec edi
    jnz printNTimes