微型计算机接口技术课件第三章1
第3章 指令系统(1)
主要内容:
指令系统的一般概念
对操作数的寻址方式
六大类指令的操作原理
操作码的含义
指令对操作数的要求
指令执行的结果
3.1 概述
了解:
指令及指令系统
指令的格式
指令中的操作数类型
一、指令与指令系统
指令:
控制计算机完成某种操作的命令
指令系统:
处理器所能识别的所有指令的集合
指令的兼容性:
同一系列机的指令都是兼容的
二、指令格式
指令中应包含的信息:
运算数据的来源
运算结果的去向
执行的操作
指令格式:
操作码 ...
第3章 指令系统(1)
主要
:
指令系统的一般概念
对操作数的寻址方式
六大类指令的操作原理
操作码的含义
指令对操作数的要求
指令执行的结果
3.1 概述
了解:
指令及指令系统
指令的格式
指令中的操作数类型
一、指令与指令系统
指令:
控制计算机完成某种操作的命令
指令系统:
处理器所能识别的所有指令的集合
指令的兼容性:
同一系列机的指令都是兼容的
二、指令格式
指令中应包含的信息:
运算数据的来源
运算结果的去向
执行的操作
指令格式:
操作码 [操作数],[操作数]
执行何种操作
目标操作数
源操作数
参加操作的数据
或数据存放的地址
指令格式:
零操作数指令: 操作码
单操作数指令: 操作码 操作数
双操作数指令: 操作码 操作数,操作数
多操作数指令: 三操作数及以上
三、指令中的操作数
征参加操作的数据本身 立即数
表征数据存放的地址
寄存器
存储器
操作数:
立即数操作数:
表示参加操作的数据本身,可以是8位或16位
例: MOV AX,1234H
MOV BL,22H
立即数无法作为目标操作数
立即数可以是无符号或带符号数,其数值应在可取值范围内
操作数:
寄存器操作数:
表示参加运算的数存放在指令给出的寄存器中,可以是16位或8位。
例:MOV AX,BX
MOV DL,CH
操作数:
存储器操作数:
表示当前参加运算的数存放在存储器的某一个或某两个单元中
例:MOV AX,[1200H]
MOV AL,[1200H]
22H
11H
1200H
偏移地址
AH AL
┇
四、指令字长与机器字长
指令字长由操作码的长度、操作数地址长度、操作数个数决定
8088/8086CPU采用变字长指令格式
机器字长:
计算机能够直接处理的二进制数的位数
五、指令的执行速度
指令的字长影响指令的执行速度
(常用指令的执行时间见表3-1)
对不同的操作数,指令执行的时间不同:
存储器 立即数 寄存器
快!
3.2 寻址方式
寻找操作数所在地址的
寻找转移地址的方法
本节
一、立即寻址
指令中的源操作数是立即数,即源操作数是参加操作的数据本身
例:MOV AX,1234H
12H
34H
AH AL
MOV
代码段
┇
二、直接寻址
指令中直接给出操作数的偏移地址
例:MOV AX,[1200H]
22H
11H
1200H
偏移地址
AH AL
┇
11 22
数据段
直接寻址
直接寻址方式下,操作数的段地址默认为数据段,但允许段重设,即由指令定义段。
例:MOV AX,ES:[1200H]
三、寄存器寻址
参加操作的操作数在CPU的通用寄存器中。
例:MOV AX,BX
AX
BX
四、寄存器间接寻址
参与操作的操作数存放在内存中,其偏移地址为指令中的寄存器的内容。
例:MOV AX,[BX]
设(BX)=1200H
22H
11H
1200H
偏移地址
AH AL
┇
11 22
数据段
代码段
MOV
寄存器间接寻址
由寄存器间接给出操作数的偏移地址
存放偏移地址的寄存器称为间址寄存器,它们是:BX,BP,SI,DI
操作数的段地址(数据处于哪个段)取决于选择哪一个间址寄存器:
BX,SI,DI 默认在数据段
BP 默认在堆栈段
寄存器间接寻址
寄存器
间接寻址
基址寻址(间址寄存器为基址寄存
器BX,BP)
变址寻址(间址寄存器为变址寄存
器SI,DI)
五、寄存器相对寻址
操作数的偏移地址为寄存器的内容加上一个位移量
例:MOV AX,[BX+DATA]
设DS=2000H,BX=0220H,DATA=05H
则:AX=[20225H]
六、基址、变址寻址
操作数的偏移地址为一个基址寄存器的内容加上一个变址寄存器的内容,操作数的段地址由选择的基址寄存器决定
例:MOV AX,[SI+BX]
七、基址、变址、相对寻址
操作数的偏移地址为一个基址寄存器的内容加上一个变址寄存器的内容,再加上一个位移量
操作数的段地址由选择的基址寄存器决定
例:MOV AX,[BP+SI+DATA]
八、隐含寻址
指令隐含了的一个或两个操作数的地址,即操作数在默认的地址中
例: MUL BL
指令的执行:AL×BL AX
3.3 8086指令系统
从功能上包括六大类:
数据传送
算术运算
逻辑运算和移位
串操作
程序控制
处理器控制
一、数据传送
通用数据传送
输入输出
地址传送
标志位操作
1. 通用数据传送
一般数据传送指令
堆栈操作指令
交换指令
查表转换指令
字位扩展指令
特点:
该类指令的执行对标志位不产生影响
一般数据传送指令
一般数据传送指令 MOV
格式:MOV dest,src
操作:src dest
例: MOV AL,BL
一般数据传送指令
注:
两操作数字长必须相同
两操作数不允许同时为存储器操作数
两操作数不允许同时为段寄存器
在源操作数是立即数时,目标操作数不能是段寄存器
IP和CS不作为目标操作数,FLAGS一般也不作为操作数在指令中出现
一般数据传送指令
判断下列指令的正确性:
MOV AL,BX
MOV AX,[SI]05H
MOV [BX][BP],BX
MOV DS,1000H
MOV DX,09H
MOV [1200],[SI]
一般数据传送指令应用例
将(*) 的ASCII码2AH送入内存1000H开始的100个
单元中:
MOV DI,1000H
MOV CX,64H
MOV AL,2AH
AGAIN:MOV [DI],AL
INC DI ;DI+1
DEC CX ;CX-1
JNZ AGAIN ;CX≠0则继续
HLT
上段程序在代码段中的存放形式
設CS=109EH,IP=0100H,则各条指令存放地址
如下:
CS : IP
109E:0100 MOV DI,1000H
109E:0103 MOV CX,64H
109E:0106 MOV AL,2AH
109E:0108 MOV [DI],AL
109E:010A INC DI
109E:010B DEC CX
109E:010C JNZ 0108
109E:010E HLT
数据段中的分布
送上2AH后数据段中相应存储单元的内容改
变如下:
DS:1000 2A 2A 2A 2A 2A 2A 2A 2A-2A 2A 2A 2A 2A 2A 2A 2A
DS:1010 2A 2A 2A 2A 2A 2A 2A 2A-2A 2A 2A 2A 2A 2A 2A 2A
DS:1020 2A 2A 2A 2A 2A 2A 2A 2A-2A 2A 2A 2A 2A 2A 2A 2A
DS:1030 2A 2A 2A 2A 2A 2A 2A 2A-2A 2A 2A 2A 2A 2A 2A 2A
DS:1040 2A 2A 2A 2A 2A 2A 2A 2A-2A 2A 2A 2A 2A 2A 2A 2A
DS:1050 2A 2A 2A 2A 2A 2A 2A 2A-2A 2A 2A 2A 2A 2A 2A 2A
DS:1060 2A 2A 2A 2A 00 00 00 00 00 00 00 00 00 00 00 00
偏移地址[DI]
堆栈操作指令
掌握:
有关堆栈的概念 栈顶、栈首、栈底
堆栈指令的操作原理
执行过程,执行结果
堆栈操作的原则
先进后出
以字为单位
堆栈操作指令
压栈指令 PUSH
格式: PUSH OPRD
出栈指令 POP
格式: POP OPRD
压栈指令 PUSH
指令执行过程:
(SP)←(SP)-2
(SP)-1←操作数高字节
(SP)-2←操作数低字节
压栈指令的操作
设AX=1234H,SP=1200H
执行 PUSH AX 指令后堆栈区的状态:
1200H
┇
堆栈段
SP-2=11FEH
12H
34H
1200H
┇
堆栈段
12H 34H
AX
入栈后
入栈前
出栈指令POP
指令执行过程:
(SP) 操作数低字节
(SP)+1 操作数高字节
(SP)←(SP)+2
出栈指令的操作
执行 POP AX
堆栈区的状态:
12H
34H
11FEH
┇
堆栈段
代码段
PUSH
12 34
AX
SP+2
堆栈操作指令说明
指令的操作数必须是16位的
操作数可以是寄存器或存储器两单元,但不能是立即数
不能从栈顶弹出一个字给CS
PUSH和POP指令在程序中一般成对出现
PUSH指令的操作方向是从高地址向低地址,而POP指令的操作正好相反
堆栈操作指令例
PUSH AX
PUSH BX
PUSH WORD PTR[BX]
POP WORD PTR[BX]
POP AX
POP BX
┇
如此,会使AX和BX的内容互换
交换指令
格式:
XCHG REG,MEM/REG
两操作数必须有一个是寄存器操作数
不允许使用段寄存器。
例: XCHG AX,BX
XCHG [2000],CL
查表指令
格式:
XLAT
说明:用BX的内容代表
首地址,AL内容为表内位移量,BX+AL得到要查找元素的偏移地址
操作:[BX+AL] AL
例:教材第112页
查表指令例
数据段中存放有一
张ASCII码转换表,
设首地址为2000H,
现欲查出表中第11
个代码的ASCII码
(设DS=4000H)
30
31
32
...
39
41
42
...
45
46
...
42000H+0
42000H+11
‘0’
‘1’
‘2’
‘9’
‘A’
‘B’
‘E’
‘F’
查表指令例
可用如下指令实现:
MOV BX,2000H ;(BX)←表首地址
MOV AL,0BH ;(AL)←序号
XALT ; 查表转换
执行后得到:(AL)=42H
字位扩展指令
将符号数的符号位扩展到高位
指令为零操作数指令,采用隐含寻址,隐含的操作数为AX及AX,DX
无符号数的扩展规则为在高位补0
字节到字的扩展指令
格式:
CBW
操作:将AL内容扩展到AX
规则:若最高位=1,则执行后AH=FFH
若最高位=0,则执行后AH=00H
字到双字的扩展指令
格式:
CWD
操作:将AX内容扩展到DX AX
规则:若最高位=1,则执行后DX=FFFFH
若最高位=0,则执行后DX=0000H
字位扩展指令例
MOV AL,44H
CBW ;执行结果
MOV AX,0AFDEH
CWD
MOV AL,86H
CBW
?
2. 输入输出指令
掌握:
指令的格式及操作
指令的两种寻址方式
指令对操作数的要求
输入输出指令
专门面向I/O端口操作的指令
包括
输入指令 IN acc,PORT
输出指令 OUT PORT,acc
端口地址
指令寻址方式
直接寻址
直接给出8位端口地址,可寻址256个端口
间接寻址
16位端口地址由DX指定,可寻址64K个端口
I/O指令例
IN AX,80H
MOV DX,2400H
IN AL,DX
OUT DX,AX
OUT AL,35H
3. 地址传送指令
取偏移地址指令LEA
LDS指令
LES指令
取偏移地址指令LEA
将变量的16位偏移地址取出送目标寄存器
格式:
LEA REG,MEM
指令要求源操作数必须是一个存储器操作数,目标操作数通常是间址寄存器,
LEA指令
比较下列指令:
LEA SI,DATA1
MOV SI,DATA1
MOV BX,[BX]
LEA BX,[BX]
┇
┇
┇
DATA1
符号地址
12H
34H
1100H
88H
77H
BX=1100H
LEA指令在程序中的应用
将数据段中首地址为MEM1 的50个字节的数据传送到同一逻辑段首地址为MEM2的区域存放。编写相应的程序段
LEA指令在程序中的应用
开 始
取源地址
取目标地址
送数据块长度到CL
传送一个字节
修改地址指针
修改计数值
计数值=0?
结 束
N
Y
LEA指令在程序中的应用
LEA SI,MEM1
LEA DI,MEM2
MOV CL,50
NEXT: MOV AL,[SI]
MOV [DI],AL
INC SI
INC DI
DEC CL
JNZ NEXT
HLT
取远地址指针指令
LDS reg,MEM32
LES reg,MEM32
指令中源操作数是存储器某4个连续单元的偏移地址,目标操作数是间址寄存器。
LDS指令例
例:
LDS DI,[1200H]
MOV AX,[DI]
指令执行后:
LDS指令例
DS = 6000H
DI = 1234H
AX = 2233H
┇
┇
12H
34H
00H
60H
1200H
数据段 1
┇
DS
DI
数据段2
33H
22H
61234H
LES指令例
LES DI,[1200H]
MOV AX,[DI]
┇
┇
12H
34H
00H
60H
1200H
数据段
┇
ES
DI
附加段
33H
22H
61234H
4. 标志位操作指令
LAHF
SAHF
PUSHF
POPF
隐含操作数AH
隐含操作数FLAGS
LAHF,SAHF
LAHF ;将FLAGS的低8位装入AH
SAHF ;执行与LAHF相反的操作
CF
PF
AF
ZF
CF
….
AH
FLAGS
D15
D0
D7
D0
PUSHF,POPF
针对FLAGS的堆栈操作指令
将标志寄存器压栈或从堆栈弹出
二、算术运算类指令
加法运算指令
减法运算指令
乘法指令
除法指令
算术运算指令的执行大多对状态标志位会产生影响
1. 加法指令
普通加法指令ADD
带进位位的加法指令ADC
加1指令INC
加法指令对操作数的要求与MOV指令相同
ADD指令
格式:
ADD OPRD1,OPRD2
操作:
OPRD1+OPRD2 OPRD1
ADD指令的执行对全部6个状态标志位都产生影响
ADD指令例
MOV AL,78H
ADD AL,99H
指令执行后6个状态标志位的状态
ADD指令例
01111000
+ 10011001
00010001
1
标志位状态: CF= SF=
AF= ZF=
PF= OF=
ADC指令
指令格式、对操作数的要求、对标志位的影响与ADD指令完全一样
指令的操作:
OPRD1+OPRD2+CF OPRD1
ADC指令多用于多字节数相加,使用前要先将CF清零。
INC指令
格式:
INC OPRD
操作:
OPRD+1 OPRD
常用于在程序中修改地址指针
不能是段寄存器或立即数
2. 减法指令
普通减法指令SUB
考虑借位的减法指令SBB
减1指令DEC
比较指令CMP
求补指令NEG
减法指令对操作数的要求与对应的加法指令相同
SUB指令
格式:
SUB OPRD1,OPRD2
操作:
OPRD1- OPRD2 OPRD1
对标志位的影响与ADD指令同
SBB指令
指令格式、对操作数的要求、对标志位的影响与SUB指令完全一样
指令的操作:
OPRD1- OPRD2- CF OPRD1
DEC指令
格式:
DEC OPRD
操作:
OPRD - 1 OPRD
指令对操作数的要求与INC相同
指令常用于在程序中修改计数值
应用程序例
MOV BL,2
NEXT1 :MOV CX,0FFFFH
NEXT2: DEC CX
JNZ NEXT2
DEC BL
JNZ NEXT1
HLT
NEG指令
格式:
NEG OPRD
操作:
0 - OPRD OPRD
8/16位寄存器或存储器操作数
用0减去操作数,相当于对该操作数求补码
指令的两点注意请参见教材p121
CMP指令
格式:
CMP OPRD1,OPRD2
操作:
OPRD1- OPRD2
指令执行的结果不影响目标操作数!
CMP指令
用途:
用于比较两个数的大小,可作为条件转移指令转移的条件
指令对操作数的要求及对标志位的影响与SUB指令相同
CMP指令
两个无符号数的比较:
CMP AX,BX
若 AX > BX CF=0
若 AX < BX CF=1
两个带符号数的比较
CMP AX,BX
两个数的大小由OF和SF共同决定
OF和SF状态相同 AX > BX
OF和SF状态不同 AX < BX
CMP指令例
LEA BX,MAX
LEA SI,BUF
MOV CL,20
MOV AL,[SI]
NEXT:INC SI
CMP AL,[SI]
JNC GOON ;CF=0转
XCHG [SI],AL
GOON:DEC CL
JNZ NEXT
MOV [BX],AL
HLT
程序功能
?
程序功能
┇
┇
┇
MAX
BUF
XXH
XXH
XXH
找20个数中最大的数,并将其存放在MAX单元中
3. 乘法指令
无符号的乘法指令MUL
带符号的乘法指令IMUL
乘法指令采用隐含寻址,隐含的是存放被乘数的累加器AL或AX及存放结果的AX,DX;
若运算结果的高位全为0或1,表示其为无效数据,OF=CF=0
无符号数乘法指令
格式:
MUL OPRD
不能是立即数
操作:
OPRD为字节数 AL×OPRD AX
OPRD为16位数 AX×OPRD DXAX
无符号数乘法指令例
MUL BYTE PTR[BX]
┇
BX
XXH
AL ×XXH
AX
带符号数乘法指令
格式:
IMUL OPRD
IMUL指令将OPRD视为带符号数,运算时若操作
数为负数,要先将操作数求补码,运算后再将结
果求补。
IMUL指令例
设:AL=FEH,CL=11H,求AL与CL的乘积。
若为无符号数,则 MUL CL
结果:AX=10DEH
若将两操作数看作有符号数,则:
IMUL CL
指令执行后:AX=FFDEH=-34。
4. 除法指令
无符号除法指令 DIV OPRD
有符号除法指令 IDIV OPRD
若OPRD是字节数,则执行AX/OPRD
若OPRD是双字节数,则执行 DXAX/OPRD
指令要求被除数是除数的双倍字长
AL=商
AH=余数
AX=商
DX=余数
5. BCD码调整指令
共6条,均为隐含寻址方式,隐含的操作数是
AL或AL、AH;
不能单独使用,要紧跟在相应的算术运算指令
之后;
执行结果为压缩BCD码或扩展BCD码表示的十进制数。
加法指令应用例
计算2658+3619=? 结果存放在SUM单元
设被加数和加数的每一位都以ASCII码形式存放在内存中,低位在前,高位在后。
36H
32H
39H
31H
STRING1
STRING2
38H
35H
36H
33H
数据段
SUM
...
...
加法指令应用例
LEA SI,STRING1
LEA DI,STRING2
LEA BX,SUM
MOV CX,4
CLC
NEXT:MOV AL,[SI]
ADC AL,[DI]
AAA
MOV [BX],AL
INC SI
INC DI
INC BX
DEC CX
JNZ NEXT
本文档为【微型计算机接口技术课件第三章1】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。