【发布时间】:2013-08-11 19:48:27
【问题描述】:
我在作业问题上需要帮助。我应该弄清楚这段代码运行后edx 的值是多少。
0x40106e <main+30>: mov $0x1,%edx
0x401073 <main+35>: mov $0x8,%ecx
0x401078 <main+40>: test %ecx,%ecx
0x40107a <main+42>: jg 0x40107e <main+46>
0x40107c <main+44>: jmp 0x40108a <main+58>
0x40107e <main+46>: lea (%ecx,%ecx,1),%eax
0x401081 <main+49>: lea (%eax,%edx,1),%eax
0x401084 <main+52>: lea 0xffffffff(%eax),%edx
0x401087 <main+55>: dec %ecx
0x401088 <main+56>: jmp 0x401078 <main+40>
0x40108a <main+58>: // endpoint
既然是家庭作业,我真的不想知道答案,而是想知道如何弄清楚。我在弄清楚循环时遇到了麻烦,但我想我明白了。我认为test %ecx,%ecx 循环直到%ecx 减为0。对吗?真正让我感动的是lea 的所有东西。我不知道那是在做什么。
【问题讨论】:
-
AT&T 内存操作数语法臭名昭著。见这里:asm.sourceforge.net/articles/linasm.html#Memory
-
为什么不在调试器中单步执行?