任务一:阅读学习教材第1,2章
学习知识点:
Linux内核使用的汇编格式是AT&T。
2.2.1x86 CPU的寄存器
8086CPU有14个寄存器分为通用寄存器、控制寄存器和段寄存器三种类型。
通用寄存器又分为数据寄存器、指针寄存器和变址寄存器。AX、BX、CX、DX为数据寄存 器;SP和BP为指针寄存器;SI和DI为变址寄存器。
控制寄存器分为指令指针寄存器和标志寄存器,分别为IP和FLAG。
段寄存器主要有CS、DS、SS、ES。
x86-64有16个64位寄存器,分别是 RAX 、 RBX 、 RCX 、RDX 、RSI 、RDI 、RDP、RSP 以及新增的R8~R15。这些寄存器在编译器中的基本使用约定为:
RAX 作为函数返回值使用。
RSP 栈指针寄存器,指向栈顶。
RDI 、RSI 、RDX 、RCX 、R8、R9用作函数参数,依次对应第1~6个参数。
RBX 、RBP 、R10、R11、R12、R13、R14、R15用作数据存储。
2.2.2 基本汇编语言语法规则:
-
指令:汇编程序由一系列指令组成,每个指令对计算机执行特定的操作。指令通常以助记符表示,如mov、add等其中几个重要的指令还有call(函数调用)、ret(函数返回)、pushl(将数据推入栈)、popl(从栈中弹出数据)。
-
操作数:指令通常包括一个或多个操作数,操作数是指令操作的数据。操作数分为寄存器、存储器、立即数。
-
寄存器:表示某个寄存器中保存的值,如%rax、%eax。
-
存储器:根据计算出的有效地址来访问存储器的某个未知。汇编语言可以用于读取和写入内存中的数据,内存地址通常用方括号表示。
-
寄存器寻址:所谓寄存器寻址就是操作的是寄存器,不和内存打交道。
-
立即寻址:用一个$开头后面跟一个数值。直接寻址没有$。
-
间接寻址:寄存器加个小括号。
任务一过程中向chatgpt提问:
https://chat.openai.com/share/b994be38-4401-461c-a213-07bafd36b711
任务二:已完成实验楼实验一汇编语言编写
任务二过程中向chatgpt的提问:
https://chat.openai.com/share/b4c4d430-79f4-4768-8a20-19c6cd3edeec