【文档说明】《微机原理与汇编语言》第4章解析课件.ppt,共(91)页,667.002 KB,由小橙橙上传
转载请保留链接:https://www.ichengzhen.cn/view-44731.html
以下为本文档部分文字说明:
微机原理与汇编语言第4章8086/8088指令系统和寻址方式2022年11月24日1西安邮电学院计算机系系统结构教研室2008.4教材及参考书《微机原理与汇编语言》王钰李育贤王晓婕编著《微机原理与汇编语言》实验指导王钰编著微机原理与汇编语言第4章8086/8088指令系统和寻址方式2022
年11月24日2第4章8086/8088指令系统与汇编语言主要内容:–8086/8088指令系统的寻址方式–8086/8088指令格式–8086/8088指令系统–80x86指令系统微机原理与汇编语言第4章8086/8088指令系统和寻址方式2022年
11月24日34.18086/8088指令系统的寻址方式所谓寻址方式就是寻找操作数存放地址(位置)的方法。在8086/8088系统中操作数存放的位置有以下4种:⑴操作数包含在指令字节中。即指令格式中操作数部分就是操作数本身。这种操作数叫立即数操作数。⑵操作数存放在CPU的某个内部寄存器
中。这种操作数叫寄存器操作数。⑶操作数在内存的数据区中。这种操作数叫存储器操作数。微机原理与汇编语言第4章8086/8088指令系统和寻址方式2022年11月24日4⑷操作数来自或送到I/O端口。这种操作数叫
I/O操作数。在8086/8088系统中,操作数又可分为两大类:数据操作数和地址操作数。因此,寻址方式也分为数据寻址方式和地址寻址方式两大类。1.数据的寻址方式对于数据操作数,有四种形式:①无操作数②单操作数:可以
是源操作数,也可以是目的操作数。微机原理与汇编语言第4章8086/8088指令系统和寻址方式2022年11月24日5③双操作数:一个是源操作数,一个是目的操作数。④隐含操作数:可能隐含一个操作数(源或目的),也可能隐含两个操作数。源操作数:在操作过程
中其值不变的操作数。(可以提供数据的操作数)目的操作数:在操作后可被操作结果代替的操作数。(可以接收数据的操作数)1)立即数寻址方式例如:MOVAL,80HMOVAX,1234H微机原理与汇编语言第4章80
86/8088指令系统和寻址方式2022年11月24日6AL操作码字节80H程序存储器指令码操作码字节12H程序存储器AL指令码AH34H12H34H80H80H12H34HMOVAL,80HMOVAX,1234H微机原理与汇编语言第4章8086/8088指令系统和寻址方式2022
年11月24日72)寄存器寻址方式例如:INCCXMOVAX,CX89C1程序存储器AXCX指令码(包括操作数)微机原理与汇编语言第4章8086/8088指令系统和寻址方式2022年11月24日83)存储器寻址方式存储器寻址方式的操作数存放在存储器单元中。因此,要存取操作数就必须知道
其存储器的单元地址。在指令中可以直接给出或间接给出操作数的地址,以达到存取操作数的目的。指令中给出的地址只是操作数的有效地址(EA),并且是放在方括号(“[]”)中。若要从存储器中存取操作数还须得到实际的地址(物理地址)。物理地址=段地址
左移四位+有效地址物理地址=CSDSSSES×10H+EA微机原理与汇编语言第4章8086/8088指令系统和寻址方式2022年11月24日9有效地址可以由以下三种地址分量组成:●位移量:它是存放在指令中的一个8位或16位的带符号
数。●基址:它是存放在基址寄存器BX或BP中的内容。●变址:它是存放在变址寄存器SI或DI中的内容。对于某条具体指令,这三个地址分量可有不同的组合。正是因为这三种地址分量有不同的组合,才使得对存储器操作数的寻址产生了若干种不同的方式。微机
原理与汇编语言第4章8086/8088指令系统和寻址方式2022年11月24日10⑴直接寻址方式MOVAL,[1064H]DS:20000H20000H21064H21064HAL操作码641045…代码段数据段4545+1064HEA=16位disp微机原理与汇编语言第
4章8086/8088指令系统和寻址方式2022年11月24日115040……MAX⑵寄存器间接寻址MOVAX,[SI]MOV[BX],AL30000HDS:30000HSI:2000H+32000H32000H4050504
0……64HMAL30000HDS:30000HBX:1000H+31000H31000H64H64HMOVAX,[SI]MOV[BX],ALEA=(BX)(DI)(SI)微机原理与汇编语言第4章8086/8088指令系统和寻址
方式2022年11月24日12⑶寄存器相对寻址22064H22064H641045…代码段数据段操作码…CL4545+1064H21000HBX:1000HDS:20000H20000HEA=(BX)(BP)(DI)(SI)+8位disp16位dispMOVCL,[BX+1064H]微机原理与汇
编语言第4章8086/8088指令系统和寻址方式2022年11月24日13⑷基址加变址寻址方式MOVAH,[BP][SI]56H……MAH40000HSS:40000HBP:2000H+43200H43200HSI:1200H56H56HEA=(BX)(BP)+(DI
)(SI)微机原理与汇编语言第4章8086/8088指令系统和寻址方式2022年11月24日14⑸基址加变址相对寻址MOV[BX+DI+1234H],AHEA=(BX)(BP)+(DI)(SI)+8位disp16位disp3412…代码段数据段操作码…45AH4000
0HDS:40000HBX:0200H+DI:0010H1234H454541444H41444H微机原理与汇编语言第4章8086/8088指令系统和寻址方式2022年11月24日154)I/O端口寻址方式⑴直接端口寻址方式INAL,21H21HAL操作码21H代码段80……01H02HI/O接口
8080微机原理与汇编语言第4章8086/8088指令系统和寻址方式2022年11月24日16⑵间接端口寻址方式OUTDX,AL……0001H0002HI/O接口80AL1234DX1234H8080微机原理与汇编语言第4章8086/8088指令系统和寻址方式2022年11月24日172.地址的寻
址方式地址的寻址方式其时是程序转移地址的寻址方式,也就是找出程序转移的地址号,而不是操作数。转移地址可以在段内(称段内转移),也可以跨段(称段间转移)。寻求转移地址的方法有以下四种:1)段内直接寻址转移的地址是当前
IP内容和指令规定的8位或16位位移量之和。当位移量是8位时,称为短程转移;位移量是16位时称为近程转移。微机原理与汇编语言第4章8086/8088指令系统和寻址方式2022年11月24日18这种寻址方式适用于条件转移或无条件转移
类指令。但条件转移只有8位位移量的短程转移。+当前IPEA有效转移地址opcode位移量PM(CS)×10H+EA位移量微机原理与汇编语言第4章8086/8088指令系统和寻址方式2022年11月24日19例:JMPSHORTALPHA本例指令是一无条件转
移指令,指令采用了段内直接寻址方式。符号地址ALPHA代表位移量。设ALPHA=20H,开始执行该指令时,(CS)=1500H,(IP)=3200H,于是该指令在存储器中的起始地址为:15000H+3200H=18200HOP20H存储器15000H18200
H18201H18202H18222H20H当前代码段首地址JMPSHORTALPHA转移地址而转移有效地址为:EA=当前(IP)+ALPHA=3202H+20H=3222H转移物理地址为:PA=15000H+3222H=18222H执行完这条指令后,IP的内容变成3222H(不再是
3202H),CPU将转移到存储单元地址18222H中去取指令来执行。微机原理与汇编语言第4章8086/8088指令系统和寻址方式2022年11月24日202)段内间接寻址方式程序转移的地址存放在寄存器或存储器单元中。指令执行使用寄存器或存储器单元的内容
来更新IP的内容。寄存器IPDMIP例如:JMPBXJMPWORDPTRADDRJMPWORDPTR[BX+ARRY]微机原理与汇编语言第4章8086/8088指令系统和寻址方式2022年11月24日21例:JMPWORDPTRBETA本指令是无条
件转移指令,可使程序转移到根据BETA指示的内存单元中取出的偏移地址开始执行指令。指令采用的是段内间接寻址方式。指令的操作数地址是一个符号地址BETA,所以可用数据寻址方式中的直接寻址方式得到存储转移偏移地址的内存单元地址。设当前(CS)=0120H,(IP)=2400H,BET
A=0100H,(DS)=2000H,(20100H)=00H,(20101H)=27H,则存储转移偏移地址的内存单元地址为:(DS)左移4位+BETA=20000H+0100H=20100H又(20100H)=00H,(20101H)=27H,即转移物理地址为:PA=01200H+
2700H=03900H执行完这条指令后,IP的内容变成2700H,CPU将转移到存储单元03900H去执行程序。OPOP00H存储器0120003600036010360203900当前代码段首址JMPWORDPTRBETA转移地址00H27H01H200002010020
101数据区首地址036032700HIP微机原理与汇编语言第4章8086/8088指令系统和寻址方式2022年11月24日223)段间直接寻址方式这种寻址方式是指令码中直接给出16位的段地址和16位的偏移地址用来更新当前的CS和IP
内容。opcodePM段地址偏移量IPCS微机原理与汇编语言第4章8086/8088指令系统和寻址方式2022年11月24日23OP00H40H存储器2000021000210012100230000当前代码段首址JMPFARPTRGAMMA转移代码段
首地址00H34000转移地址2100330H21004例:JMPFARPTRGAMMA本例指令为无条件转移指令,采用段间直接寻址方式。设当前(CS)=2000H(IP)=1000HGAMMA=3000:4000则本指令的起始地址为:20000H+1000H=210
00H转移物理地址为:PA=30000H+4000H=34000H执行完这条指令后,CS的内容变成3000H,IP的内容变成4000H,从而程序转移到存储单元34000H开始执行。微机原理与汇编语言第4章8086/8088指令系统和寻址方式2022年11月24日244)段间间接寻址方式这种
寻址方式是由指令码的寻址方式字节求出存放转移地址的连续两个字的地址。其低位字地址单元中存放的是偏移地址,高位字地址单元中存放的是转移段地址。DMCSIP段地址偏移量微机原理与汇编语言第4章8086/8088指令系统和寻址方式2022年11月24日25例:JMPDWOR
DPTRDELTA[BX]本例指令是无条件转移指令,采用段间间接寻址方式。设当前(CS)=1000H,(IP)=0100H,(DS)=2000H,(BX)=3000H,DELTA=0040H,(230
40H)=00H,(23041H)=50H,(23042H)=00H,(23043H)=30H,则间接存储地址按寄存器相对寻址为:(DS)左移4位+(BX)+DELTA=20000H+3000H+0040H=23040H于是,可得转移地址
为:3000H:5000H即转移物理地址为:PA=30000H+5000H=35000H执行本指令后,CS的内容和IP的内容分别变成3000H和5000H,程序转移到存储单元35000H开始执行。微机原理
与汇编语言第4章8086/8088指令系统和寻址方式2022年11月24日26OPOP40H存储器1000010100101011010230000当前代码段首地址JMPDWORDPTRDELTA[BX]转移代码段首地址00H35000转移地址10103…00H50
H23040230412304200H2304330H20000数据段首地址…………IPCS5000H3000H指令执行前:(CS)=1000H(IP)=0100H(DS)=2000H(BX)=300
0HDELTA=0040H指令执行后:(CS)=3000H(IP)=5000H微机原理与汇编语言第4章8086/8088指令系统和寻址方式2022年11月24日27opcodePM段地址偏移量IPCSDMCSIP段基址偏移量段间间接寻址方式段间直接寻址方式段间直接和间接寻址的区别微机原
理与汇编语言第4章8086/8088指令系统和寻址方式2022年11月24日284.28086/8088指令编码格式通常在指令格式中包含操作码和操作数两大部分。其中:操作码表示计算机执行什么操作,操作数指明参与操作的对象,或规定操作对象的地址(即操作对象的存放位置)。如何寻找操作数(即操作对
象),这就是指令的寻址方式,它是由指令编码格式指出的。操作码操作数微机原理与汇编语言第4章8086/8088指令系统和寻址方式2022年11月24日298086/8088指令系统采用变字长的指令编码格式,其指令
可由1~6个字节组成,它包括操作码(第一字节),寻址方式(第二字节),位移量、立即数(第三到第六字节)三部分组成。其中,寻址方式、位移量、立即数为操作数部分。opcodemodregr/mdispdata操作码寻址方式位移量立即数操作数微机原理与汇编语言第4章808
6/8088指令系统和寻址方式2022年11月24日30opcodeopcodeMod字节opcodeMod字节opcodeMod字节opcodeMod字节opcodeMod字节Data/dispdisp(低)D
ata/disp(低)Data/disp(高)disp(高)disp(低)disp(高)DataData(低)Data(高)操作码部分操作数部分一字节指令二字节指令三字节指令四字节指令五字节指令微机原理与汇编语言第4章8086/8088指令系统和寻址方式2022年1
1月24日31disp(低)/Data(低)disp(高)/Data(高)Data(低)Data(高)modregr/mWDOPCODE765432100172目的操作数源操作数源操作数目的操作数D=1D=0000001010
011100101110111ALCLDLBLAHCHDHBHAXCXDXBXSPBPSIDIregW=0W=1寄存器寻址BX+SI+disp8BX+DI+disp8BP+SI+disp8BP+DI+disp8SI+disp8DI+disp8BP+disp8BX+disp8BX+SI+disp1
6BX+DI+disp16BP+SI+disp16BP+DI+disp16SI+disp16DI+disp16BP+disp16BX+disp16BX+SIBX+DIBP+SIBP+DISIDIdisp16BX000001010011100
101110111ALCLDLBLAHCHDHBHAXCXDXBXSPBPSIDIW=0W=1寄存器寻址mod=11modr/m存储器寻址有效地址的计算公式mod=00mod=01mod=10双操作数指令中各字段定义
微机原理与汇编语言第4章8086/8088指令系统和寻址方式2022年11月24日32例4.1写出下面指令的机器语言编码。MOV[BX+DI-6],CL指令码为:88H、49H、FAHOPCODEDWmodr/mregdisp810001001
0010010011111010例4.2写出下面指令的机器语言编码。ADDAX,[BX+DI+0826]03H81H26H08H000000DWmodr/mregDisp-L000000110010011010001000Disp-H00001000微机原理与
汇编语言第4章8086/8088指令系统和寻址方式2022年11月24日334.38086/8088指令系统计算机是通过执行指令序列来完成用户的特定任务的,因此每种计算机都有一组指令集供用户使用。这组指令集就称为计算机的指令系统。指令系统中的每一条指令都对应着微处理器要完成的一种规定的操作,
这在设计微处理器时就事先规定好了,所以指令系统是表征一台计算机性能的重要因素,它的格式与规模将直接影响到机器的硬件结构。指令系统是程序员编写程序的基础,因此很好地掌握指令系统的有关知识是后续进一步学习的关键。微机原理与汇编语言第4章8086/8088指令系统和寻址方式2022年11月24日3480
86/8088指令系统大致可分为六大类指令:数据传送类指令算术运算类指令位操作类指令串操作类指令程序控制类指令处理器控制类指令学习指令系统着重要掌握指令的基本操作功能、合法的寻址方式及其对状态标志位的影响。微机原理与汇编语
言第4章8086/8088指令系统和寻址方式2022年11月24日354.3.1数据传送类指令数据传送指令的主要功能是传送数据、地址和标志。可分为通用数据传送指令、输入输出指令、地址传送指令和标志传送指令。1.通用数据传送指令通用数据传送指令可完成字节或字数据的传送。
它可分为数据传送指令、堆栈操作指令、数据交换指令和字节转换指令。(1)数据传送指令指令格式:MOVdst,src;(dst)←(src)src表示源操作数(字/字节)立即数操作数寄存器操作数(包括段寄存器)存储器操作数dst表
示目的操作数(字/字节)寄存器操作数(不包括IP,CS段寄存器)存储器操作数微机原理与汇编语言第4章8086/8088指令系统和寻址方式2022年11月24日36段寄存器CSDSSSES存储器通用存储器AX
BXCXDXBPSPSIDIALBLCLDLAHBHCHDHMOV指令数据传送方向16位8/16位8/16位16位8/16位指令功能:将源操作数传送(复制)到目的操作数。传送方向:如下图所示。立即数微机原理与汇编语言第4章8086/8088指令系统和寻址方式2022年11月24日37(2)堆栈操作
指令堆栈操作指令是用来完成压入和弹出堆栈操作的。8086/8088指令系统中提供了完成这两种操作的相应指令。①压入堆栈指令指令格式及操作:PUSHsrc;(SP)←(SP)-2,;((SP)+1:(SP))←(src)src表示源操作数(字)寄存器操作数(包括段寄
存器)存储器操作数微机原理与汇编语言第4章8086/8088指令系统和寻址方式2022年11月24日38注意:堆栈指令的操作数只能是字操作数(即16位操作数),且不能是立即数。进栈操作(PUSH):先移后进出栈操作(
POP):先出后移②弹出堆栈指令指令格式及操作:POPdst;(dst)←((SP)+1:(SP)),;(SP)←(SP)+2dst表示目的操作数(字)寄存器操作数(不包括IP,CS段寄存器)存储器操作数微
机原理与汇编语言第4章8086/8088指令系统和寻址方式2022年11月24日39(3)交换指令指令格式及操作:XCHGopr1,opr2;(opr1)←→(opr2)注意:交换指令的两个操作数可以是寄存器操作数,存储器操作数,但都不能
是立即数操作数,也不能同时为存储器操作数;寄存器操作数是指通用寄存器,不包括段寄存器。也就是说,交换指令是完成寄存器与寄存器、寄存器与存储器之间的数据互换功能。交换的两个数据可以是8位的,也可以是16位的。微机原理与汇编语言第4章8086
/8088指令系统和寻址方式2022年11月24日40(4)字节转换指令指令格式及操作:XLATsrc_table;(AL)←((BX)+(AL))XLAT指令是用来将一种字节代码转换成另一种字节代码。即将BX的内容(代码
表格首址src_table)和AL的内容(表格偏移量)相加作为有效地址。并从中读出此内存表格地址单元的内容传送到AL累加器中。XLAT指令还可以有以下几种表示形式:XLAT;不写操作数XLATB;有B就不允许再写操作数。XLATES:src_table;重设段寄存器为ES微机原理
与汇编语言第4章8086/8088指令系统和寻址方式2022年11月24日41[例]在内存的数据段有一张16进制数的ASCII码表,其首地址为Hex_table,如下图所示,为欲将十六进制数0AH转换成A
SCII码,则可用以下几条指令实现:MOVBX,OFFSETHex_tale;(BX)←表首址MOVAL,0AH;(AL)←十六进制数AXLATHex_table;查表转换61000H61001H61002H6100AH6100BH6
100FH60000HDS:60000HBX:1000HAX:000AH+6100AHHex_table+0Hex_table+1Hex_table+2Hex_table+AHex_table+BHex
_table+FASCII表31H32H41H42H30H46H………0AHALEA6100AH41H41HASCII表Hex_table=1000H微机原理与汇编语言第4章8086/8088指令系统和寻址方式2022年11月24日422.输入/输出指令输入输出指令可以分为两大类:一类是直接端
口地址的输入/输出指令;一类是通过DX寄存器间接端口地址的输入/输出指令。(1)输入指令①直接寻址的输入指令指令格式及操作:INacc,port;(acc)←(port)其中:acc为8位或16位累加器AL/AX。port为8位
端口地址,故可寻址256个端口。微机原理与汇编语言第4章8086/8088指令系统和寻址方式2022年11月24日43②间接寻址的输入指令指令格式及操作:INacc,DX;(acc)←((DX))其中:acc为8位或16位累加器AL/AX。DX为16位
间接寻址的端口地址寄存器,故可寻址64K个端口。(2)输出指令①直接寻址的输出指令指令格式及操作:OUTport,acc;(port)←(acc)微机原理与汇编语言第4章8086/8088指令系统和寻址方式2022年11月24日44②间接寻址的输出指令指令格式及操作:OUTDX,acc
;(DX)←((acc))微机原理与汇编语言第4章8086/8088指令系统和寻址方式2022年11月24日453.地址传送指令(1)取有效地址指令指令格式:LEAreg16,mem此指令的功能是将存放源操作数的16位偏移地址(即有效地址EA)
送到一个16位的通用寄存器中。即源操作数必须是一个存储器操作数,目的操作数必须是一个寄存器操作数。例如:LEABX,bufferLEAAX,[BP][DI]LEADX,bety[BX][SI]微机原理与汇编语
言第4章8086/8088指令系统和寻址方式2022年11月24日46注意LEA指令和MOV指令的异同,比较下面两组指令:不同:LEABX,buffer;将存储器buffer的偏移地址送到BXMOVBX,buffer;将存储器buffer的内容传送到BX相同
:LEABX,bufferMOVBX,OFFSETbuffer以上两条指令都是将存储器buffer的偏移地址送到BX。其中OFFSETbuffer表示存储器偏移地址。微机原理与汇编语言第4章8086/8088指令系统和寻址方式2022年11月24日47(2)地址
指针装入DS指令指令格式:LDSreg16,mem32此指令的功能是将源操作数所对应的双字长的内存单元中的高字内容(一般为16位段基址)送入DS,低字内容(一般为偏移地址)送入指令所指定的寄存器中。例如:LDSDI,[2130H]34H12H00H40H2130H2132H
DMDIDS1234H4000H微机原理与汇编语言第4章8086/8088指令系统和寻址方式2022年11月24日48(3)地址指针装入ES指令指令格式:LESreg16,mem32此指令的功能是将源操作数所对应的双字长的内存单元中的高字内容(一般为16位段基址)送入ES,低字内容(一般为偏移
地址)送入指令所指定的寄存器中。例如:LESDI,[2130H]34H12H00H40H2130H2132HDMDIES1234H4000H微机原理与汇编语言第4章8086/8088指令系统和寻址方式2022年11月24日494.标
志传送指令(1)取标志指令指令格式:LAHF(2)置标志指令指令格式:SAHFOFDFIFTFSFZFAFPFCFFLAGAHLAHF和SAHF指令操作示意图微机原理与汇编语言第4章8086/8088指令系统和寻址方式2022年11月24日50(3)标志压入堆栈指令指令格式及操作:PUS
HF;(SP)←(SP)-2,((SP)+1;(SP))←(FLAG)(4)标志弹出堆栈指令指令格式及操作:POPF;(FLAG)←((SP)+1;(SP)),(SP)←(SP)+2微机原理与汇编语言第4章8086/8088指令系统和寻址方式2022年11月24日51在使用这些
传送类指令时应注意以下几点:①目的操作数不能为立即数。②目的操作数为段寄存器(CS不能作为目的操作数),源操作数不能为立即数。③源操作数为非立即数时,两操作数之一必须为寄存器操作数。④操作数类型必须一致。⑤用BX、SI、DI来间接寻址时
,默认的段寄存器为DS;用BP来间接寻址时,默认的段寄存器为SS。微机原理与汇编语言第4章8086/8088指令系统和寻址方式2022年11月24日52⑥对于堆栈操作,源操作数不能为立即数;CS寄存器的值可以压入堆栈,但反之则不允许。⑦数据交换指令的两
个操作数任一都不能是立即数。⑧换码指令的操作数是一种特殊的基址变址寻址方式,基址寄存器为BX,变址寄存器为AL。⑨除了SAHF和POPF指令外,其余指令都不会影响标志。微机原理与汇编语言第4章8086/8088指令系统和寻址方式2022年11月24日534.
3.2算术运算类指令1.算术运算的数据类型8086/8088有丰富的算术运算指令,而且可以处理4种类型的数据,如下表所示:数据类型数据范围运算可作累加器使用的寄存器或存储器二进制8位无符号0~255加减所有的通用寄存器或存储器乘除AX寄存器16位无符号0~
65535加减所有的通用寄存器或存储器乘除AX、DX寄存器8位带符号-128~+127加减所有的通用寄存器或存储器乘除AX寄存器16位带符号-32768~+32767加减所有的通用寄存器或存储器乘除AX、DX寄
存器十进制压缩型BCD0~99加减AX寄存器非压缩型BCD0~9加减AX寄存器乘除AX寄存器微机原理与汇编语言第4章8086/8088指令系统和寻址方式2022年11月24日542.算术运算指令对标志的影响8086/8
088的算术运算指令将运算结果的某些特性传送到6个标志上去,这些标志中的绝大多数可由跟在算术运算指令后的条件转移指令进行测试,以改变程序的流程。因此,掌握指令结果对标志的影响对编程有着重要的作用。关于6个标志的含义已在第3章
阐述了,这里不在重复。算术运算类指令共有20条,包括加、减、乘、除运算、符号扩展和十进制调整指令,除符号扩展指令(CBW和CWD)外,其余指令都影响标志。微机原理与汇编语言第4章8086/8088指令系统和寻址方
式2022年11月24日553.二进制数运算指令(1)加法指令在微处理器中,没有专用的BCD码运算指令,使用二进制运算指令进行BCD码数的运算,然后用BCD码运算调整指令进行调整,重新得到BCD码的结果。指令格式操作功能标志位影响OSZAPCADDd
st,src(dst)←(dst)+(src)○○○○○○ADCdst,src(dst)←(dst)+(src)+(CF)○○○○○○INCdst(dst)←(dst)+1○○○○○△AAAASCII码调整指令×××
○×○DAA压缩型BCD调整指令△○○○○○微机原理与汇编语言第4章8086/8088指令系统和寻址方式2022年11月24日56AAA指令的操作为:(非压缩型BCD码调整)如果(AL)∧0FH>9或
(AF)=1则(AL)←(AL)+06H(AH)←(AH)+1(AF)←1(CF)←(AF)(AL)←((AL)∧0FH)否则(AL)←((AL)∧0FH)DAA指令的操作为:(压缩型BCD码调整)如果(AL)∧0FH>9,(AF)=1则(AL)←(AL)+06
H(AF)←1如果(AL)>9FH或(CF)=1则(AL)←(AL)+60H(CF)←1微机原理与汇编语言第4章8086/8088指令系统和寻址方式2022年11月24日57[例]要求计算两个十进制数之和,7+8=?。可用以下指令实现:(非压
缩型BCD码调整)MOVAX,0007H;(AL)=07H,(AH)=00HMOVBL,08H;(BL)=08HADDAL,BL;(AL)=0FHAAA;(AL)=05H,(AH)=01H;(CF)=(AF)=1(压缩型BCD码调
整)MOVAX,0007H;(AL)=07H,(AH)=00HMOVBL,08H;(BL)=08HADDAL,BL;(AL)=0FHDAA;(AL)=15H,(AH)=00H;(CF)=0,(AF)=1微机原理
与汇编语言第4章8086/8088指令系统和寻址方式2022年11月24日58[例]要求计算两个十进制数之和,56+34=?。可用以下指令实现:(压缩型BCD码调整)MOVAX,3456H;(AL)=56H,(AH)=34HADDAL,AH;(AL)=8AHDA
A;(AL)=90H[例]要求计算两个BCD数的ASCII码之和,即‘5’+‘9’=?。可用以下指令实现:(ASCII码调整)MOVAL,‘5’;(AL)=35HADDAL,‘9’;39H,(AL)=6EHMOVAH,0;(AH)=00HAAA;(AH)=01H,(AL)=
04HORAX,3030H;(AX)=3134H,即‘34’微机原理与汇编语言第4章8086/8088指令系统和寻址方式2022年11月24日59(2)减法指令指令格式操作功能标志位影响OSZAPCSUBd
st,src(dst)←(dst)-(src)○○○○○○SBBdst,src(dst)←(dst)-(src)-(CF)○○○○○○DECdst(dst)←(dst)-1○○○○○△NEGdst(dst)←0-(dst)○○○○○1CMPdst,sr
c(dst)-(src)○○○○○○AAS非压缩型BCD调整指令×××○×○DAS压缩型BCD调整指令△○○○○○微机原理与汇编语言第4章8086/8088指令系统和寻址方式2022年11月24日60AA
S指令的操作为:(非压缩型BCD码调整)如果(AL)∧0FH>9或(AF)=1则(AL)←(AL)-06H(AH)←(AH)-1(AF)←1(CF)←(AF)(AL)←((AL)∧0FH)否则(AL)←((AL)∧0F
H)DAS指令的操作为:(压缩型BCD码调整)如果(AL)∧0FH>9,(AF)=1则(AL)←(AL)-06H(AF)←1如果(AL)>9FH或(CF)=1则(AL)←(AL)-60H(CF)←1微机原理与汇编语言第4章8086/8088指令系统和寻址方式2022年11月
24日61[例]要求计算两个十进制数之差,86-7=?。可用以下指令实现:(非压缩型BCD码)MOVAX,0806H;(AH)=08H,(AL)=06HSUBAL,07H;(AX)=08FFHAAS;(AX)=0709H[例]要求计算两个十进制数之差,134-56=?。可用
以下指令实现:(压缩型BCD码)MOVAX,5634H;(AH)=56H,(AL)=34HSUBAL,AH;(AL)=DEH,有借位DAS;(AL)=78H微机原理与汇编语言第4章8086/8088指令系统和寻址方式202
2年11月24日62(3)乘法指令指令格式操作功能标志位影响OSZAPCMULsrc(AX)←(AL)×(src)(DX:AX)←(AX)×(src)○××××○IMULsrc(AX)←(AL)×(src)(DX:AX)
←(AX)×(src)○××××○AAMBCD调整指令×○○×○×AL源操作数AL×AHAX源操作数AXDX×微机原理与汇编语言第4章8086/8088指令系统和寻址方式2022年11月24日63AA
M指令的操作为:(将二进制数转换成十进制数)(AH)←(AL)/0AH的商;即AL除以10,商送AH(AL)←(AL)/0AH的余;即AL除以10,余数送AL例:要求进行以下十进制乘法运算:79=?解:可编程序段如下:MOVAL,07H;(AL)=07HMOVBL,09H;
(BL)=09HMULBL;(AX)=07H09H=003FHAAM;(AH)=06H,(AL)=03H微机原理与汇编语言第4章8086/8088指令系统和寻址方式2022年11月24日64(4)除法指令指令格式操作功能标志位影响OSZAPCDIVsrc(AL)←
(AX)/(src)的商(AH)←(AX)/(src)的余数(AX)←(DX:AX)/(src)的商(DX)←(DX:AX)/(src)的余数××××××IDIVsrc(AL)←(AX)/(src)的商(AH)←(AX)/(src)的余数(AX)←(
DX:AX)/(src)的商(DX)←(DX:AX)/(src)的余数××××××CBW若(AL)<80H,则(AH)←00H,否则(AH)←FFH△△△△△△CWD若(AX)<8000H,则(DX)←0000H,否则(DX)←FFFFH△△△△△△AADBCD
调整指令×○○△○×微机原理与汇编语言第4章8086/8088指令系统和寻址方式2022年11月24日658086/8088CPU执行除法时规定:除数只能是被出数的一半字长。当被除数为16位时,除数应为8位;当被除数为32位时,除数应为1
6位。AL源操作数AXAHAXAX源操作数DXDX商商余数余数8位16位16位32位除数除数被除数被除数微机原理与汇编语言第4章8086/8088指令系统和寻址方式2022年11月24日66AAD指令的操作为:(十进制数转换成二进制数)(AL)←(AH)0AH+(AL)(A
H)←0例:要进行以下十进制除法运算:73÷2=?解:可编程序段如下:MOVAH,07H;(AH)=07HMOVAL,03H;(AL)=03HMOVBL,02H;(BL)=02HAAD;(AL)=49
H(即十进制数73)DIVBL;(AL)=24H(商),(AH)=01H(余数)AAM;(AH)=03H,(AL)=06H微机原理与汇编语言第4章8086/8088指令系统和寻址方式2022年11月24日674.3.3位操作类指令位
操作指令是对8位或16位的寄存器或存储单元中的内容按位进行操作。这一类指令包括逻辑运算指令、移位指令和循环移位指令等三组。1.逻辑运算指令逻辑运算类指令与算术运算指令不同,算术指令是按字节或字进行算术运算,而逻辑运算指令是把操作数按位来进行逻辑运算。微机原理与汇编语言第4
章8086/8088指令系统和寻址方式2022年11月24日68指令格式操作功能标志位影响OSZAPCANDdst,src(dst)←(dst)(src)0○○×○0ORdst,src(dst)←(dst)(src)0○○×○0NOTdst
(dst)←(dst)(dst)←0FFH-(dst)(dst)←0FFFFH-(dst)△△△△△△XORdst,src(dst)←(dst)(src)0○○×○0TESTdst,src(dst)(src)0○○×○0说明:TEST相当于AND运算,但是不保存结果
,仅影响标志。微机原理与汇编语言第4章8086/8088指令系统和寻址方式2022年11月24日69常见的用法举例:①清进位标志位:ANDAX,AX或ORAL,AL等。②清零操作数:XORAX,AX不仅把AX清零,而且也影响了状态标志。③把某几位取反:用XOR指令,把要取反的位和1异或,
不变的位和0异或。④清零或置位某几位:用AND指令清零,用OR指令置位。微机原理与汇编语言第4章8086/8088指令系统和寻址方式2022年11月24日702.移位指令该类指令的使用方法是:①移动1位,用类似于SHLAX,1的格式②移动n位,用类似于SHLAX,CL的
格式指令格式操作功能标志位影响OSZAPCSHLdst,1SHLdst,CL○×○○○○××○○○○SALdst,1SALdst,CL○×○○○○××○○○○SHRdst,1SHRdst,CL○×○○○○××○○○○SARdst,1SARdst,CL○×○○○○×
×○○○○CFdstCF0dstCF0dstCF0dst微机原理与汇编语言第4章8086/8088指令系统和寻址方式2022年11月24日71说明:①逻辑移位适用于无符号数,算术移位适用于有符号数。②逻辑左移和算术左移的机器
码完全相同,是助记符的两种写法。微机原理与汇编语言第4章8086/8088指令系统和寻址方式2022年11月24日72说明:循环移位常用来变换数据格式。指令格式操作功能标志位影响OSZAPCROLdst,1ROLdst,CL○×○
○○○××○○○○RORdst,1RORdst,CL○×○○○○××○○○○RCLdst,1RCLdst,CL○×○○○○××○○○○RCRdst,1RCRdst,CL○×○○○○××○○○○CFdstCF
dstCFdstCFdst3.循环移位指令微机原理与汇编语言第4章8086/8088指令系统和寻址方式2022年11月24日73使用举例[例一]利用循环移位指令可以对寄存器或存储器中的任一位进行测试。如要测试AL寄存器中的第5位的状态是“0”还是“1”,则
可利用以下指令实现:MOVCL,5;(CL)移位次数RORAL,CL;(CF)AL的第5位JNCZERO;若(CF)=0,转ZARO;否则ZERO:微机原理与汇编语言第4章8086/8088指令系统和寻址方式2022年11
月24日74[例二]利用带进位循环移位指令可以实现将两个以上寄存器或存储器单元组合起来一起移位。如DX和AX两个寄存器组成的32位数乘以2,可用以下两条指令实现:SHLAX,1;AX左移1位,(CF)AX的最高位RCLDX,1;DX带进位左移1位,DX的最
低位(CF)具体操作如下图:CFDXAX0②RCLDX,1①SHLAX,1微机原理与汇编语言第4章8086/8088指令系统和寻址方式2022年11月24日754.3.4.串操作指令串操作指令的特征是对数据块,也称数据串(字符串或数值串)进行操作。其操作数为隐含操作数,并且其中部分指令的两个
操作数可以同时是存储器操作数。串传送MOVS(Movestring)串比较CMPS(Comparestring)串扫描SCAS(Scanstring)串装入LODS(Loadfromstring)串保存STOS(Storeintostri
ng)微机原理与汇编语言第4章8086/8088指令系统和寻址方式2022年11月24日76说明:⑴串操作指令每次执行完成一个字节或一个字的操作。⑵通常使用重复前缀来自动完成一个数据块(数据串)的操作。重复前缀:⑴REP重复⑵REPE/REPZ相等/为零则重复⑶REPNE/
REPNZ不相等/不为零则重复微机原理与汇编语言第4章8086/8088指令系统和寻址方式2022年11月24日77特点:⑴串操作指令需要指明每次操作的数据串数据的类型:B-表示字节串,W-表示字串。例如:MOVSB,CMPSW等。⑵串操作指令使用DS:SI作为源操作数的指针;ES:DI作为目的操
作数的指针⑶使用DF来表示每次操作以后变址寄存器SI和DI的变化方向:CLD;DF=0SI,DI做增量变化B:+1或W:+2STD;DF=1SI,DI做减量变化B:-1或W:-2⑷使用CX来表示用重复前缀以后指令需要重复执行的次数(通常是数据串的长度)微机原理与汇编
语言第4章8086/8088指令系统和寻址方式2022年11月24日78指令格式操作功能标志位影响OSZAPCMOVSDstring,SstringMOVSBMOVSW((ES):(DI))((DS):(SI))(SI)(SI)1或(SI)(SI)2(DI)(DI)1或(DI
)(DI)2△△△△△△LODSSstringLODSBLODSW(AL)/(AX)((DS):(SI))(SI)(SI)1或(SI)(SI)2△△△△△△STOSDstringSTOSBSTOSW(
(ES):(DI))(AL)/(AX)(DI)(DI)1或(DI)(DI)2△△△△△△CMPSSstring,DstringCMPSBCMPSW((DS):(SI))-((ES):(DI))(SI)(SI)1或(SI)(SI)2(DI)(DI)1或(DI
)(DI)2○○○○○○SCASDstringSCASBSCASW(AL)-((ES):(DI))(DI)(DEI)1或(DI)(DI)2○○○○○○微机原理与汇编语言第4章8086/8088指令系统和寻址方式2022年11月24日79指令前缀适用的指令操作功能标志位影响OSZAP
CREPMOVSSTOS(CX)0△△△△△△REPZ/REPEREPNZ/REPNECMPSSCAS(CX)0且(ZF)=1(CX)0且(ZF)=0○○○○○○微机原理与汇编语言第4章8086/8088指令系统和寻址方式2022年11月24日804.3.5控制转移类指令能够使程序的
执行流程发生改变的指令(1)无条件转移指令JMP指令名称指令格式指令功能转移范围段内直接短转移JMPdisp8(IP)(IP)+disp8-128~+127段内直接近转移JMPdisp16(IP)(IP)+disp16-32K~+32K段内间接转移JMPme
m/reg(IP)(mem)(IP)(reg)-32K~+32K段间直接转移JMPaddr(IP)偏移地址(CS)段地址-32K~+32K段间间接转移JMPmem(IP)(mem)(CS)(mem)+2-32K~+32K微机原理与汇编语言第4章8086
/8088指令系统和寻址方式2022年11月24日81(2)条件转移指令Jcc根据判断条件是否成立决定是否转移(即条件成立则转移,否则不转移)。按照判断条件的不同条件转移指令可分为以下类型:单个标志判断指令、无符号数判断指令、有符号数判断指令和CX寄存器判断指令。条件转移都是段内直接短转移,
即(IP)=(IP)+Data8类型的转移。微机原理与汇编语言第4章8086/8088指令系统和寻址方式2022年11月24日82指令格式指令功能测试条件说明JE/JZdisp(IP)(IP)+(disp)(ZF)=1单标志测试JNE/JNZdisp(IP)(IP)+(disp)(ZF
)=0JSdisp(IP)(IP)+(disp)(SF)=1JNSdisp(IP)(IP)+(disp)(SF)=0JP/JPEdisp(IP)(IP)+(disp)(PF)=1JNP/JPOdisp(IP)(IP)+(disp)(PF)=0JOdisp(IP)(IP)+(disp)(
OF)=1JNOdisp(IP)(IP)+(disp)(OF)=0JCdisp(IP)(IP)+(disp)(CF)=1JNCdisp(IP)(IP)+(disp)(CF)=0微机原理与汇编语言第4章8086/8088指令系统和寻址方式2022年11月24日83指令
格式指令功能测试条件说明JB/JNAEdisp(IP)(IP)+(disp)(CF)=1无符号数测试A:高于B:低于E:等于JAE/JNBdisp(IP)(IP)+(disp)(CF)=0JA/JNBEdisp(IP)(IP)+(disp)(CF)=
0且(ZF)=0JBE/JNAdisp(IP)(IP)+(disp)(CF)=0或(ZF)=0JG/JNLEdisp(IP)(IP)+(disp)(SF)=(OF)且(ZF)=0带符号数测试G:大于L:小于E:等于JGE/JNLdisp(IP)(IP)+(d
isp)(SF)=(OF)JL/JNGEdisp(IP)(IP)+(disp)(SF)(OF)且(ZF)=0JLE/JNGdisp(IP)(IP)+(disp)(SF)(OF)或(ZF)=1JCXZdisp(IP)(IP)+(disp)(CX)=0CX寄存器测试微机原理与汇编
语言第4章8086/8088指令系统和寻址方式2022年11月24日84(3)循环控制指令循环控制指令的转移也都是段内直接短转移,即(IP)←(IP)+Data8类型的转移。指令名称指令格式指令功能测试
条件(CX)0循环LOOPdisp8(CX)(CX)-1当(CX)0则(IP)(IP)+disp8(CX)0为零或相等循环LOOPZdisp8LOOPEdisp8(CX)(CX)-1当(CX)0且(ZF)=1则(IP)(IP)+d
isp8(CX)0且(ZF)=1非零或不等循环LOOPNZdisp8LOOPNEdisp8(CX)(CX)-1当(CX)0且(ZF)=0则(IP)(IP)+disp8(CX)0且(ZF)=0微机原理与汇编语言第4章8086/8088指令系统和寻址方式2022
年11月24日85说明:①程序转移类指令都不影响状态标志。②如果条件转移指令和循环控制指令的目标地址的位移量超出了Data8所能够表示的范围,则需要用五条件转移指令JMP辅助来完成转移和循环。微机原理与汇编语言第4章808
6/8088指令系统和寻址方式2022年11月24日86(4)过程调用与返回指令过程(子程序)通常是一个完整的、独立的有一定名称(标号)的程序段,它可以多次被调用,并在这个程序段执行完后可返回到原先调用的程序处。过程执行的过程分为三步:①过程调用(即从主程序转移到过程的首地址)
,用CALL指令。②执行过程③返回(即从过程转移到主程序),用RET指令。微机原理与汇编语言第4章8086/8088指令系统和寻址方式2022年11月24日87主程序过程SUBP1PROCNEARSTART:CALLSUBP1MOVAL,01HCALLSUBP1MOVAX,AXRETHL
TSUBP1ENDP……………………………微机原理与汇编语言第4章8086/8088指令系统和寻址方式2022年11月24日88指令名称指令格式操作功能段内直接调用CALLdisp16①(SP)←(SP)-2,((SP)+1:(SP))←(IP)②(IP)←(IP)+disp16(带符号数)段内
间接调用CALLMEM/REG①(SP)←(SP)-2,((SP)+1:(SP))←(IP)②(IP)←(EA)段间直接调用CALLaddr32①(SP)←(SP)-2,((SP)+1:(SP))←(CS)②(SP)←(S
P)-2,((SP)+1:(SP))←(IP)③(IP)←addr的偏移地址④(CS)←addr的段地址段间间接调用CALLMEM①(SP)←(SP)-2,((SP)+1:(SP))←(CS)②(SP)←(SP)-2,((SP)+1:(SP))←(IP)③(IP)←
((EA))④(CS)←((EA)+2)微机原理与汇编语言第4章8086/8088指令系统和寻址方式2022年11月24日89指令名称指令格式操作功能段内过程返回RET①(IP)←((SP)+1:(SP))②(SP)←(SP)+2RETdisp16①(IP)←((SP)+1
:(SP))②(SP)←(SP)+2③(SP)←(SP)+disp16(偶数值)段间过程返回RET①(IP)←((SP)+1:(SP)),(SP)←(SP)+2②(CS)←((SP)+1:(SP)),(SP)←(SP)+2RETdisp16①(IP)←((SP)+
1:(SP)),(SP)←(SP)+2②(CS)←((SP)+1:(SP)),(SP)←(SP)+2③(SP)←(SP)+disp16(偶数值)微机原理与汇编语言第4章8086/8088指令系统和寻址方式2022年11月24日904.3.6处理器控制类指令这一类指令用于对CPU进行控制,
例如对CPU中某些状态标志位的状态进行操作,以及使CPU暂停、等待等等。8086/8088指令系统的处理器控制指令可分为三组:①标志操作指令②外部同步指令③空操作指令微机原理与汇编语言第4章8086/8088指令系统和寻址方式2022年11月24日91种类指令格式指令功能标志操作进位标
志操作CLCSTCCMC(CF)←0进位标志清0(CF)←1进位标志置1(CF)←(CF)进位标志取反方向标志操作CLDSTD(DF)←0方向标志清0(DF)←1方向标志置1中断标志操作CLISTI(I
F)←0中断标志清0(IF)←1中断标志置1外部同步HLTWAITESCLOCK暂停等待交权总线封锁空操作NOP空操作