微机原理与应用 第3章 80868088指令系统Word文档下载推荐.docx
- 文档编号:8620218
- 上传时间:2023-05-12
- 格式:DOCX
- 页数:47
- 大小:71.67KB
微机原理与应用 第3章 80868088指令系统Word文档下载推荐.docx
《微机原理与应用 第3章 80868088指令系统Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《微机原理与应用 第3章 80868088指令系统Word文档下载推荐.docx(47页珍藏版)》请在冰点文库上搜索。
3.寄存器间接寻址
指令中寄存器存放了操作数的地址,通常使用的寄存器是BX、BP、SI、DI,且用方括号括起来
MOVAX,[BX];
AX←[BX]
AH
AL
DS:
0100
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
ES
无
CS、ES、SS
CS、DS、ES
IP
有效地址
当前段以外的寻址
1
SEG
一字节段超越前缀:
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
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
20
02005H
10
执行前栈顶为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
将累加器的内容(字节或字)送到输出设备的一个端口
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
3F
3.LES
把指示器的内容装入ES中
LESdst,src
LESBX,[DI];
BX[EA],ES[EA+2]
四.状态标志位传送
1.LAHF
把状态标志寄存器的低8位装到AH中
LAHF;
AHFlags
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
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]
3.INC
增量,将操作数(字节或字)加1并回送
INCdst
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]
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<
B(ZF=0,CF=1)
带符号数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
+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;
IMULCL;
AXALCL
IMULTABLE;
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;
取除数
相除
MOVCL,AL;
送商到CL
2.IDIV
带符号除,也叫整数除,执行带符号数(字节或字)除法运算
运算后商的范围:
字节为+127(7FH)~-127(81H)
字为+32767(7FFFH)~-32767(8001H)
整数除规定:
余数的符号与被除数相同,当产生非整数商时,采用舍尾取整使商成为整数
手算(-11)(-3)=113=3余2
计算机运算结果为3余(-2),而(-11)3=-3余(-2)
IDIVsrc;
IDIVBX;
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)
AX=FFFCH
ADDAX,DX;
AX=0006H=+6
五.十进制和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 指令系统
![提示](https://static.bingdoc.com/images/bang_tan.gif)