教材学习内容总结
·IA32利用程序栈来支持过程调用(包括将数据和控制)。为单个过程分配的那部分栈做栈帧。最底端(地址最大)%ebp为帧指针;最顶端(地址最小)%esp为栈指针。当程序执行时,栈指针可以移动
MOV语句
·MOV相当于C语言的赋值”=“,注意ATT格式中的方向, 另外不能从内存地址直接MOV到另一个内存地址,要用寄存器中转一下。
在IA32中规定不能从内存地址直接MOV到另一个内存地址,要用寄存器进行中转。其中,MOVS是符号扩展;MOVZ是零扩展。
1.MOV:将源操作数的值复制到目的操作数中;
2.MOVS:将一个较小的源数据复制到一个较大的数据位置,高位用位扩展;
3.MOVZ:将一个较小的源数据复制到一个较大的数据位置,高位用零扩展。
操作数的三种类型
1·立即数:不超过32位的数值
2·寄存器:用Ea表示任意寄存器a,R[Ea]表示它的值
3·存储器:会根据计算出来的地址访问某个内存,用M[addr]表示
部分练习代码截图
使用gcc -S -o timu.s timu.c -32命令编译成汇编代码
删除gcc产生代码中以"."开头的编译器指令
感悟
由于上学期没有学习过汇编语言,这几周还需要将汇编方面的基础知识学习了解,这样才能更高效地学好Linux.
本周代码托管
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 4000行 | 25篇 | 350小时 | |
第一周 | 0/ 0 | 2/2 | 20/30 | |
第二周 | 100/100 | 1/3 | 20/50 | |
第三周 | 300/400 | 1/4 | 20/70 | |
第四周 | 0/400 | 0/4 | 0/70 | |
第五周 | 300/700 | 2/6 | 20/90 |