340 likes | 589 Views
第四章 典型 CPU 及指令系统举例. 学习内容. 理解 8086/8088CPU 的寄存器结构、主存储器、堆栈结构。 掌握 8086/8088 指令系统的寻址方式。 (本章的重点内容) 理解 8086/8088 指令类型。 了解提高 CPU 性能的一些措施与当前常用的实际 CPU 基本组成。. §4.1 8086/8088CPU. §4.1.1 8086/8088CPU 的结构 1. 8086/8088 内部结构: 8086/8088CPU 采用 指令流水线结构 ,将取指令(或取操作数)与执行指令的功能分别由两个独立部件实现,
E N D
学习内容 • 理解8086/8088CPU的寄存器结构、主存储器、堆栈结构。 • 掌握8086/8088指令系统的寻址方式。(本章的重点内容) • 理解8086/8088指令类型。 • 了解提高CPU性能的一些措施与当前常用的实际CPU基本组成。
§4.1 8086/8088CPU §4.1.1 8086/8088CPU的结构 1. 8086/8088内部结构: • 8086/8088CPU采用指令流水线结构,将取指令(或取操作数)与执行指令的功能分别由两个独立部件实现, • 即总线接口部件BIU与执行部件EU 主要任务是完成CPU与主存储器或I/O之间的信息传送。 主要任务是执行指令
2. 8086/8088主存地址的形成 段基值:在BIU中设置段寄存器,用以存放20位段起始地址的高16位,称为段基值。 偏移量:由EU或指令指针IP提供段内的偏移量,即一个主存单元与所在段的段基址之间的字节距离。
§4.1. 8086/8088寄存器 • 1. 段寄存器: • CS(代码段寄存器)——用来存放程序的指令代码序列,用来存放当前代码段段首址的高16位,即段基值。 • DS(数据段寄存器)——存放程序的有关数据,用来存放当前数据段的段基值。 • SS(堆栈段寄存器)——用来存放按后进先出顺序存取的信息。存放当前堆栈段的段基值。 • ES(附加段寄存器)——存放运算结果或辅助数据,存放当前附加段的段基值。
2 . 通用寄存器 (1)地址指针寄存 (2)数据寄存器 3. 用于控制的寄存器 (1)指令指针IP: (2)标志寄存器FR 作用类似于PC,当现行指令执行完毕,由IP提供下一条指令地址
§4.2 主存储器 • §4.2.1 8086/8088主存储器的特点 • §4.2.2 主存储器的段结构 • §4.2.3 逻辑地址与物理地址 • 逻辑地址:段基值和偏移量 • 物理地址 • 逻辑地址的来源
§4.3 8086/8088堆栈 §4.3.1 堆栈组织 • 8086/8088的堆栈是由SS指定的一段存储区(≤64KB)构成,并采用向上(地址码减小)生成方式,由堆栈指针SP指向栈顶。 • SS提供堆栈段的段基值,SP的内容为栈顶单元相对堆栈段段基址的字节距离(偏移量)。 • 8086/8088堆栈规定以字(2个字节)为单位进行存取。
§4.3.2 堆栈操作 • 先设置堆栈,主要是对堆栈段寄存器SS物堆栈指针SP赋初值。 • 对堆栈的操作均在栈顶进行的,其基本操作的: • 压栈:用压栈指令PUSH可以将通用寄存器、段寄存器或字存储单元内容压入堆栈。 2. 出栈:用弹出指令POP可以将当前栈顶字单元内容取出送到通用寄存器、段寄存器或字存储单元中。
§4.4 8086/8088指令系统 • §4.4.1 8086/8088寻址方式 1 . 寄存器寻址方式:指令所需的操作数存放在CPU的寄存器(通用寄存器或段寄存器)中,通过指令中给出寄存器地址去找到操作数。
操作码 REC Ri 操作数S 是指令代码中的寻址字段,表示操作数的寄存器地址 • 寻址过程: 例:(BX) =1234H MOV AX,BX :将BX中的内 容送到AX中 (AX) =1234H
2. 立即数寻址方式 • 立即数寻址方式:指令所需的操作数直接在指令代码中,随着取指令一起取到BIU的指令队列中。 操作码 操作码 一条指令 AX AX 一条指令 34H F5H 12H (A)MOV AX,1234H (B)MOV AL,0F5H
3. 存储器寻址方式 • 在汇编语言程序中,一个存储单元的地址采用逻辑地址来表示:(形式:段基值:偏移量) • 段基值:是由某个段寄存器提供,由指令隐含给出。 • 偏移量:是指存放操作数的存储单元与段起始(段基址)之间的字节距离,字由CPU的EU按指令中操作数的寻址方式计算而得到,又称为有效地址EA。 • 有效地址EA:由位移量、基地址、变址量三个地址分量的某种组合求得。
(1)直接寻址方式 • 定义:指令所需的操作数存放在存储单元中,操作数的有效地址EA直接由指令代码中的位移量提供。 • 寻址过程: • 在源程序中,直接寻址方式可用数值地址或符号地址来表示。 EA
用数值地址表示: • 在采用直接寻址方式的汇编指令中,用数值表示操作数的有效地址,则操作数所在段的段寄存器必须指明,不能缺省。 MOV BX,DS:[1000H] 完成将当前数据段偏移1000H个字节的字单元内容1234H送入BX中。
用符号地址表示: • 在源程序中,常用符号地址表示存放操作数的存储单元,所以在汇编指令中,可用符号地址表示的直接寻址方式来存取操作数。 • 例题:P130
(2)寄存器间接寻址方式 • 寄存器间接寻址方式:指令所需的操作数在存储单元中,操作数的有效地址EA直接从基址寄存器(BP或BX)或变址寄存器(SI或DI)中获得。 • 见P131的图4-22 寄存器间接寻址方式
(2)寄存器间接寻址方式 是指令代码中的寻址字段 SI OR 寄存器间接寻址方式实际上是将有效地址事先存放在一个寄存器中,如同一个地址指针。因此在程序中只要修改间址寄存器的内容,就可以用一条指令访问不同的存储单元。 DI EA OR BX OR BP 寻址过程
(3)变址寻址和基址寻址方式 • 变址寻址和基址寻址方式:指令所需的操作数在存储单元中,操作数的有效地址EA是基址寄存器(BP或BX)或变址寄存器(SI或DI)的内容与指令中给出的位移量(8位或16或)两个地址分量之和。 • 使用SI或DI称为变址寻址。 • 使用BX或BP称为基址寻址。
变址寻址和基址寻址方式 SI OR DI OR EA + BX OR BP
寻址方式的使用格式: • 变址或基址寻址方式用来访问顺序存放在主存中的一维数组、表格、字符串等。 • 典型用法:是将指令中不能修改的位移量作为基准地址,而变址或基址寄存器内容作为修改量 • 例题4-1:见教材132页。
(4)基址变址寻址方式 SI OR EA + DI BX OR BP 寻址过程
寻址方式的使用格式: • 基址变址寻址方式用来访问存放在主存中的二维数组。(其寻址方式中有两地址分量可在程序执行过程中进行修改) • 例题4-2:见教材133-134页。
4. 串操作寻址方式 • 串操作寻址方式: • 串操作指令规定: • 隐含使用SI作为在数据段中的源串(即源操作数)的地址指针 • 隐含使用DI作为在附加段中的目的串的地址指针。 SI 源串有效地址EA DI 目的串有效地址EA
§4.4.2 8086/8088指令 • 8086/8088指令按操作数地址划分: 双操作数指令:OPR DEST,SRC 单操作数指令:OPR DEST 无操作数指令:OPR
8086/8088指令按功能划分: 传送类指令 算术运算类指令 位操作类指令 串操作类指令 程序转移类指令 处理器控制类指令 具体内容见课件
四、串操作类指令 • “串”是指存储器中一序列字或字节单元,其内容是字符或数据。 • 串操作是对这一序列或字单元的内容进行某种操作。
1 . 取串指令 • 指令格式:LODS源串 • 指令功能: (1)AX/AL (DS:(SI)) (2)SI (SI)±1或2 (3)对标志寄存器无影响 • 2 . 存串指令 • 指令格式:STOS目的串/STOSB/STOSW • 指令功能: (1)ES:(DI) (AX)/(AL) (2)DI (DI)±1或2 (3)对标志寄存器无影响
3 .串比较指令 • 指令格式:MOVS目的串、源串/MOVSB/MOVSW • 指令功能: (1)(ES:(DI)) (DS:(SI)) (2)SI (SI)±1或2,DI (DI)±1或2 (3)对标志寄存器无影响 • 4. 串比较指令 • 指令格式:CMPSI源串,目的串/CMPSB/CMPSW • 指令功能: (1)(DS:(SI)—(ES:(DI)) (2) SI (SI)±1或2, DI (DI)±1或2 (3)影响标志位OF,SF,ZF,AF,PF,CF
5 .串搜索指令 • 指令格式:SCAS目的串/SCASB/SCASW • 指令功能: (1)(AX/AL)—(ES:(DI)) (2)DI (DI)±1或2 (3)影响标志位OF,SF,ZF,AF,PF,CF • 6. 重复前缀指令(3条) • 指令格式:REP • 重复执行串操作指令的条件是:(CX)≠0 • 指令格式:REPE/REPZ • 重复执行串操作指令的条件是:(CX)≠0AND ZF=1 • 指令格式:REPNE/REPNZ • 重复执行串操作指令的条件是:(CX)≠0 AND ZF=1
五、处理器控制指令 • 1. 标志位操作指令 • 2. 与外部事件同步的指令 • 3. 空操作指令
§4.5 提高CPU性能的一些措施 • 了解 • 自学
作业: • 见教材P164,T3----27做在书上 • 作业:做在作业本上 • 1、编写一程序段,将AL的低4位与BL的低4位互换,AL和BL的高4位保持不变。 • 2、编写计算5X-Y+10多项式值的程序段。说明:多项式值存于AX中,X、Y是无符号数,设中间和最后结果不超过16位二进制数。