一个汇编小demo的详解

来源:互联网 发布:c语言标准库函数表格 编辑:程序博客网 时间:2024/06/05 11:05

<span style="font-size: 18px;">C语言代码如下:</span>
int exchange(int *xp, int y){int x = *xp;        *xp = y;return x;}

今天主要还是看了mov的指令,所以就根据程序内的两个变量转化的操作谈一下映射到汇编语言的情况。。。。。不得不说,今天刚刚一脚踏进汇编的水里,就有一种随时可能会被淹死的感觉。。。。(太抽象了有木有)


汇编代码如下

xp at %ebp + 8

y  at %ebp + 12

这是汇编代码里面的两条注释,意思就是说xp 和y 这两个变量是分别存在于这两个内存地址中的,其实这两条如果变为寻址形式的话,应该是变为8(%ebp) 12(%ebp),这两个内容和%ebp + 8, %ebp +12应该是一样的。都是两个变量的地址

movl  8(%ebp),    %edxmovl    (%edx) ,   %eaxmovl  12(%ebp),   %ecxmovl   %ecx. (%edx)  

一开始其实没太看懂,主要是因为(%ebp)这样的没懂,后来翻了下书才知道,这样就是表示表示一个取址操作,去寻找值为ebp寄存器中存储的值的内存地址

第一条指令也就是说把 xp给了%edx这个寄存器,但是请注意此时的xp的值是一个地址

第二条指令执行了M[%edx]->%eax这样的操作,把*xp传送给%eax

第三条指令与第一条指令相同,把y的值传送给ecx这个寄存器

第四条指令也很清楚,将y的值传送给x值所在的内存区域,把x的值给覆盖。




总之,汇编不容易啊,我擦,就是我写这博客的时候我还被转悠晕了几次。。。。。。CSAPP这本书真是不容易看


0 0