这是关于王爽老师写的第二版《汇编语言》的学习笔记,因为汇编不是常常用到,所以在这里列举一下汇编的基础知识,常用语法,以便自己以后随时翻阅。
我学习汇编的初衷不是想真正利用汇编去编写程序,我只是想单纯的能看懂汇编,所以我只是简单的翻阅了一边书籍,书中的每个上机实验并没有仔细实践,没有直接编写汇编程序的经验,故并不会编写汇编。在我看来汇编只是来理解操作系统,和优化程序思路的一种方式。
首先本书介绍的是8086CPU,通过对8086系统的介绍,来介绍8086中的指令集,X86系列的CPU架构是一直沿用到现在的,无论是I5之类的CPU,都是在8086架构上实现的,多出来的只是CPU的处理速度,和通用寄存器的数量,与寄存器的位数。所有我认为即使8086CPU虽然是一个老古董,是16位系统,但是还是很有参考价值的。
1.寄存器
一个典型的CPU是由运算器,控制器,寄存器等器件构成的,寄存器是CPU中一个很重要的部分,更是汇编语言直接打交道的对象,汇编程序通过控制寄存器的内存来实现对CPU的控制。8086CPU中有着这些寄存器(之后会详细提到)分别是:AX,BX,CX,DX,SI,DI,SP,BP,IP,CS,SS,DS,ES,PSW,他们全部都是16位的寄存器,先简单介绍一下各个寄存器的功能:
AX,BX,CX,DX这四个是通用寄存器,就是谁都可以使用,他们还能拆成两个8位的寄存器(高八位低八位),其中BX与内存地址有关,CX与循环次数有关。
SI,DI是BX的亲戚,用来辅助BX来对内存进行寻址。
SP是栈顶的地址,BP是来辅助SP的。
IP是程序运行的地址。
CS,SS,DS,ES是段寄存器,他们很特殊,不能直接向其中写值(8086硬件原因),需要通过通用寄存器辅助。
PSW是标志位寄存器。
2.CPU运行方式
CPU是计算机的核心部件,那么要想使用CPU对计算机进行操作,就必须为他提供指令与数据,这些指令与数据都是存储在内存中的,对于CPU来说内存只是一段连续的存储数据的地方,那么CPU怎么才能知道什么样的数据才是指令,而那些数据才是需要用的计算数据?
这段数据是代码还是数据是由程序员说了算,我想让他是什么就是什么。CPU是根据CS:IP的指向(之后具体介绍)来分别的,CS:IP指向的内存地址中的数据就是代码。
CPU与内存有着三条总线相连,分别是数据总线,地址总线(20位),控制总线。CPU首先通过CS:IP的指的地址,通过地址总线找到那段内存,然后由那段内存所表示的代码通过控制总线传回CPU,最后通过数据总线来执行对内存的读写。
3.基础指令
介绍几条最基础的指令mov,add,sub。
mov ax,1000h ;把1000h放入ax寄存器中
add ax,bx ;把bx的值加到ax中,同理sub也是一样
add指令还有一种其他形式inc,用C语言来描述就是自增操作符,同理sub中也有一种dec。他们比较特殊,因为inc与dec不会改变标志寄存位。