前言:
经过五天汇编语言的学习,自己对于AT&T汇编语言指令的理解更加深入。昨天对于阶段五的理解有一条语句出现了偏差,今天花费了好长时间才纠正过来,成功度过阶段五。明天争取把阶段六完成,加油!
汇编指令
mov 0x804a2a0(,%eax,4),%eax
关于这段代码的理解:eax=eax*4+0x804a2a0
但是为什么地址偏移量要乘4呢?
因为这是一个数字数组,一个整型变量是四个字节,比如eax=10,eax=10× 4 +0x804a2a0,表示的是array[10],而不是自己之前的错误理解array[40],这是错误的。
因为这是数字数组,并非字符数组。
解题过程:
如此解题过程就变得简单许多了,我们接着昨天的分析,需要满足两个条件:①循环十五次 ②eax为15
通过观察,这题可以从后往前推,第十五次的时候,eax为15, 我们发现array[6]=15,所以倒数第二个eax为6,又发现array[14]=6 ,同理,继续往前推,array[2]=14, … , 推到第一个的时候array[5]=12,所以我们输入的参数1为5,而参数2需要求累加和,我们发现除了5,1到15都加了一遍。python几行代码即可解决。
sum=0;
for a in range(0,16):
sum += a;
print sum-5
结果验证
总结
理解了每一行代码,发现AT&T汇编并没有想象中的那么难,今天看了一下phase(6),还没有完成,明天继续努力!加油!