微机原理与应用 第3章 80868088指令系统.docx
- 文档编号:11653851
- 上传时间:2023-03-29
- 格式:DOCX
- 页数:47
- 大小:71.67KB
微机原理与应用 第3章 80868088指令系统.docx
《微机原理与应用 第3章 80868088指令系统.docx》由会员分享,可在线阅读,更多相关《微机原理与应用 第3章 80868088指令系统.docx(47页珍藏版)》请在冰豆网上搜索。
微机原理与应用第3章80868088指令系统
第三章8086/8088指令系统(instructionsystem)
§3.1指令格式和寻址方式(instructionformat&addressingmode)
一.指令格式
指令:
规定计算机进行某种操作的命令
格式:
操作码
操作数
1~2Byte
1~4Byte
字长为1~6字节
单字节指令:
操作码和操作数合一字节或无操作数
INCCX;机器码41H即01000001(格式01000|reg)
代码
000
001
010
011
100
101
110
111
reg
AX
CX
DX
BX
SP
BP
SI
DI
多字节指令:
操作码占1~2字节
MOVAX,[0700H];机器码A10007
(格式1010000w|disp-lo|disp-hi)
(w=1取AX,w=0取AL)
二.寻址方式
寻址:
指令寻找操作数
可采用六种方式寻址
1.立即数寻址
指令的一个操作数是立即数(常数)
MOVAX,200;AX←200
立即数范围:
8位n=00~FFH,16位nn=0000~FFFFH
2.寄存器寻址
指令中的寄存器存放了操作数
ADDCX,BX;CX←CX+BX
DECCX;CX←CX-1
3.寄存器间接寻址
指令中寄存器存放了操作数的地址,通常使用的寄存器是BX、BP、SI、DI,且用方括号括起来
MOVAX,[BX];AX←[BX]
AH
AL
DS:
0100
DS:
0101
设BX=0100H,指令执行后
0100H单元数送AL
0101H单元数送AH
4.直接寻址
指令中指明操作数地址,它是数据段DS的偏移地址
ADDAX,[0200H];AX←AX+[0200H]
设DS=1000H,指令执行后
10200H和10201H两单元组成的16位数(低字节在先)与AX相加并存于AX中
5.变址寻址(直接变址寻址,或寄存器相对寻址)
指令中指定的变址寄存器(SI、DI)的内容加上位移量作为操作数地址
MOVAX,[DI+4];AX←[DI+4]
基址寻址,与变址寻址一样,只是指令中使用基址寄存器(BX、BP)
MOVAX,[BX+6];AX←[BX+6]
BX对应的当前段是DS,BP对应SS
IBM汇编允许三种形式指定基址寻址
标准形式MOVAX,[BX]+6
先写位移量MOVAX,6[BX]
位移量写在括号内MOVAX,[BX+6]
6.基址变址寻址(有位移量也叫基址变址相对寻址)
操作数的地址由基址寄存器、变址寄存器的内容和位移量三者相加而得(也可没有位移量)
MOVAX,[BP+SI+6];AX←[BP+SI+6]
8086/8088寻址方式有的分得更细,还有隐含、相对、字符串、I/O端口寻址等等
逻辑地址的来源
操作类型
段基值
段内偏移地址
隐含的段
可更换的段
取指令
堆栈操作
存取变量(以下各种操作除外)
源字符串操作
目的字符串操作
用BP寻址变量
CS
SS
DS
DS
ES
SS
无
无
CS、ES、SS
CS、ES、SS
无
CS、DS、ES
IP
SP
有效地址
SI
DI
有效地址
当前段以外的寻址
0
0
1
SEG
1
1
0
一字节段超越前缀:
SEG00011011
ESCSSSDS
MOV[BX],AX的当前段(隐含的段)为DS,现要在当前附加段寻址,指令应为
MOVES:
[BX],AX
汇编后段前缀机器码在前,即268907,(SEG=00为ES,故得00100110)
有效地址和物理地址
三.指令分类
8086/8088的99条指令分为六类
1.数据传送类14
2.算术运算类20
3.逻辑运算类12
4.字符串操作类13
5.控制转移类(转移、调用和返回、迭代控制)28
6.处理机控制类12
§3.2数据传送指令(datatransfer)
一.通用数据传送
1.MOV
把一个字节或字从源操作数传送到目的操作数中
格式:
MOVdst,src
有:
R/Mreg,R/MI,SEGR/M
MOVAX,TABLE;AXTABLE
MOVCL,80H;CL80H
MOVBETA,9BH;BETA9BH
MOVAX,ES;AXES
禁止:
CSR/M,CSI,IPR/M,IPI
例:
将BX内容送内存8A2EH
MOV[8A2EH],BX
设DS=2000H,则物理地址为2000H16+8A2EH=28A2EH
指令执行后,BL[28A2EH],BH[28A2FH]
2.PUSH
把字压入堆栈
格式:
PUSHsrc
有:
STR/M,STSEG(ST—栈顶,stacktop)
PUSHDS;[ST]DS
PUSHALPHA;[ST]ALPHA
操作过程:
SPSP-2,[SP+1,SP]src
例:
设SS=0200H,SP=0008H,将AX、BX的内容压入堆栈
02004H
BL
BH
02006H
AL
AH
02008H
程序段为PUSHAX
PUSHBX
HLT
执行前栈顶SS:
SP=02008H
执行后02004H
3.POP
把字弹出堆栈
格式:
POPdst
有:
R/MST,SEGST
POPALPHA;ALPHA[ST]
POPDS;DS[ST]
操作过程:
dst[SP+1,SP],SPSP+2
例:
设SS=0200H,SP=0004H,将当前栈顶内容传送至ES
指令为POPES
02004H
20
02005H
10
02006H
执行前栈顶为SS:
SP=02004H
执行后ES=1020H
栈顶为02006H
4.XCHG
将源操作数和目的操作数(字节或字)互相交换
格式:
XCHGdst,src
XCHGCL,BETA;CL
BETA
XCHGAX,DX;AX
DX
(XCHGAX,DX也可用PUSHAX,PUSHDX,POPAX,POPDX达到)
5.XLAT
字节翻译,也叫查表转换.将表中的一个字节取至累加器AL中.
表的起始地址预置在BX中,AL原来的内容为表的偏移地址(相对于BX)
格式:
XLAT;AL[BX+AL]
例:
电话通讯中的五中取二码存于0600H~0609H单元,请取出十进制数6的五中取二码
MOVBX,0600H;表首地址
MOVAL,06H;表的第7个元素
XLAT;查表转换
HLT;暂停
二.输入/输出数据传送
1.IN
将输入设备的一个端口的数据(字或字节)送到累加器
直接端口寻址:
用8位立即数作为端口地址,范围0~255
间接端口寻址:
用寄存器DX的内容作为端口地址,范围0~65535
格式:
INAcc,port
INAX,70H;AL[70H],AH[71H]
INAL,70H;AL[70H]
INAX,DX;AL[DX],AH[DX+1]
INAL,DX;AL[DX]
例:
设DX=7C1AH,则执行INAX,DX后结果如下
2.OUT
将累加器的内容(字节或字)送到输出设备的一个端口
直接端口寻址:
用8位立即数作为端口地址,范围0~255
间接端口寻址:
用寄存器DX的内容作为端口地址,范围0~65535
格式:
OUTport,Acc
OUT70H,AX;[70H]AL,[71H]AH
OUTDX,AL;[DX]AL
三.目的地址传送
这些指令规定源操作数来自存储器,目的操作数来自寄存器
指令仅对变量的地址进行处理,不处理变量的内容
1.LEA
装入有效地址
格式:
LEAdst,src;regmem16
LEABX,VARI;BXEA(相当于MOVBX,OFFSETVARI)
LEADX,[SI];DXEA(相当于MOVDX,SI)
例:
若DI=005BH,BX=3F00H,LEAAX,[BX+DI]后,AX=3F5BH
注意:
若执行MOVAX,[BX+DI],结果是AX=[3F5BH]
2.LDS
把指示器的内容(即指针变量)装入DS中
格式:
LDSdst,src;reg[EA],DS[EA+2]
LDSBX,TABLE;BX[EA],DS[EA+2]
例:
设当前数据段DS=8000H,在偏移地址为0F1CH开始存放四个字节B201203F,若执行
LDSBX,[0F1CH]
MOVAX,[BX]
第一条指令得:
BX=01B2H,DS=3F20H
数据段地址产生转换,使3F20H成为当前段,相当于执行
MOVBX,[0F1CH]
MOVDS,[0F1CH+2]
第二条指令则从DS:
BX=3F200H+01B2H=3F3B2H单元取数送AX
AX=[3F3B2H]
80F1CH
B2
01
3F3B2H
AX
20
3F
3.LES
把指示器的内容装入ES中
格式:
LESdst,src
LESBX,[DI];BX[EA],ES[EA+2]
四.状态标志位传送
1.LAHF
把状态标志寄存器的低8位装到AH中
格式:
LAHF;AHFlags
AH
SF
ZF
AF
PF
CF
2.SAHF
把AH的内容装入标志寄存器低8位,标志寄存器高8位不变
格式:
SAHF;FlagsAH
3.PUSHF
把状态标志压入堆栈
格式:
PUSHF;STFlags
操作过程:
SPSP-2,[SP+1,SP]Flags
4.POPF
把状态标志弹出堆栈
格式:
POPF;FlagsST
操作过程:
Flags[SP+1,SP],SPSP+2
指令类型
助记符格式
操作内容
通用数据传送
MOVdst,src
PUSHsrc
POPdst
XCHGdst,src
XLAT[src-tab]
传送一个字节或字
压一个字进栈
弹一个字出栈
交换两个字节或字
翻译字节(查表转换)
输入/输出
数据传送
INAcc,src
OUTport,Acc
从端口输入一个字节或字到累加器
从累加器输出一个字节或字到端口
目的地址传送
LEAdst,src
LDSdst,src
LESdst,src
装入有效地址
把指针装入DS
把指针装入ES
标志位传送
LAHF
SAHF
PUSHF
POPF
将标志寄存器右字节装入AH
将AH内容存到标志寄存器右字节
把标志压入堆栈
把标志弹出堆栈
说明:
1.数据传送指令执行后源操作数不会改变(XCHG除外)
2.大多数数据传送指令不影响标志寄存器,只有SAHF和POPF对标志有影响
ODITSZAPC
SAHF····+++++
POPF+++++++++
§3.3算术运算指令(arithmeticoperation)
一.加法运算
1.ADD
将两个操作数相加并把和送目的操作数
格式:
ADDdst,src
有:
R/Mreg+R/M,R/MR/M+I
ADDDX,AX;DXDX+AX
ADDBETA,CL;BETABETA+CL
ADDSI,98BFH;SISI+98BFH
ADDTAB,1234H;TABTAB+1234H
2.ADC
带进位加,将两个操作数(字节或字)及进位标志相加,结果送目的操作数
格式:
ADCdst,src
有:
R/Mreg+R/M+CF,R/MR/M+I+CF
例:
将存储单元1240H~1242H的24位数与1243H~1245H的24位数相加,结果送1240H~1242H单元.字节按先低后高顺序存放
MOVAL,[1243H]
ADD[1240H],AL[1242H][1241H][1240H]
MOVAX,[1244H]+[1245H][1244H][1243H]
ADC[1241H],AX[1242H][1241H][1240H]
HLT
3.INC
增量,将操作数(字节或字)加1并回送
格式:
INCdst
INCCX;CXCX+1
INCBETA;BETABETA+1
(BETA是个存储器操作数,可用BYTEPTR或WORDPTR临时指定其类型)
二.减法运算
1.SUB
将左操作数减去右操作数并回送到左操作数
格式:
SUBdst,src
有:
regreg-R/M,MM–reg,R/MR/M-I
SUBSI,BX;SISI-BX
SUBBETA,DL;BETABETA-DL
2.SBB
带借位减,将左操作数减去右操作数和进位标志,结果回送到左操作数
格式:
SBBdst,src
有:
R/Mreg-R/M-CF,MM–reg-CF,R/MR/M–I-CF
SBBAX,BX;AXAX-BX-CF
SBBAX,1FF0H;AXAX-1FF0H-CF
例:
将存放在0540H~0543H单元的32位数减去0544H~0547H单元的32位数,结果放在0540H~0543H单元,按先低后高顺序
MOVAX,[0544H]
SUB[0540H],AX[0543H][0542H][0541H][0540H]
MOVAX,[0546H]-[0547H][0546H][0545H][0544H]
SBB[0542H],AX[0543H][0542H][0541H][0540H]
HLT
3.DEC
减量,操作数减1并回送
格式:
DECdst
DECBL;BLBL-1
DECTABLE;TABLETABLE-1
4.NEG
求补,对操作数(字节或字)求补码(连符号位)
格式:
NEGdst;dst0-dst
5.CMP
比较,将目的操作数减去源操作数,不回送结果
比较后两操作数不变,仅影响标志位
格式:
CMPdst,src;dst-src
有:
R/M-reg,R/M-I
CMPSI,BX;SI-BX
CMPBETA,8FH;BETA–8FH
·无符号数A与B比较,即A-B,有
当ZF=1,A=B(ZF=1,CF=0)
CF=0,A>B(ZF=0,CF=0)AB(CF=0)
CF=1,A
·带符号数A与B比较,即A-B
①当A=3AH,B=E3H
00111010A>B
+00011101——[E3H]变补SF=0,OF=0(CY7=0,CY6=0)
01010111
②当A=E3H,B=3AH
11100011A
+11000110SF=1,OF=0(CY7=1,CY6=1)
110101001
③当A=3AH,B=9DH
00111010A>B
+01100011SF=1,OF=1(CY7=0,CY6=1)
10011101
④当A=9DH,B=3AH
10011101A
+11000110SF=0,OF=1(CY7=1,CY6=0)
101100011
可见,OF=SF时,A≥B(ZF=1时,A=B)
OF=SF时,A
即:
比较结果为正无溢出,结果为负有溢出A≥B
比较结果为负无溢出,结果为正有溢出A
另一种判据是:
A7⊕B7=CF时,A≥B
A7⊕B7=CF时,A
即:
同号比较无进位,异号比较有进位A≥B
同号比较有进位,异号比较无进位A
三.乘法运算
将两个8位或16位数相乘
乘法运算应区分无符号数和带符号数,例:
FFHFFH
无符号数为255255=65025
带符号数为(-1)(-1)=1
1.MUL
不带符号的字节或字乘法运算,乘数不能是立即数
相乘结果积的高半部为0则CF和OF复位,否则CF和OF置位,表示高半部积有效
格式:
MULsrc;dstAccsrc
MULBL;AXALBL
MULBX;DX:
AXAXBX
MULBETA;AXALBETA(这里BETA定义为字节)
2.IMUL
带符号乘,也叫整数乘,对两个带符号数(字节或字)进行乘法运算
相乘结果积的高半部为低半部的符号扩展则CF和OF复位,否则CF和OF置位,表示高半部积有效
格式:
IMULsrc;dstAccsrc
IMULCL;AXALCL
IMULTABLE;DX:
AXAXTABLE
四.除法运算
1.DIV
不带符号的字节或字除法运算,除数不能是立即数
如果除数为0,或运算结果商超出范围则产生除法错误中断,且商和余数不确定
格式:
DIVsrc;ALAX/src,AHREM(8位)
或AXDX:
AX/src,DXREM(16位)
DIVBL;ALAX/BL,AHREM
DIVBX;AXDX:
AX/BX,DXREM
例:
751BH79HCL(商)
MOVAX,751BH;取被除数
MOVBL,79H;取除数
DIVBL;相除
MOVCL,AL;送商到CL
HLT
2.IDIV
带符号除,也叫整数除,执行带符号数(字节或字)除法运算
如果除数为0,或运算结果商超出范围则产生除法错误中断,且商和余数不确定
运算后商的范围:
字节为+127(7FH)~-127(81H)
字为+32767(7FFFH)~-32767(8001H)
·整数除规定:
余数的符号与被除数相同,当产生非整数商时,采用舍尾取整使商成为整数
例:
手算(-11)(-3)=113=3余2
计算机运算结果为3余(-2),而(-11)3=-3余(-2)
格式:
IDIVsrc;ALAX/src,AHREM(8位)
或AXDX:
AX/src,DXREM(16位)
IDIVBX;AXDX:
AX/BX,DXREM
IDIVBETA;ALAX/BETA,AHREM
3.CBW
将字节转换为字
操作过程:
若A7=0则AH0,A7=1则AHFFH
格式:
CBW;AH=FFHA7,AL不变
4.CWD
将字转换为双字
操作过程:
若A15=0则DX0,A15=1则DXFFFFH
格式:
CWD;DX=FFFFHA15,AX不变
例:
设BH=FBH(-5),BL=FEH(-2),CH=ECH(-20),CL=05
计算(BHBL)+(CH/CL)AX
MOVAL,BH;AX=FBH
IMULBL;AX=000AH=-5(-2)
MOVDX,AX;结果暂存DX
MOVAL,CH;AX=00ECH(-20)
CBW;AX=FFECH,扩展为双倍字节
IDIVCL;AX=00FCH(-4)
CBW;AX=FFFCH
ADDAX,DX;AX=0006H=+6
HLT
五.十进制和ASCII调整
压缩BCD数:
又叫组合BCD数,一个字节放两位BCD数,范围0~99,例:
85=10000101
非压缩BCD数:
又叫分离BCD数,一个字节只在低4位放一位BCD数,范围0~9,例:
7=00000111
压缩和非压缩BCD数都是无符号数
(一)十进制调整
1.DAA(decimaladjustforaddition)
加法十进制调整
格式:
DAA
编程时,DAA紧跟在ADD或ADC之后
例:
将两个BCD数29H和57H相加,结果送0A10H单元
MOVAL,29H00101001
ADDAL,57H+01010111
DAA10000000
MOV[0A10H],AL+0110
HLT10000110—86
2.DAS(decimaladjustforsubtraction)
减法十进制调整
格式:
DAS
编程时,DAS紧跟在SUB或SBB之后
例:
53-28=2501010011
MOVAL,53H+11011000[-28]补
SUBAL,28H100101011CF=CY7=0,AF=CY3=1
DAS+11111010[-06]补
HLT100100101
(二)非压缩BCD(ASCII)调整
1.AAA(ASCIIadjustforaddition)
加法ASCII调整
相加结果出现半进位或AL低四位非法,则作加6调整,并在AH中加1,AL高四位清0
格式:
AAA
编程时,AAA紧跟在ADD之后
2.AAS(ASCIIadjustforsubtraction)
减法ASCII调整
相减结果出现半借位或AL低四位非法,则作减6调整,并将AH减1,AL高四位清0
格式:
AAS
编程时,AAS紧跟在SUB之后
3.AAM(ASCIIadjustformultiply)
乘法ASCII调整
格式:
AAM;AHAL/0AH,ALAL%0AH(余数,%表示
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 微机原理与应用 第3章 80868088指令系统 微机 原理 应用 80868088 指令系统