我有一段(x86)汇编代码,我正在试图弄清楚它的作用。
...
6: 81 ec 00 01 00 00 sub $0x100, %esp
c: 31 c9 xor %ecx , %ecx
e: 88 0c 0c mov %cl , (%esp, %ecx, 1)
11: fe c1 inc %cl
13: 75 f9 jne 0xe
....
看起来它会循环直到"JNE"评估为false,即零标志= 0。(可能将数字1、2、3...放入堆栈中??)
根据我对汇编的短暂调查(我是新手),似乎通过执行比较操作(CMP)设置零标志,但我没有看到比较操作。
那么,在什么条件下它会跳出这个循环呢?
mov %cl, (%esp, %ecx, 1)
,我认为我都理解了。用英语来说,我会说“将 CX 的低8位(CL)移动到 ESP+ECX地址的RAM中”,这很有道理,但是第三个操作数的1
是什么意思?这真的是array[cl + 1] = cl
(堆栈溢出?)还是array[cl] = cl + 1
?也许我错过了x86汇编的一些微妙之处,但我很好奇。 - mpontillomov [esp+ecx], cl
。 - GreyCat[esp+1*ecx]
(特别是没有位移,而不是disp8=0或disp32=0),尽管在这种情况下并不真的存在歧义,因为esp
不能用作索引寄存器。 - David X