一、8086、8088的存储器结构
实模式下的存储器组织
实模式:全称为实地址存储管理操作模式,程序与数据运行的实际存储空间,无存储保护。 实模式存储管理方式:分段方式
1、存储单元的地址
定义:将存储单元编号,这个编号就是存储器地址
表示:用十六进制数来表达地址
在存储器中,每一个字节单元都有一个与之对应的。唯一的存储器地址,称为物理地址 。
对于16位字节长的PC机(8086),由两个字节组成一个字。其编号如图:
2、存储单元的内容
定义:存储单元中存放的信息称为该存储单元的内容
表示:存储地址加“()”
字单元由两个字节单元组成,其地址采用它的低地址来表示。
字存入存储器:低字节存入低地址单元,高字节存入高地址单元 。
3、存储器地址的分段
8086/8088CPU有20根地址总线,可以访问存储器的最大容量为B=1024KB=1MB。所以分段是把1MB的存储空间划分成若干的段,每个段是一个可独立寻址的逻辑单位
(1)分段的基本规则:
- 每个段最大可达64KB
- PC机对段的起始地址有限制,段不能起始于任意地址,而必须从任何一小段的首地址开始。
- 在十六进制表示的地址中,最低位为0(即20位地址的低4位为0)
(2)短地址和偏移地址:
- 段地址:表示一个段的开始
- 偏移地址:在段内相对于段起始地址的偏移值。
- 每个存储单元都有两种表现形式:物理地址和 逻辑地址(段地址+偏移地址)
(3)物理地址的形成:
- 公式:物理地址=段地址
10H+偏移地址
- 表示范围:00000H~FFFFFH
- 每个存储单元只有唯一的物理地址,但它却可以由不同的段地址和不同的偏移地址组成
(4)段地址与段寄存器
- 代码段的段地址放CS
- 数据段的段地址放DS
- 堆栈段的段地址放SS
- 附加段的段地址放ES
- 每个段可以独立地占用64KB存储区。各段也允许部分或完全重叠
(5)隐含段和偏移寄存器
段寄存器和偏移寄存器组合有一定的规则
二、总线操作及时序
总线操作是指CPU通过总线对外的各种操作
8086的总线操作主要有:
- 存储器读、I/O读操作
- 存储器写、I/O写操作
- 中断响应操作
- 总线请求及响应操作
- CPU正在进行内部操作、并不进行实际对外操作的空闲状态Ti
1、操作控制器与时序产生器
操作控制器:是在各寄存器之间建立数据通路(传送信息的通路)
功能:根据操作码和时序信号,产生各种操作控制信号,正确建立通路,完成取指和执行的控制。(硬布线控制器、微程序控制器)
时序产生器:产生并发出计算器所需要的时序控制信号
2、指令的执行过程和指令周期
读取指令---分析指令--按指令规定执行指令--检查有无中断请求
- 指令周期:CPU从内存取出一条指令并执行完这条指令的时间总和(取指+执行时间)
- CPU周期:又称机器周期(总线周期),CPU从内存中读取一条指令字的所需最短时间
- 时钟周期:称节拍脉冲或T周期。一个CPU周期包含若干个时钟周期
3、时序信号的作业和体制
计算机的协调动作需要时间标志,而且需要多级时序体制。而时间标志则用时序信号来体现
硬布线控制器中,时序信号往往采用主状态周期-节拍电位-节拍脉冲三级体制。
- 主状态周期(指令周期):包含若干个节拍周期,可以用一个触发器的状态持续时间来表示
- 节拍电位(机器周期):表示一个CPU周期的时间,包含若干个节拍脉冲
- 节拍脉冲(时钟周期):表示较小的时间单位
微程序控制器中,时序信号一般采用节拍电位-节拍脉冲二级体制
数据准备好后,以电位的方式送触发器
控制信号来到后,用一个脉冲信号把数据装入触发器
4、控制方式
控制不同操作序列时序信号的方法
- 同步控制方式:已定的指令在执行时所需要的CPU周期(机器周期)数和时钟周期数都是固定不变。
- 异步控制方式:控制器发出某一操作控制信号后,等待执行部件完成操作后发“回答”信号,再开始新的操作
- 联合控制方式:同步控制和异步控制相结合的方式
三、指令系统与汇编语言程序设计(重要)
1、 什么是汇编语言:
汇编语言是一种面向机器的低级程序设计语言
汇编语言以助记符形式表示每一条计算机指令
- 用助记符表示的指令就是汇编语言中的汇编格式指令
- 汇编格式指令以及使用它们编写程序的规则就形成汇编语言
- 用汇编语言书写的程序就是汇编语言程序或称汇编语言源程序(.ASM)
- 汇编程序将汇编语言程序“汇编”成机器代码目标模块(.OBJ)
特点:
- 汇编语言程序与处理器指令系统密切相关
- 程序员可直接、有效的控制系统硬件
- 形成的可执行文件运行速度快、占用主内存容量少
2、程序、指令、指令系统、指令格式(理解)
- 计算机的程序是由一系列的指令组成
- 指令:是要计算机执行某种操作的命令
- 指令系统:是一台计算机中所有指令的集合
- 决定计算机的基本功能,软件与硬件的界面
- 是计算机系统设计的一个核心问题
- 指令格式是用二进制代码表示的指令形式
- 由操作码字段和地址码字段组成
- 操作码:表示指令进行什么性质的操作
- 地址码:指示参与操作的操作数地址
3、指令操作码与地址码
-
指令:两个字段:操作码字段+操作数地址字段
操作码:指明指令操作性质的命令码。提供指令的操作控制信息。每条指令都要求它的操作码是唯一的
操作数地址码:用来描述该指令的操作对象
一、指令格式
1、零地址指令格式
2、一地址指令格式
3、二地址指令格式
4、三指令地址格式*
4、对操作数的寻址方式(掌握)
与数据有关的寻址方式:
- 操作数或指令存放在的存储单元的编号,就是该操作数或指令的地址
- 寻址方式:形成指令或操作数的内存地址的方式,或者说查找指令或数据的方式
指令的顺序/跳跃寻址方式 :
常用的数据寻址方式 :
- 隐含寻址:指令中不明显地给出操作数的地址
- 立即寻址:指令的地址字段指出的不是操作数的地址,而直接是操作数本身。
- 直接寻址:指令格式的地址字段中,直接给出操作数的内存的地址
- 寄存器寻址:指令中给出的操作数地址不是内存的地址单元号,而是通用寄存器的编号。即操作数不放在内存中,而是放在通用寄存器中
- 寄存器间接寻址:指令中指定的寄存器中的内容不是操作数,而是操作数的地址
- 基址(寄存器相对)寻址:基址寄存器的内容加上指令中给定的形式地址(偏移量),形成操作数的有效地址
1、立即数寻址方式:
- 此方式中指令操作部分直接给出指令的操作数,它与指令操作码相接,顺序存放在代码中。立即数有8位和16位之分。
- 例:
MOV AH,36H ; AH<--立即数36H
MOV BX,1234H; BX<--立即数1234H- 注意:
- 只能用于源操作数,主要用于给寄存器(存储器单元)赋值。立即数无法作为目标操作数
- 立即数可以是无符号或带符号数,其数值应在可取值范围内
2、寄存器寻址方式
- 此方式的操作数放在寄存器内,由指令直接给出某个寄存器的名字,以寄存器的内容作为操作数。寄存器可以是16位的AX、BX、CX、DX、SI、DI、SP、BP寄存器,也可以是8位的AH、AL、BH、BL、CH、CL、DH、DL寄存器
- 例:
MOV AX, CX : AX <-- (CX)
DEC AL ;AL <--(AL) -1- 注意:
- 寄存器寻址方式的指令操作在CPU内部执行,不需要执行总线周期,执行速度快
- 寄存器寻址方式既适用于指令的源操作数,也适用于目的操作数,并且可同时用于源操作数和目的操作数
3、直接寻址方式
- 此方式的操作数在存储器中,指令中直接给出操作数所在存储单元的有效地址。有效地址(EA)也称偏移地址,它代表操作数所在存储单元距离段首地址的字节数。有效地址是一个无符号数的16位二进制数
- 例:
MOV AH,[2100H]; 将DS段中2100H单元的内容送给AH
MOV AX,[2100H]; 将DS段中2100H单元的内容送给AL、2101H单元的内容给AH- 注意:
- 直接寻址方式的操作数所在存储单元的段地址一般在数据段寄存器DS中
- 如果操作数在其他段,则需要指令中用段超越前缀指出相应的段寄存器名
- 例:
MOV AH,ES:[2000H];将附加段寄存器ES的内容乘16D(或10H),再加上2000H作为操作数所在存储单元的地址,取出该存储单元的内容送到寄存器AH中
4、 寄存器间接寻址方式
- 此方式的操作数在存储器中,指令中寄存器的内容作为操作数所在存储单元的有效地址(偏移地址)。寄存器可以是某个基址寄存器BX、BP,或某个变址寄存器SI、DI
- 当使用寄存器BX、SI、DI时,操作数所在存储单元的段地址放在数据段寄存器DS中
- 当使用寄存器BP时,操作数所在存储单元的段地址放在堆栈段寄存器SS中
- 例:
已知:(DS)=2100H,(DI)=2000H
指令: MOV AX,[DI]
物理地址=16(DS)+(DI)
162100H
2000H=23000H
指令执行结果是将23000H和23001H单元的内容送入寄存器AX中。- 注意:
- 如果操作数所在存储单元不在数据段中,需要在指令中使用超越前缀表明其所在段名
5、寄存器相对寻址方式
- 此方式的操作数在存储器内,指令中寄存器的内容与指令指定的位移量之和作为操作数所在存储单元的有效地址(偏移地址)。寄存器可以是基址寄存器BX、BP,也可以是变址寄存器SI、DI。位移量是一个8位或者16位的有符号二进制数。
- 计算操作数所在单元的物理地址与上相同。
- 以寄存器SI、8位位移量为例,物理地址=16
(DS)+(SI)+8位位移量
- 以寄存器BP、16位位移量为例,物理地址=16
(SS)+(BP)+16位位移量
- 例:
已知:(DS)=2000H,(SI)=1000H,DA1=2000H(16位位移量)
指令:MOV BX,DA1[SI] 或 MOV BX,[DA1+SI]
物理地址=16(DS)+(SI)+16位位移量=20000H+1000H+2000H=23000H
指令执行结果是将23000H和23001H单元的内容送入寄存器BX中
6、基址变址寻址方式:
- 此方式中的操作数在存储器内,指令将基址寄存器(BX/BP)与变址寄存器(SI/DI)内容之和作为操作数所在存储单元的有效地址EA。EA的计算方法为:
- EA=(BX)或(BP)+(SI)或(DI)
- 当使用基址寄存器BX时,段寄存器为DS,物理地址=16
(DS)+(BX)+(SI)
- 例:
已知:(DS)3200H,(BX)=1234H,(SI)=3456H
执行指令:MOV AL,[BX][SI] 或 MOV AL,[BX+SI]
有效地址EA=(BX)+(SI)=1234H+3456H=468AH
物理地址=16(DS)+EA = 32000H+468AH=3668AH
指令执行结果是将3668AH单元的内容给寄存器AL中
7、相对基址变址寻址方式
- 此方式的操作数在存储器内。指令将基址寄存器(BX/BP)与变址寄存器(SI/DI)的内容之和再加上位移量(8位/16位),得到操作数所在存储单元的有效地址。
- 当使用基址寄存器BX时,段寄存器为DS。
- 物理地址=16
(DS)+(BX)+(SI)+8位位移量/16位位移量
- 例:
已知:(DS)=2000H,(BX)=1000H,(SI)=0500H,MK=1120H
指令: MOV AX,MK[BX][SI] 或 MOV AX,MK[BX+SI] 或 MOV AX,[MK+BX+SI]
有效地址=(BX)+(SI)=1000H+0500H=1500H
物理地址=20000H+1000H+0500H+1120H=22620H
指令执行结果是将22620H、22621H单元的内容给寄存器AX中。
8、隐含寻址
- 指令隐含了的一个或两个操作数的地址,即操作数在默认的地址中
- 例:MUL BL
指令的执行:(AL)(BL)---> AX