第4章 指令系统.docx
- 文档编号:28827070
- 上传时间:2023-07-20
- 格式:DOCX
- 页数:21
- 大小:25.33KB
第4章 指令系统.docx
《第4章 指令系统.docx》由会员分享,可在线阅读,更多相关《第4章 指令系统.docx(21页珍藏版)》请在冰豆网上搜索。
第4章指令系统
第4章指令系统
本章主要介绍计算机指令系统的基本概念、指令格式及寻址方式,讨论指令系统的设计理论。
在这基础上介绍指令的分类及指令系统举例,其中重点介绍8086体系结构的寻址方式及其8086指令系统。
一、指令系统的基本概念
1、指令系统及计算机语言
计算机程序是由一条条机器指令组成的。
机器指令是计算机唯一能够识别的语言。
一条机器指令所提供的信息主要包括:
告诉机器应该做什么操作,从何处取操作数,把数据运算的结果送往何处以及从何处取出下一条将要执行的指令等内容。
一台计算机中实现各种功能的机器指令的集合称为该机器的指令系统。
计算机语言从早期的由二进制0、1表示的机器语言,发展出了用助记符表示的低级语言(汇编语言),进而发展出方便人类记忆、编程的高级语言(C语言)。
高级语言编写的程序,便于人们书写和识别,但是计算机硬件不能直接识别,需要由相应高级语言的编译程序把它翻译成相应的机器语言。
汇编语言编写的程序,需要由相应汇编语言的汇编程序把它翻译成机器语言。
2、计算机中指令的存储及执行
在计算机内部存储及处理的信息分为数据信息和控制信息两大类。
数据信息是计算机处理的对象。
控制信息主要是由构成程序的机器指令组成。
在计算机中,指令是以二进制代码的形式表示的。
通过把利用机器的指令系统中的各种指令所编写的、控制机器运行的程序存放在存储器中的方式,使计算机能够连续不断地执行相应程序,这就是存储程序概念。
计算机中程序执行的一般过程:
计算机在开机启动后,到主存中找到需要执行的程序中的第一条机器指令,把其从主存读取到指令寄存器中;通过对所需要执行的相应机器指令进行译码,控制机器硬件电路进行不同的动作,完成不同的功能。
机器在执行完一条指令后,根据程序的需求,再取出下一条应该执行的指令继续执行。
以此方式,循环往复,直到一段程序执行完,则完成了相应的一个任务。
二、指令格式
1、指令格式及指令字长度
指令格式一般由操作码字段和地址码字段两部分组成。
操作码字段表示指令的功能及操作特征,地址码字段通常指定参与操作的操作数地址或直接给出操作数。
指令字长度是指一条指令中包含的二进制代码的位数。
机器字长是指CPU能同时并行处理的用二进制表示的数据位数,计算机的运算精度由机器字长所决定。
通常把指令字长度小于或等于机器字长的指令称作短指令,把指令字长度大于机器字长的指令称作长指令。
短指令的设计可以节省指令的存储空间,减少读取指令所需的访存次数,提高执行每条指令的速度。
长指令设计可以使一条指令包含较强的功能,便于进行程序设计,访问长指令会降低程序的执行速度。
2、操作码结构的设计
操作码的位数决定着指令系统中完成不同操作指令的数量。
(4位操作码可以设计有16条不同操作的指令。
)
3、地址码结构的设计
①四地址指令
OP
A1
A2
A3
A4
OP为操作码,表示加、减、乘、除、传送、移位等操作性质;
A1为第一操作数地址,也可称作源操作数地址;
A2为第二操作数地址,也可称作源操作数地址;
A3为存放结果的地址;
A4为下一条将要执行指令的地址。
②三地址指令
OP
A1
A2
A3
后续指令的地址不出现在指令中,而是由程序计数器PC(IP)指出。
③二地址指令
OP
A1
A2
(A1)OP(A2)A1
它表示把A1中的操作数与A2中的操作数按照OP操作性质进行相应的操作,把运算结果送入地址A1中。
A1为目的地址,A2为源地址。
④一地址指令
OP
A1
单操作数指令:
OP(A1)A1它表示把A1中的操作数按照OP操作性质进行相应的操作,把运算结果仍送入地址A1中。
双操作数指令:
(REG)OP(A1)REG它表示把REG中的操作数与A1中的操作数按照OP操作性质进行相应的操作,把运算结果送入地址REG中。
⑤零地址指令
OP
没有地址码,只有操作码
(1)指令不需要操作数,只发出一定的命令指挥机器完成相应的操作。
(停机指令、空指令)
(2)指令所需要的操作数是隐含指定的。
(入栈及出栈指令)
结论:
在设计指令系统时,应考虑尽可能地缩短指令长度,这样才可能减少程序占用的空间,同时也相应减少访存的次数,提高程序的总体运行速度。
通常可以采用下述几种方法来缩短指令长度:
(1)把运算结果放在目的操作数地址中。
这样可以缩减一个地址长度。
(2)用CPU中的寄存器隐含存放一个操作数。
(3)不用完整、较长的主存地址,把主存较长地址码的全部或部分存放在寄存器中,在地址码字段只给出较短的寄存器地址编码。
这样可以极大地缩短地址码的长度。
4、指令助记符与机器指令代码
对机器指令中用二进制编码表示的操作码和地址码采用相应的若干个英文字母表示,通常称为指令助记符。
三、寻址方式
寻找所要处理的指令或操作数地址的各种方式。
1、指令寻址方式
①顺序寻址方式
②跳转寻址方式
PC不仅需要有自动加1的功能,还应具有接收转移地址的功能。
2、操作数寻址方式
1隐含寻址
指令中的操作数或操作数地址隐含存放在特定的寄存器或主存单元中,不在指令的地址码字段给出,而是按指令设计时的约定存放。
2立即寻址
指令的地址码字段给出的不是操作数地址,而是操作数本身。
3寄存器寻址
指令中所要处理的操作数存放在寄存器中。
4直接寻址
寻找存储器操作数地址的一种基本方法。
指令中的地址码字段直接给出了操作数所在主存单元的有效地址EA。
5间接寻址
指令的地址码字段给出的地址不是存放操作数的有效地址,而是存放操作数有效地址的主存单元地址(操作数地址的地址)。
6寄存器间接寻址
指令的地址码部分给出寄存器编号,在给定的寄存器中存放操作数所在主存单元的地址,按此地址去访问操作数。
7变址寻址
8基址寻址
基址寻址方式的设置主要是面向系统,解决多道程序在主存中的定位以及扩大寻址空间等问题。
变址寻址方式的设置主要是面向用户,使用户可以方便地对字符串、数组及向量等成批数据进行访问,解决程序的循环控制等问题。
9相对寻址
10堆栈寻址
3、8086寻址方式示例
在8086指令系统中,寻址方式主要有与数据相关的寻址方式、与转移地址相关的寻址方式以及与I/O端口相关的寻址方式三类。
⑴8086中央处理器(CPU)及主存储器
8086CPU是16位的处理器,数据通路宽度为16位,支持1MB主存空间的访问,并提供64K个外设端口地址。
①8086的CPU结构
总线接口部件BIU:
完成CPU对主存或外设之间的信息访问工作。
执行部件EU:
负责对BIU指令队列中应该执行的指令进行译码,控制执行该指令。
②8086的寄存器结构
14个16位寄存器
通用寄存器(8个)
AX累加器BX基址寄存器CX计数器DX数据寄存器
SP堆栈指针寄存器
BP基址指针寄存器
SI源变址寄存器DI目的变址寄存器
段寄存器(4个)
CS代码段DS数据段ES附加段SS堆栈段
指令指针寄存器IP(指向下一条即将执行的指令首地址的偏移地址)
CS:
IP20位主存物理地址
标志寄存器(FR)FR的内容称程序状态字(PSW)
9个标志位(6个状态标志3个控制标志)
CF、PF、AF、ZF、SF、OF记录程序运行时的状态信息,由CPU根据指令执行的结果自动设置。
TF:
陷阱标志单步标志或跟踪标志,用于程序的调试
IF:
中断标志
DF:
方向标志
③8086的主存储器结构
主存每个单元的物理地址是唯一的,但其逻辑地址可以不同。
逻辑地址的表示段基值:
偏移量
(2)与数据相关的寻址方式
以汇编语言的数据传送指令为例介绍各种与数据相关的寻址方式
MOVDST,SRC
DST表示目的操作数地址SRC表示源操作数地址
①立即寻址
MOVAX,1326H
MOVAL,12H
②寄存器寻址
MOVAL,BH
MOVAX,BX
③直接寻址
MOVAX,VAR用符号地址表示
MOVAX,DS:
[1200H]
④寄存器间接寻址
MOVAX,[BX]
MOVAX,SS:
[BP]
⑤变址寻址
MOVAX,VAR[SI]
MOVAX,1200H[SI]
例:
一维数组ARRAY1顺序存放在主存的数据段中,假设ARRAY1数组的首地址位于数据段偏移2300H处,(DS)=2000H,数组的每个元素占两个字节。
使用指令:
MOVAX,ARRAY1[BX]可以把ARRAY1数组中的元素取出传送到通用寄存器AX中。
⑥基址变址寻址
MOVAX,VAR[BX][SI]
MOV[BP][DI],AX
例:
具有10行、10列的二维数组ARRAY2按照第一行(0~9个元素)、第二行(0~9个元素)…的顺序连续存放在主存的数据段中,假设ARRAY2数组的首地址位于数据段偏移3400H处,(DS)=2000H,数组的每个元素占两个字节。
如果需要把数组的第1行第6个元素ARRAY2(1,6)传送到通用寄存器AX中时,则可以把BX设置成20(14H)(1×20),把SI设置成12(0CH)(6×2),使用下述指令即可完成所需数据的传送:
MOVAX,ARRAY2[BX][SI]ARRAY2(1,6)传送到AX中
⑦与串操作相关的寻址方式
源串DS:
[SI]允许存放在其他段
目的串ES:
[DI]只能存放在附加段
(3)与转移地址相关的寻址方式
①段内直接寻址
JMPJMPLAB
②段间直接寻址
JMPFARPTRJMPLAB
③段内间接寻址
JMPBX
JMPWORDPTR[BX]
④段间间接寻址
JMPDWORDPTR[BX]
(4)I/O端口寻址方式
①直接I/O端口寻址方式
INAX,26H
②间接I/O端口寻址方式
MOVDX,378H
OUTDX,AL
注:
前256个(0~FFH)端口地址可以直接在指令中给出,其余的端口地址要放到DX中。
四、指令的分类及指令系统
1、指令种类
数据传送类指令
算术运算类指令
逻辑运算类指令
程序控制类指令
串处理类指令
输入/输出类指令
系统控制类指令
2、8086指令系统类型
1、传送类指令
(1)数据传送指令
MOV
PUSH
POP
XCHG
(2)专用累加器传送指令
IN
OUT
XLAT
(3)标志位传送指令
LAHF
SAHF
PUSHF
POPF
(4)地址传送指令
LEA
LDS
LES
2、算术运算类指令
(1)加法运算指令
ADDADCINC
(2)减法运算指令
SUBSBBDECNEGCMP
(3)乘法运算指令
MULIMUL
(4)除法运算指令
DIVIDIV
(5)类型转换指令
CBWCWD
(6)十进制调整指令
DAADASAAAAASAAMAAD
3、逻辑运算类指令
(1)逻辑运算指令
ANDORNOTXOR
(2)测试指令
TEST
(3)移位指令
SHLSHRSALSAR
ROLRORRCLRCR
4、控制转移类指令
(1)无条件转移指令
JMP
(2)条件转移指令
JOJNOJSJNSJZJNZJPJC…
比较两个无符号数
JAJBJAEJBE
比较两个带符号数
JGJL
(3)CX寄存器的值测试转移指令
JCXZ
(4)循环控制指令
LOOPLOOPZLOOPNZ
(5)子程序的调用与返回指令
CALLRET
(6)中断子程序的调用与返回指令
INTINTOIRET
5、串处理指令
(1)串处理指令
MOVS
CMPS
SCAS
LODS
STOS
(2)与串处理指令配合使用的重复前缀指令
REP
REPE
REPNE
6、处理器控制类指令
(1)标志位处理指令
CLC
STC
CMC
CLD
STD
CLI
STI
(2)空操作指令
NOP
(3)处理机控制指令
HLT
WAIT
ESC
LOCK
3、8086指令系统详解
①传送类指令
(1)MOV数据传送指令指令的执行不影响标志位
注:
DST不能为立即数
SRC为立即数时,DST不能是段寄存器(立即数不能直接传送到段寄存器中)
SRC和DST不能同时为主存单元地址,也不能同时为段寄存器
例1:
把立即数2010H送段寄存器DS中。
MOVAX,2010H
MOVDS,AX
例2:
把位于主存数据段字节单元VARBYTE1中的内容送主存字节单元VARBYTE2中。
MOVAL,VARBYTE1
MOVVARBYTE2,AL
例3:
把段寄存器DS中的内容送段寄存器ES中。
MOVAX,DS
MOVES,AX
(2)PUSH进栈指令
SP内容减2
8086的堆栈是在主存中设置的按照后进先出方式进行操作的一段存储空间
例4:
把主存地址从10A20H处开始,长度为60H个字节的主存空间设置为堆栈段。
(SS=10A2HSP=60H)
MOVAX,10A2H
MOVSS,AX
MOVSP,60H
例5:
把通用寄存器AX中的内容入栈。
PUSHAX
例6:
把段寄存器DS中的内容入栈。
PUSHDS
例7:
把数据段中偏移VAR字节处的字内容入栈。
PUSHVAR
(3)POP出栈指令
例8:
把栈顶内容出栈,并存入通用寄存器BX中。
POPBX
例9:
把栈顶内容出栈,并存入主存数据段中偏移VAR字节处的字单元中。
POPVAR
(4)XCHG交换指令
例:
数据段中定义了两个字变量VAR1和VAR2,(VAR1)=1234H,(VAR2)=5678H;将这两个字单元内容互换。
MOVAX,VAR1
XCHGVAR2,AX
MOVVAR1,AX(或:
XCHGVAR1,AX)
(5)IN输入指令
①直接I/O端口寻址方式
INAL,pn
INAX,pn
②间接I/O端口寻址方式
INAL,DX
INAX,DX
要访问的端口地址在0~255(00H~FFH)之间,采用方式一。
例10:
把I/O端口30H的字内容传送到BX中。
INAX,30H
MOVBX,AX
例11:
把I/O端口379H的字节内容传送到主存数据段的VARBYTE字节单元中。
MOVDX,379H
INAL,DX
MOVVARBYTE,AL
(6)OUT输出指令
①直接I/O端口寻址方式
OUTpn,AL
OUTpn,AX
②间接I/O端口寻址方式
OUTDX,AL
OUTDX,AX
例12:
把主存数据段的VARBYTE字节单元中的内容传送到I/O端口230H中。
MOVDX,230H
MOVAL,VARBYTE
OUTDX,AL
(7)XLAT换码指令
完成把一种代码转换为另一种代码的功能。
如:
把数字的ASCII码转换为相应的十进制数。
例13:
把十进制数“3”转换为相应的ASCII码。
MOVBX,0002H
MOVAL,3
XLATTAB1
(8)LAHF取标志到AH指令
(9)SAHF存AH到标志寄存器指令
(10)PUSHF标志寄存器进栈指令
(11)POPF标志出栈送标志寄存器指令
(12)LEA取有效地址到通用寄存器
注:
本条指令是把源操作数所在主存的段内偏移量(而不是源操作数本身)传送到通用寄存器中。
例:
数据段定义了字变量VAR1(假定其偏移量为100H),要求把VAR1所在数据段中的偏移量(字节数),存放到通用寄存器BX中。
LEABX,VAR1
(13)LDS地址指针送DS和寄存器指令
LDSSI,VAR
假定指令执行前(DS)=1A00H,在数据段偏移0012H字节处定义了变量VAR,其低2个字节的内容为0030H,高2个字节的内容为2B00H。
指令执行后(SI)=0030H(DS)=2B00H
(14)LES地址指针送ES和寄存器指令
LESDI,VAR1
假定指令执行前(DS)=2C00H,(ES)=2D00H,在数据段偏移0124H字节处定义了变量VAR1,其低2个字节的内容为0040H,高2个字节的内容为3A00H。
指令执行后(DI)=0040H(DS)=2C00H(ES)=3A00H
②算术运算类指令
(1)ADD加法指令
例:
ADDAL,9BH;假设(AL)=E8H指令执行后,对6个状态标志位进行设置。
PF=0SF=1AF=1ZF=0OF=0CF=1
(2)ADC带进位加法指令
例:
完成两个32位带符号数的相加运算。
源操作数为12345678H,目的操作数高16位存放在CX中,低16位存放在BX中,(CX)=0012H,(BX)=0B034H;运算结果的高16位存放在CX中,低16位存放在BX中。
ADDBX,5678H
ADCCX,1234H
运算结果:
(CX)=1247H,(BX)=06ACH
第1条指令执行后,CF=1,OF=0,ZF=0,PF=1,SF=0,AF=0
第2条指令执行后,CF=0,OF=0,ZF=0,PF=1,SF=0,AF=0
(3)INC加1指令
MOVAL,12H
INCAL
(AL)=13HOF=0,ZF=0,PF=0,SF=0,AF=0.
(4)SUB减法指令
MOVAX,1234H
SUBAX,5678H
(AX)=0BBBCHCF=1,OF=0,ZF=0,PF=0,SF=1,AF=1
(5)SBB带借位减法指令
(6)DEC减1指令
(7)NEG求负数指令
NEG指令把操作数作为带符号数处理。
当操作数为0时,NEG指令执行后,结果仍为0,CF置0;其他情况,CF均置1。
当操作数为字节操作数—128或为字操作数—32768时,NEG指令执行后,结果不变,OF置1,表示溢出;其他情况OF置0.
例:
MOVAX,0001H
NEGAX
指令执行后(AX)=0FFFFH(-1)
CF=1,OF=0,ZF=0,PF=1,SF=1,AF=1.
(8)CMP比较指令
影响CF、PF、AF、ZF、SF、OF6个状态标志位。
该指令主要用于对两个操作数大小的比较。
在本条指令执行后,可以紧跟一条条件转移指令,以实现程序的转移控制。
(9)MUL无符号数乘法指令
(10)IMUL带符号数乘法指令
(11)DIV无符号数除法指令
商:
AL(AX)余数:
AH(DX)
(12)IDIV带符号数除法指令
(13)CBW字节转换为字指令
(14)CWD字转换为双字指令
③逻辑运算类指令
(1)AND逻辑与指令
(2)OR逻辑或指令
(3)NOT逻辑非指令
(4)XOR逻辑异或指令
(5)TEST测试指令
(6)SHL逻辑左移指令
(7)SHR逻辑右移指令
(8)SAL算术左移指令
(9)SAR算术右移指令
(10)ROL循环左移指令
(11)ROR循环右移指令
(12)RCL带进位循环左移指令
(13)RCR带进位循环右移指令
④控制转移类指令
(1)JMP无条件转移指令
段内短转移:
段内直接转移:
段内间接转移:
段间直接转移:
段间间接转移:
(2)条件转移
根据某个状态标志的设置情况进行条件转移的指令:
JOJNO
JSJNS
JZJNZ
JPJNP
JCJNC
对两个无符号数比较:
JAJAE
JBJBE
对两个带符号数比较:
JGJNL
JLJNG
(3)JCXZCX寄存器内容为零转移指令
(4)LOOP循环指令
(5)LOOPZ当结果为0/相等时循环
(6)LOOPNZ
(7)CALL调用子程序指令
(8)RET从子程序返回
⑤串处理指令
源串操作数地址DS:
[SI]
目的操作数地址ES:
[DI]
(1)MOVS串传送指令
(2)CMPS串比较指令
(3)SCAS串扫描指令
(4)LODS从串中取指令
(5)STOS存入串中指令
(6)REP重复指令REPEREPNE
⑥处理器控制类指令
CLCCF=0
STCCF=1
CMCCF取反
CLDSTD
CLISTI
NOP空操作指令
HLT停机指令
WAIT等待指令
ESC换码指令
LOCK总线封锁指令
CISC复杂指令系统计算机
RISC精简指令系统计算机
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第4章 指令系统
![提示](https://static.bdocx.com/images/bang_tan.gif)