第一章 80X86微型计算机组织
计算机的主要内部硬件包括微处理器、内存和寄存器;外部硬件是指外部设备,如键盘、鼠标、显示器、磁盘、光盘等。
什么是**汇编语言**?
汇编语言是一种对计算机硬件进行直接编程的语言,所以,要学好汇编语言,必须对微处理器、存储系统、输入/输出系统有叫深刻的理解。
IBM-PC系列计算机的存储器
要点:
1.二进制位和字节
二进制位(bit)是计算机存储数据的最小单元,只能存储二进制书0或1。8个连续的二进制位构成一个字节(Byte),字节的最低位成为第0位,最高位成为第7位。
两个字节组成一个字(Word),即一个字为16位:bit0~bit15,其中,bit0~bit7为低位字节,bit8~bit15为高位字节。
双字:4个字节,32位。
4字:8个字节,64位。
5字:10个字节,80位。
8字:16个字节,128位。
表示存储容量的一些单位:
KB:1KB=1024Bytes(即2^10字节)
MB: 1MB=1024Bytes(即2^20字节)
GB: 1GB=1024Bytes(即2^30字节)
2.存储单元的地址和内容
将内容的字节从0开始依次连续编号,字节对应的编号称为它的地址,计算机通过地址来访问内存单元。
内存是用来存放程序指令和数据的,一个存储单元存放的信息称为该存储单元中的内容。
一个字存入存储器要占相继的两个字节,存放时采取“高高低低”的原则(即低字节存入低地址,高位字节存入高地址)
3.IBM-PC系列计算机内存映像
要点:存储器系统划分为三部分:程序暂驻区(TPA)、系统内存区和扩展存储器系统(XMS)
TPA 程序暂驻区驻留操作系统和其他控制计算机的程序,也存放任何当前激活的或者非激活的应用程序,长度为640KB。
系统内存区 包括只读存储器或可擦写存储器中的程序以及RAM的数据区。
4.I/O空间
I/O系统是指I/O总线、I/O接口和I/O设备有关的软硬件的总称。
外设接口
外部设备与主机的通信是通过外设接口进行的。每个接口包括一组寄存器:
数据寄存器:用来存放外设和主机间传送的数据,这种寄存器实际上起缓冲器的作用。
状态寄存器:用来保存外部设备或接口的状态信息,以便CPU在必要时测试外设的状态,了解外设的工作情况。
命令寄存器:CPU给外设或接口的控制命令通过此寄存器送给外部设备。
端口地址:每个寄存器对应的编号称为它的端口地址。
IBM-PC计算机I/O地址空间可达64KB,所以I/O地址的地址范围是0000H~FFFFH。
IBM-PC系列计算机的总线
总线:地址总线、数据总线和控制总线,分别负责在微处理器与存储器和I/O设备之间传送地址、数据和控制信息。
地址总线:用于请求存储器的一个存储单元或者一个I/O端口.
数据总线:作用是在CPU与存储器之间或CPU与I/O地址空间之间传送数据。
控制总线:存储器读控制、存储器写控制、I/O读控制、I/O写控制。
5.微处理器的工作模式
CPU的任务是执行存放在存储器里的指令序列。它是由运算器、控制器、一组寄存器和高速缓存组成的。
CPU中的寄存器
累加器:AH AX AL
基址寄存器:BH BX BL
计数器:CH CX CL
数据寄存器:DH DX DL
堆栈指针:SP
基址指针:BP
目的变址:DI
原变址寄存器:SI
指令指针:IP
标志寄存器:FLAGS
段寄存器
代码段寄存器:CS
数据段寄存器:DS
附加段寄存器:ES
堆栈段寄存器:SS
还有一些通用寄存器就不一一介绍了
标志寄存器在实模式下,包含了一下的标志位
** 标志: O D I T S Z A P C**
** 位号. 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0**
** **以下列出每个标志位及功能的简要说明
C(进位) 计算结果的最高位有进位或借位,则C置为1,否则置为0。
P(奇偶性) 奇校验标志是逻辑0,偶校验标志是逻辑1.奇偶性就是在一个数中1的个数是偶数还是奇数。
A(辅助进位) 辅助进位标志保留加法的结果3位和4位间进位,或者减法后的结果3、4位间的借位,有进位或借位则A置为1,否则A置为0。
Z(零) 零标志表示一个算术或逻辑操作的结果是否为零。如果结果为0,Z置为1,结果不为0,Z置为0。
S(符号) 符号标志保持算术或逻辑指令后结果的算术符号。结果为负,S=1;结果为正,S=0。
T(陷阱) 陷阱允许通过芯片上调试特性来设置陷阱中断(调试一个程序,以便找到错误和故障)。如果T标志为1(允许),则微处理器中断程序。如果T标志是逻辑0,则设置陷阱特性被禁止。
I(中断) 中断标志是否响应外部可屏蔽中断请求。如果I=1,则中断允许。如果I=0,则中断被禁止。1标志的状态由STl(I标志置1)和CLI(I标志置0)指令来控制。
D(方向) 如果D=1则寄存器自动地递减;如果D=0则寄存器自动地递增。D标志通过STD(置方向)指令设置,通过CLD(清方向)指令清除。
O(溢出) 溢出标志在有符号数加或减,结果溢出,O置为1。溢出指示结果已超出数的范围。
段寄存器用来与微处理器中其他寄存器联合产生存储器地址。
每种段寄存器及它们的功能如下:
CS(代码段寄存器) 代码段是一个存储器区段,保存微处理器使用的代码(程序和过程)代码段寄存器用于定义存放代码的存储器的起始地址。
DS(数据段寄存器) 数据段是含有程序所用数据的存储区段,通过数据段的起始地址和偏移地址结合寻址数据。数据段寄存器就是用来定义数据段的起始地址的。
ES(附加段寄存器) 附加段是为某些串指令存放目标数据而外加的一个数据段。ES寄存器用来定义附加段的起始地址。
SS(堆栈段寄存器) 堆栈段寄存器定义堆栈用的存储区。堆栈段寄存器就是用来定义堆栈段的起始地址的。
6.实模式存储器寻址
第一个1MB存储器称做实存储器或常规存储器。
段和偏移
问题:16位的寄存器怎样来寻址20位的地址空间呢?
所有实模式存储器地址都由段地址组成。段寄存器内的段地址定义任意64KB存储段的开始地址。偏移地址是指在这个64KB存储段内任意一个单元的段内地址,即距段首的字节数,因此也称为相对地址。
回到该问题,要用16位的寄存器来寻址20位空间,就在段寄存器内容右边增补一个0H,形成20位存储器地址,允许它去访问第一个1MB存储器内以任何的以16B为边界的段起点。
存储单元的真实地址为物理地址,采用了段地址、偏移地址方案后,物理地址可以按如下公式计算:
物理地址=(段寄存器)X10H+偏移地址
例如段寄存器内容为1200H,它寻址在12000H单元的存储段。同样,如果段寄存器内容是1201H,它寻址开始于12010H单元的存储段。
隐含段和偏移寄存器
微处理器有一套段加偏移地址规则,用于各种实际的寻址方式。
段寄存器与固定搭配的偏移寄存器
CS寄存器
有效程序代码段得起始地址.加上在指令指针(IP)寄存器中的偏移值,就指明了为执行指令所要取得的指令地址。
(CS)+(IP)= 下一条指令的地址
DS寄存器 包含程序数据段得起始地址,该地址加上在指令中的偏移值,就可以访问位于数据段中的指定字节单元。
(DS)+(BX)=数据段中数据的地址
(DS)+(DI)=数据段中数据的地址
(DS)+(SI)=数据段中数据的地址
(DS)+(16位 立即数)=数据段中数据的地址
SS寄存器 允许在寄存器中实现堆栈。加上堆栈指针(SP)寄存器中的偏移值,就指明了正被寻址的堆栈中的当前字。
(SS)+(SP)=堆栈中的当前字的地址
(SS)+(BP)=堆栈中的数据的地址
ES寄存器 程序中其他段得起始地址。
用于某些串操作中和DI寄存器相关联
(ES)+(DI)=串地址的结尾