1.通用寄存器
一个典型的CPU由运算器,控制器和寄存器几部分构成,这些器件靠内部总线连接。程序员可以通过修改寄存器的数据,来实现对CPU的控制。不同CPU的寄存器的结构,数量都不相同。8086CPU所有的寄存器都是16位的,可以存放两个字节。AX,BX,CX,DX这四个寄存器一般用来存放一般性数据,称为通用寄存器。
由于上一代CPU都是8位,出于兼容性考虑,将通用寄存器分为两个8位寄存器。如AX由AH和AL组成,例如:
在数据运算和传输的时候,操作对象位数应该一致。
2.物理地址的产生
由于8086CPU的地址总线有20位,而内部总线只有16位,8086CPU有一套独特的计算物理地址的方法,可以通过两次16位数据的传输加权算出20位的地理地址:
物理地址=段地址*16+偏移地址
乘以16是因为地址都是16进制计算,相当于让段地址左移一位,然后在这个基础上偏移。
3.数据的基本知识
3.1字的存储
低位字节存在低地址,高位字节存在高地址,起始地址为N的字单元简称N地址单元。
3.2mov,sub,add指令的用法
三者用法基本一致,具体情况如图:
4.段寄存器
段的划分来源于CPU,在编程时可将一段连续地址视为段。受16位寻址能力影响,段的最大长度位64KB(216B)。也由于段地址要乘一个16,所以段首地址必为16的倍数。这里要理解一下,记住这些话都是基于16进制而言,不要用十进制的思维去看待,比如2200H就是16的整数倍。
- 代码寄存器CS,指针寄存器IP。CS:IP对应的数据会被认定为指令,计算机读取对应地址的数据,识别指令长度,然后IP自动加上指令长度,以这样的方式实现读取下一条指令。
- 对CS:IP的修改只能用jmp指令,全修改:jmp 段地址:偏移地址;只修改IP:jmp 某个合法寄存器。
- 访问数据的DS。在读取数据时默认以DS内的数据为段地址。
- 栈SS:SP。栈遵守LIFO原则,也就是后进先出。基本操作为入栈PUSH,出栈POP。要注意,栈的所有操作对象都是字,不是字节。当入栈时,先SP=SP-2,再放数据;出栈时,先出数据,再SP=SP+2.