2019-2020-1 20199321《Linux内核原理与分析》第二周作业

第一部分 基础知识

寄存器的组成

以16位的8086 CPU的寄存器为例,可分为三类。

通用寄存器

数据寄存器:AX(累加器),BX(基地址寄存器),CX(计数器寄存器),DX(数据寄存器)。均可当做两个独立的8位寄存器来使用。
指针寄存器:SP(堆栈指针寄存器)、BP(基指针寄存器)
变址寄存器:SI(源变址寄存器)、DI(目的变址寄存器)

控制寄存器

IP(指令指针寄存器),FLAG(标志寄存器)

段寄存器

CS(代码段寄存器),DS(数据段寄存器),SS(堆栈段寄存器),ES(附加段寄存器)

在32位中,一般会在开头加E;在64位中,般会在开头加R。

常用汇编指令

末位是 b 指8位,末位是 w 指16位,末位是 l 指32位,末位是 q 指64位
“从前往后看”
寄存器寻址: movl %eax, %edx;
立即寻址: movl $0x123, %edx;
直接寻址: movl 0x123, %edx;
间接寻址:movl (%eax), %edx;
变址寻址:movl 4(%eax), %edx;(在原地址上加4)

pushl %eax 相当于 subl $4, %esp; movl %eax, (%esp);
popl %eax 相当于 movl (%esp), %eax; subl $4, %esp;

第二部分 实验总结

:wq命令在按“ESC”后输入;注意g / .s*/的输入

实验分析

leave指令用于撤销函数堆栈,相当于movl %ebp, %esp; popl %ebp;
enter指令用于撤销函数堆栈,相当于pushl %ebp; movl %esp, %ebp;

要理解代码的含义是什么,首先要知道ESP、EBP、EIP寄存器中要存储的内容是什么,结合在学习C语言时堆栈的理解来理解。

猜你喜欢

转载自www.cnblogs.com/20199321zjy/p/11531377.html