x86汇编语言学习(一)基础知识
学习参考资料:《汇编语言》(第三版)清华大学出版社 王爽著
总线
地址总线的宽度决定CPU的寻址能力。一个CPU有N根地址总线,最多可以寻找2N内存单元(B)。
例如:地址总线宽度分别为16根、20根、24根、32根的CPU,寻址能力分别为:64KB,1MB,16MB,4GB.
数据总线的宽度决定CPU与其他器件进行数据传送时的一次数据传送量。一个CPU有N根数据总线,一次可传送一个N位二进制数据。
例如:数据总线宽度分别为8根、16根、32根的CPU,一次可以传送的数据分别为:1B,2B,4B.
控制总线的宽度决定CPU对系统中其他器件的控制能力。有多少根控制总线,意味着CPU提供了多少种对外部器件的控制。
寄存器
8086CPU有14个寄存器:AX、BX、CX、DX、SI、DI、SP、BP、IP、CS、SS、DS、ES、PSW。都是16位的。
通用寄存器
AX、BX、CX、DX
常用来存放一般性的数据。每个都能存储一个16位的数据,也可以分成两个独立的8位寄存器使用,如AX可以分成AH和AL。高8位构成AH,低8位构成AL。
寄存器 | 寄存器中的数据 | 表示的值 |
---|---|---|
AX | 0100111000100000 | 20000(0x4E20) |
AH | 01001110 | 78(0x4E) |
AL | 00100000 | 32(0x20) |
在8086CPU中,只有BX、SI、DI、BP这四个寄存器可以用在“[…]”中来进行内存单元的寻址。这四个寄存器可以单独出现,或只能以四种组合出现:BX和SI,BX和DI,BP和SI,BP和DI。而只要在“[…]”中使用BP且没有显性给出段地址,段地址默认在SS中。
段寄存器
CS、DS、SS、ES
8086CPU访问物理内存时,地址加法器采用物理地址=段地址*16+偏移地址的方法用段地址和偏移地址合成物理地址。
本质上的寻址模式是物理地址=基础地址+偏移地址。
CS是代码段寄存器,IP是指令指针寄存器。8086CPU从内存CS*16+IP单元开始读取指令并执行,即CPU将CS:IP指向的内容当作指令执行。读取一条指令后,IP中的值会自动增加所读取指令的长度,从而指向下一条指令。
修改CS和IP寄存器可以使用jmp指令,形如“jmp CS:IP”。
DS通常存放要访问