【发布时间】:2014-11-05 23:19:01
【问题描述】:
有人可以帮我理解这个用汇编编写的 for 循环吗?
0x08048d27 <+37>: mov $0x1, %ebx //set ebx = 1
0x08048d2c <+42>: lea -0x20(%ebp),%esi //set esi to the address of the first element of the array
0x08048d2f <+45>: mov -0x4(%esi,%ebx,4),%eax //eax = esi + ebx * 4
0x08048d33 <+49>: sub %ebx,%eax //phase
0x08048d35 <+51>: cmp %eax,(%esi,%ebx,4)
0x08048d38 <+54>: je 0x8048d3f <phase_2+61>
0x08048d3a <+56>: call 0x8049108 <explode_bomb>
0x08048d3f <+61>: add $0x1,%ebx
0x08048d42 <+64>: cmp $0x6,%ebx
0x08048d45 <+67>: jne 0x8048d2f <phase_2+45>
0x08048d47 <+69>: add $0x30,%esp
0x08048d4a <+72>: pop %ebx
0x08048d4b <+73>: pop %esi
0x08048d4c <+74>: pop %ebp
我对“mov -0x4(%esi,%ebx,4),%eax”和“cmp %eax,(%esi,%ebx,4)”特别感到困惑,这些是什么意思?
谢谢!
【问题讨论】:
-
您是否查找过有关汇编语法的参考资料?
-
我不熟悉这个版本的程序集,但我至少可以告诉你 0x30 != 30。'0x' 前缀表示该数字是十六进制(以 16 为基数)数字,您熟悉十进制(以 10 为基数)的数字。 0x30 = 16*3 = 48
-
哦,炸弹实验室,玩得开心....
-
@Unn 谢谢!令人困惑的是,我知道这种外观要求 x、4x-4 等... 6 个数字,但我无法弄清楚第一个数字...
标签: assembly