装配无限循环

发布于 2024-10-11 11:21:01 字数 284 浏览 6 评论 0原文

我的 x86 汇编传奇还在继续,我进入了这段代码的无限循环,我有点困惑。

movl $1, %ecx
movl $4, %edi

do_loop:
   cmpl %edi, %ecx
   je do_exit
   .........
   do_stuff
   .........
   incl %ecx
   jmp do_loop
do_exit:

我期望当 %ecx 达到 4 时跳转到 do_exit: ,因为它在每次迭代中都会递增

My saga with x86 assembly continues, I'm getting into an infinite loop with this piece of code and I'm a bit puzzled.

movl $1, %ecx
movl $4, %edi

do_loop:
   cmpl %edi, %ecx
   je do_exit
   .........
   do_stuff
   .........
   incl %ecx
   jmp do_loop
do_exit:

I'm expecting a jump to do_exit: when %ecx reaches 4 since it's incremented in every iteration

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

一萌ing 2024-10-18 11:21:01

没有调试器? do_stuff 是否修改 %edi?尝试注释掉 do_stuff 。

No debugger? Does do_stuff modify %edi? Try commenting do_stuff out.

泼猴你往哪里跑 2024-10-18 11:21:01

正如其他人提到的,请小心 do_stuff 中的寄存器使用。您真正要寻找的是调用约定,尤其是这一行:

< em>函数中可以使用寄存器 EAX、ECX 和 EDX。

As others have mentioned, be careful with register usage in do_stuff. And the real thing that you are looking for are calling conventions, and especially this line:

Registers EAX, ECX, and EDX are available for use in the function.

活雷疯 2024-10-18 11:21:01

我不知道 do_exit 后面是否有空格,也不知道你如何执行汇编代码......

但尝试在 do_exit 之后添加以下内容:

离开

返回

I dont know if the do_exit is followed by blanks and I have no idea how you are executing the assembly code...

but try to add the following after the do_exit:

leave

ret

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文