第二章 80x86计算机组织(modify)
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
③、数据段(Data Segment) : 数据段存放运行程序所用的数据
数据段寄存器DS存放数据段的段地址 各种主存寻址方式(有效地址EA)得到存储器中操作数的偏移 地址 处理器利用DS:EA存取数据段中的数据
④、附加段(Extra Segment) : 附加段是附加的数据段,也用于数据的保存:
------------------ --------------------- ---------------------------------------------
HLT
停机
指令执行过程见下页图
指令执行过程(取指/译码/执行)
输出指 置初值 令地址
①
②
时序控制信号(控制命令)
③ +1
输出
时序逻辑电路
;数据段超越,使用数据段的数据
;附加段超越,使用附加段的数据
段超越的示例
• 没有段超越的指令实例:
MOV AX,[2000H] ;AX←DS:[2000H] ;从默认的DS数据段取出数据
• 采用段超越前缀的指令实例:
MOV AX,ES:[2000H] ;AX←ES:[2000H] ;从指定的ES附加段取出数据
– – – – CS(代码段)指明代码段的起始地址 SS(堆栈段)指明堆栈段的起始地址 DS(数据段)指明数据段的起始地址 ES(附加段)指明附加段的起始地址
• 每个段寄存器用来确定一个逻辑段的起始地 址,每种逻辑段均有各自的用途
①、代码段(Code Segment): 代码段用来存放程序的指令序列
• 若运算结果为0,则ZF = 1; 否则ZF = 0 注意:ZF为1表示的结果是0 3AH + 7CH=B6H,结果不是零:ZF = 0
84H + 7CH=(1)00H,结果是零:ZF = 1
符号标志SF(Sign Flag)
• 运算结果最高位为1,则SF = 1; 否则SF = 0
有符号数据用最高有效位表示数据的符号 所以,最高有效位就是符号标志的状态
(3).控制寄存器
指令指针寄存器IP :是一个16位的寄存器,存放EU要执行的 下一条指令的偏移地址,用以控制程序中指令的执行顺序,实 现对代码段指令的跟踪 。 标志寄存器F :是一个16位的寄存器,共9个标志,其中6个用 作状态标志,3个用作控制标志。 A、状态标志:状态标志用来反映EU执行算术和逻辑运算 以后的结果特征。 CF:进位标志 ;PF:奇偶标志 ;AF:辅助进位标志 ZF:零标志 ;SF:符号标志 ;OF:溢出标志 B、控制标志 :控制标志是用来控制CPU的工作方式或工 作状态 。 TF:陷阱标志或单步操作标志 :IF:中断允许标志 DF:方向标志
AX:称为累加器,是算术运算时使用的主要寄存器,所有外部设备
的输入输出指令只能使用AL或AX作为数据寄存器。 BX:称为基址寄存器,它可以用作数据寄存器,在访问存储器时, 可以存放被读写的存储单元的地址,是具有双重功能的寄存器。
CX:称为计数寄存器,它可以用作数据寄存器,在字符串操作、 循环操作和移位操作时用作计数器。 DX:称为数据寄存器,它可以用作数据寄存器,在乘、除法中 作为辅助累加器,在输入输出操作中存放接口的地址。
附加段寄存器ES存放附加段的段地址 各种主存寻址方式(有效地址EA)得到存储器中操作数的偏移 地址 处理器利用ES:EA存取附加段中的数据 串操作指令将附加段作为其目的操作数的存放区域
⑤、如何分配各个逻辑段?
程序的指令序列必须安排在代码段 程序使用的堆栈一定在堆栈段 程序中的数据默认是安排在数据段,也经常安排在附加段,尤其
溢出和进位有什么区别?
处理器怎么处理,程序员如何运用?
如何判断是否溢出?
溢出和进位的对比
例1:3AH + 7CH=B6H
无符号数运算: 有符号数运算: 58+124=182 范围内,无进位 58+124=182 范围外,有溢出 CF=0 OF=1
例2:AAH + 7CH=(1)26H
无符号数运算:
3AH + 7CH=B6H,最高位D7=1:SF = 1
84H + 7CH=(1)00H,最高位D7=0:SF = 0
奇偶标志PF(Parity Flag)
• 当运算结果最低字节中“1”的个数为零 或偶数时,PF = 1;否则PF = 0
PF标志仅反映最低8位中“1”的个数是 偶或奇,即使是进行16位字操作 3AH + 7CH=B6H=10110110B
有符号数运算:
170+124=294 范围外,有进位 -86+124=28 范围内,无溢出
CF=1 OF=0
辅助进位标志AF(Auxiliary Carry Flag)
运算时D3位(低半字节)有进位或
借位时,AF = 1;否则AF = 0。
这个标志主要由处理器内部使用, 用于十进制算术运算调整指令中,用 户一般不必关心
标志寄存器 ( FLAGS / PSW )
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
OF DF IF TF SF ZF
AF
PF
CF
条件码标志:
OF SF ZF CF AF PF 溢出标志 符号标志 零标志 进位标志 辅助进位标志 奇偶标志
控制标志:
DF IF TF 方向标志 中断标志 陷阱标志 AX, BX
取指令 指令译码
取操作数
执行指令
指令周期
存结果
1。CPU如何知道从哪里取出程序的第一条指令?——操作系统 2。CPU如何按程序控制流执行指令?——程序计数器
3。CPU如何知道从哪里取操作数?——地址、寻址方式
例:计算5+8
汇编语言程序 MOV AL, 5 ADD AL, 8 对应的机器指令 对应的操作 10110000 00000101 00000100 00001000 11110100 将立即数1传送到累加寄存器AL中 计算两个数的和,结果存放到AL中
是串操作的目的区必须是附加段 数据的存放比较灵活,实际上可以存放在任何一种逻辑段中
⑥、段超越前缀指令 • 没有指明时,一般的数据访问在DS段;使用BP 访问主存,则在SS段 • 默认的情况允许改变,需要使用段超越前缀指 令;8086指令系统中有4个: CS: SS: DS: ES:
;代码段超越,使用代码段的数据 ;堆栈段超越,使用堆栈段的数据
代码段寄存器CS存放代码段的段地址 指令指针寄存器IP指示下条指令的偏移地址 处理器利用CS:IP取得下一条要执行的指令
②、堆栈段(Stack Segment): 堆栈段确定堆栈所在的主存区域
堆栈段寄存器SS存放堆栈段的段地址 堆栈指针寄存器SP指示堆栈栈顶的偏移地址 处理器利用SS:SP操作堆栈顶的数据
(2) 4个专用寄存器,即BP、SP、SI、DI;
主要用来存放操作数的偏移地址(即操作数的段内地址)。 SP:称为堆栈指针寄存器,在堆栈操作中存放栈顶的偏移地址。 BP:称为基址指针寄存器,常用作堆栈区的基地址寄存器。 SI:称为源变址寄存器,主要用于存放地址,在字符串操作中存放
源操作数的偏移地址。变址寄存器内存放的地址在数据传送完成后, 具有自动修改的功能。例如,传送1字节数据后把地址加1,为下次 传送做好准备,变址寄存器因此得名。 DI:称为目的变址寄存器,主要用于存放地址,在字符串操作中存 放目的操作数的偏移地址。
第二章 80x86计算机组织
计算机系统
存储器
中央处理机
外部设备
一、 计算机系统
地址总线 AB 输 入 设 备 输 出 设 备 数据总线 DB 控制总线 CB
CPU
存 储 器
I/O 接 口
I/O 接 口
程序的执行过程
程序
指令1 指令2 指令3 指令4 …… 指令n 操作码 操作数
执行
MPU 等待取指1 执行1 等待取指2 执行2
等待取指3 执行3
总线
忙
闲
忙
闲
忙
闲
传统微处理器的指令执行过程
BIU
EU 总线 忙 取指1 取指2 取指3 取指4 取指5 取指6 执行6
执行1 忙
执行2 忙
执行3 忙
执行4 忙
执行5 忙
8086CPU的指令执行过程
3. 总线接口部件的组成:
总线接口部件负责与存储器、I/O端口传送数据 ,由下列4部分 组成: (1) 4个段地址寄存器(CS、DS、ES、SS) 8086/8088 CPU 总线接口部件 BIU 中设置有 4 个 16 位段寄存器, 它们是代码段寄存器CS,数据段寄存器DS,附加段寄存器ES和 堆栈段寄存器SS。
2.总线接口部件BIU
总线接口部件BIU内部设有四个16位段地址寄存器:代 码段寄存器CS、数据段寄存器DS、堆栈段寄存器SS和附加 段寄存器ES,一个16位指令指针寄存器IP,一个6字节指令 队列缓冲器,20位地址加法器和总线控制电路。 主要功能:根据执行部件EU的请求,负责完成CPU与 存储器或I/O设备之间的数据传送。
结果中有5个1,是奇数:PF = 0
溢出标志OF(Overflow Flag)
• 若算术运算的结果有溢出, 则OF=1;否则 OF=0
3AH + 7CH=B6H,产生溢出:OF = 1 AAH + 7CH=(1)26H,没有溢出:OF = 0
溢出标志OF(Overflow Flag)
问题
什么是溢出?
1011 0000 锁存数据
MOV A, 5 ADD A, 8 HLT
⑥
⑤ 读写命令
读写控制电路
1.执行部件EU
执行部件中包含一个16位的算术逻辑单元(ALU),8 个16位的通用寄存器,一个16位的状态标志寄存器,一个数 据暂存寄存器和执行部件的控制电路。 功能:从BIU的指令队列中取出指令代码,经指令译码 器译码后执行指令所规定的全部功能。执行指令所得结果或 执行指令所需的数据,都由 EU 向 BIU 发出命令,对存储器 或I/O接口进行读/写操作。
3AH + 7CH=B6H,D3有进位:AF = 1
方向标志DF(Direction Flag)
• 用于串操作指令中,控制地址的变化方 向:
设置DF=0,存储器地址自动增加; 设置DF=1,存储器地址自动减少。
CLD指令复位方向标志:DF=0
STD指令置位方向标志:DF=1
中断允许标志IF(Interruptenable Flag)
例:ADD
JO / JC ERROR ?
进位标志CF(Carry Flag)
• 当运算结果的最高有效位有进位(加法)或借 位(减法)时,进位标志置1,即CF = 1;否则 CF = 0。
3AH + 7CH=B6H,没有进位:CF = 0
AAH + 7CH=(1)26H,有进位:CF = 1
零标志ZF(Zero Flag)
加法器 累加器A
锁存
指令译码器ID 指令寄存器IR
指令译码 ⑧ 锁存指令 ⑦
程序计数器PC
线 地址 存储器
地址寄存器AR
地址总线
地 址 译 码 器
0
1 2 3 4
1011 0000 0000 0101 0000 0100 0000 1000 1111 0100
数据寄存器DR
4. 执行部件的组成:
执行部件负责指令的执行 ,由下列几部分组成: 8086/8088 CPU指令执行部件 EU中有 8个16位通用寄存器,它们可 分成两组。 (1) 4个通用寄存器,即AX、BX、CX、DX: 它们可用来存放16位的数据或地址。也可把它们当作8个8位寄存 器来使用,也就是把每个通用寄存器的高半部份和低半部份分开: 低半部份被命名为AL、BL、CL和DL;高半部份被命名为AH、 BH、CH和DH。8位寄存器只能存放数据而不能存放地址。
段寄存器的使用规定
访问存储器的方式 取指令 默认 CS 可超越 无 偏移地址 IP
堆栈操作
一般数据访问
SS
DS
无
CS ES SS
SP
有效地址EA
BP基址的寻址方式
串操作的源操作数
SS
DS
CS ES DS
CS ES SS
有效地址EA
SI
串操作的目的操作数
ES
无
DI
(2)16位的指令指针寄存器:IP(Instruction Pointer) 8086/8088 CPU中有一个16位指令指针寄存器IP,用 来存放将要执行的下一条指令在代码段中的偏移地址。 在程序运行过程中,BIU自动修改IP中的内容,使它始 终指向将要执行的下一条指令。 注意:程序不能直接访问IP,但是可通过某些指令修改 IP的内容。例如, 执行转移指令时,会将转移的目标地 址送入IP中,以实现程序的转移。 (3) 20位的地址加法器 (4) 6字节的指令队列缓冲器