- 1.86 MB
- 2022-04-29 14:37:23 发布
- 1、本文档共5页,可阅读全部内容。
- 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,可选择认领,认领后既往收益都归您。
- 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细先通过免费阅读内容等途径辨别内容交易风险。如存在严重挂羊头卖狗肉之情形,可联系本站下载客服投诉处理。
- 文档侵权举报电话:19940600175。
'微型计算机第4章课件
1.18086/8088指令系统计算机是通过执行指令序列来完成用户的特定任务的,因此每种计算机都有一组指令集供用户使用。这组指令集就称为计算机的指令系统。指令系统中的每一条指令都对应着微处理器要完成的一种规定的操作,这在设计微处理器时就事先规定好了,所以指令系统是表征一台计算机性能的重要因素,它的格式与规模将直接影响到机器的硬件结构。指令系统是程序员编写程序的基础,因此很好地掌握指令系统的有关知识是后续进一步学习的关键。Monday,November22,2021
⑷操作数来自或送到I/O端口。这种操作数叫I/O操作数。在8086/8088系统中,操作数又可分为两大类:数据操作数和地址操作数。因此,寻址方式也分为数据寻址方式和地址寻址方式两大类。1.数据的寻址方式对于数据操作数,有四种形式:①无操作数②单操作数:可以是源操作数,也可以是目的操作数。Monday,November22,2021
③双操作数:一个是源操作数,一个是目的操作数。④隐含操作数:可能隐含一个操作数(源或目的),也可能隐含两个操作数。源操作数:在操作过程中其值不变的操作数。(可以提供数据的操作数)目的操作数:在操作后可被操作结果代替的操作数。(可以接收数据的操作数)1)立即数寻址方式例如:MOVAL,80HMOVAX,1234HMonday,November22,2021
AL操作码字节80H程序存储器指令码操作码字节12H程序存储器AL指令码AH34H12H34H80H80H12H34HMOVAL,80HMOVAX,1234HMonday,November22,2021
2)寄存器寻址方式例如:INCCXMOVAX,CX89C1程序存储器AXCX指令码(包括操作数)Monday,November22,2021
3)存储器寻址方式存储器寻址方式的操作数存放在存储器单元中。因此,要存取操作数就必须知道其存储器的单元地址。在指令中可以直接给出或间接给出操作数的地址,以达到存取操作数的目的。指令中给出的地址只是操作数的有效地址(EA),并且是放在方括号(“[]”)中。若要从存储器中存取操作数还须得到实际的地址(物理地址)。物理地址=段地址左移四位+有效地址物理地址=CSDSSSES×10H+EAMonday,November22,2021
有效地址可以由以下三种地址分量组成:●位移量:它是存放在指令中的一个8位或16位的带符号数。●基址:它是存放在基址寄存器BX或BP中的内容。●变址:它是存放在变址寄存器SI或DI中的内容。对于某条具体指令,这三个地址分量可有不同的组合。正是因为这三种地址分量有不同的组合,才使得对存储器操作数的寻址产生了若干种不同的方式。Monday,November22,2021
⑴直接寻址方式MOVAL,[1064H]DS:20000H20000H21064H21064HAL操作码641045…代码段数据段4545+1064HEA=16位dispMonday,November22,2021
5040……MAX⑵寄存器间接寻址MOVAX,[SI]MOV[BX],AL30000HDS:30000HSI:2000H+32000H32000H40505040……64HMAL30000HDS:30000HBX:1000H+31000H31000H64H64HMOVAX,[SI]MOV[BX],ALEA=(BX)(DI)(SI)Monday,November22,2021
⑶寄存器相对寻址22064H22064H641045…代码段数据段操作码…CL4545+1064H21000HBX:1000HDS:20000H20000HEA=(BX)(BP)(DI)(SI)+8位disp16位dispMOVCL,[BX+1064H]Monday,November22,2021
⑷基址加变址寻址方式MOVAH,[BP][SI]56H……MAH40000HSS:40000HBP:2000H+43200H43200HSI:1200H56H56HEA=(BX)(BP)+(DI)(SI)Monday,November22,2021
⑸基址加变址相对寻址MOV[BX+DI+1234H],AHEA=(BX)(BP)+(DI)(SI)+8位disp16位disp3412…代码段数据段操作码…45AH40000HDS:40000HBX:0200H+DI:0010H1234H454541444H41444HMonday,November22,2021
4)I/O端口寻址方式⑴直接端口寻址方式INAL,21H21HAL操作码21H代码段80……01H02HI/O接口8080Monday,November22,2021
⑵间接端口寻址方式OUTDX,AL……0001H0002HI/O接口80AL1234DX1234H8080Monday,November22,2021
2.地址的寻址方式地址的寻址方式其时是程序转移地址的寻址方式,也就是找出程序转移的地址号,而不是操作数。转移地址可以在段内(称段内转移),也可以跨段(称段间转移)。寻求转移地址的方法有以下四种:1)段内直接寻址转移的地址是当前IP内容和指令规定的8位或16位位移量之和。当位移量是8位时,称为短程转移;位移量是16位时称为近程转移。Monday,November22,2021
这种寻址方式适用于条件转移或无条件转移类指令。但条件转移只有8位位移量的短程转移。+当前IPEA有效转移地址opcode位移量PM(CS)×10H+EA位移量Monday,November22,2021
例:JMPSHORTALPHA本例指令是一无条件转移指令,指令采用了段内直接寻址方式。符号地址ALPHA代表位移量。设ALPHA=20H,开始执行该指令时,(CS)=1500H,(IP)=3200H,于是该指令在存储器中的起始地址为:15000H+3200H=18200HOP20H存储器15000H18200H18201H18202H18222H20H当前代码段首地址JMPSHORTALPHA转移地址而转移有效地址为:EA=当前(IP)+ALPHA=3202H+20H=3222H转移物理地址为:PA=15000H+3222H=18222H执行完这条指令后,IP的内容变成3222H(不再是3202H),CPU将转移到存储单元地址18222H中去取指令来执行。Monday,November22,2021
2)段内间接寻址方式程序转移的地址存放在寄存器或存储器单元中。指令执行使用寄存器或存储器单元的内容来更新IP的内容。寄存器IPDMIP例如:JMPBXJMPWORDPTRADDRJMPWORDPTR[BX+ARRY]Monday,November22,2021
例:JMPWORDPTRBETA本指令是无条件转移指令,可使程序转移到根据BETA指示的内存单元中取出的偏移地址开始执行指令。指令采用的是段内间接寻址方式。指令的操作数地址是一个符号地址BETA,所以可用数据寻址方式中的直接寻址方式得到存储转移偏移地址的内存单元地址。设当前(CS)=0120H,(IP)=2400H,BETA=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转移地址00H27H01H200002010020101数据区首地址036032700HIPMonday,November22,2021
3)段间直接寻址方式这种寻址方式是指令码中直接给出16位的段地址和16位的偏移地址用来更新当前的CS和IP内容。opcodePM段地址偏移量IPCSMonday,November22,2021
OP00H40H存储器2000021000210012100230000当前代码段首址JMPFARPTRGAMMA转移代码段首地址00H34000转移地址2100330H21004例:JMPFARPTRGAMMA本例指令为无条件转移指令,采用段间直接寻址方式。设当前(CS)=2000H(IP)=1000HGAMMA=3000:4000则本指令的起始地址为:20000H+1000H=21000H转移物理地址为:PA=30000H+4000H=34000H执行完这条指令后,CS的内容变成3000H,IP的内容变成4000H,从而程序转移到存储单元34000H开始执行。Monday,November22,2021
4)段间间接寻址方式这种寻址方式是由指令码的寻址方式字节求出存放转移地址的连续两个字的地址。其低位字地址单元中存放的是偏移地址,高位字地址单元中存放的是转移段地址。DMCSIP段地址偏移量Monday,November22,2021
例:JMPDWORDPTRDELTA[BX]本例指令是无条件转移指令,采用段间间接寻址方式。设当前(CS)=1000H,(IP)=0100H,(DS)=2000H,(BX)=3000H,DELTA=0040H,(23040H)=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开始执行。Monday,November22,2021
OPOP40H存储器1000010100101011010230000当前代码段首地址JMPDWORDPTRDELTA[BX]转移代码段首地址00H35000转移地址10103…00H50H23040230412304200H2304330H20000数据段首地址…………IPCS5000H3000H指令执行前:(CS)=1000H(IP)=0100H(DS)=2000H(BX)=3000HDELTA=0040H指令执行后:(CS)=3000H(IP)=5000HMonday,November22,2021
opcodePM段地址偏移量IPCSDMCSIP段基址偏移量段间间接寻址方式段间直接寻址方式段间直接和间接寻址的区别Monday,November22,2021
4.1.38086/8088指令系统8086/8088指令系统大致可分为六大类指令:数据传送类指令算术运算类指令位操作类指令串操作类指令程序控制类指令处理器控制类指令学习指令系统着重要掌握指令的基本操作功能、合法的寻址方式及其对状态标志位的影响。Monday,November22,2021
1.数据传送类指令数据传送指令的主要功能是传送数据、地址和标志。可分为通用数据传送指令、输入输出指令、地址传送指令和标志传送指令。(1)通用数据传送指令通用数据传送指令可完成字节或字数据的传送。它可分为数据传送指令、堆栈操作指令、数据交换指令和字节转换指令。1)数据传送指令指令格式:MOVdst,src;(dst)←(src)src表示源操作数(字/字节)立即数操作数寄存器操作数(包括段寄存器)存储器操作数dst表示目的操作数(字/字节)寄存器操作数(不包括IP,CS段寄存器)存储器操作数Monday,November22,2021
段寄存器CSDSSSES存储器通用存储器AXBXCXDXBPSPSIDIALBLCLDLAHBHCHDHMOV指令数据传送方向16位8/16位8/16位16位8/16位指令功能:将源操作数传送(复制)到目的操作数。传送方向:如下图所示。立即数Monday,November22,2021
2)堆栈操作指令堆栈操作指令是用来完成压入和弹出堆栈操作的。8086/8088指令系统中提供了完成这两种操作的相应指令。①压入堆栈指令指令格式及操作:PUSHsrc;(SP)←(SP)-2,;((SP)+1:(SP))←(src)src表示源操作数(字)寄存器操作数(包括段寄存器)存储器操作数Monday,November22,2021
注意:堆栈指令的操作数只能是字操作数(即16位操作数),且不能是立即数。进栈操作(PUSH):先移后进出栈操作(POP):先出后移②弹出堆栈指令指令格式及操作:POPdst;(dst)←((SP)+1:(SP)),;(SP)←(SP)+2dst表示目的操作数(字)寄存器操作数(不包括IP,CS段寄存器)存储器操作数Monday,November22,2021
3)交换指令指令格式及操作:XCHGopr1,opr2;(opr1)←→(opr2)注意:交换指令的两个操作数可以是寄存器操作数,存储器操作数,但都不能是立即数操作数,也不能同时为存储器操作数;寄存器操作数是指通用寄存器,不包括段寄存器。也就是说,交换指令是完成寄存器与寄存器、寄存器与存储器之间的数据互换功能。交换的两个数据可以是8位的,也可以是16位的。Monday,November22,2021
4)字节转换指令指令格式及操作:XLATsrc_table;(AL)←((BX)+(AL))XLAT指令是用来将一种字节代码转换成另一种字节代码。即将BX的内容(代码表格首址src_table)和AL的内容(表格偏移量)相加作为有效地址。并从中读出此内存表格地址单元的内容传送到AL累加器中。XLAT指令还可以有以下几种表示形式:XLAT;不写操作数XLATB;有B就不允许再写操作数。XLATES:src_table;重设段寄存器为ESMonday,November22,2021
[例]在内存的数据段有一张16进制数的ASCII码表,其首地址为Hex_table,如下图所示,为欲将十六进制数0AH转换成ASCII码,则可用以下几条指令实现:MOVBX,OFFSETHex_tale;(BX)←表首址MOVAL,0AH;(AL)←十六进制数AXLATHex_table;查表转换61000H61001H61002H6100AH6100BH6100FH60000HDS:60000HBX:1000HAX:000AH+6100AHHex_tableHex_table+1Hex_table+2Hex_table+AHex_table+BHex_table+FASCII表31H32H41H42H30H46H………0AHALEA6100AH41H41HASCII表Hex_table=1000HMonday,November22,2021
(2)输入/输出指令输入输出指令可以分为两大类:一类是直接端口地址的输入/输出指令;一类是通过DX寄存器间接端口地址的输入/输出指令。1)输入指令①直接寻址的输入指令指令格式及操作:INacc,port;(acc)←(port)其中:acc为8位或16位累加器AL/AX。port为8位端口地址,故可寻址256个端口。Monday,November22,2021
②间接寻址的输入指令指令格式及操作:INacc,DX;(acc)←((DX))其中:acc为8位或16位累加器AL/AX。DX为16位间接寻址的端口地址寄存器,故可寻址64K个端口。2)输出指令①直接寻址的输出指令指令格式及操作:OUTport,acc;(port)←(acc)Monday,November22,2021
②间接寻址的输出指令指令格式及操作:OUTDX,acc;(DX)←((acc))Monday,November22,2021
(3)地址传送指令1)取有效地址指令指令格式:LEAreg16,mem此指令的功能是将存放源操作数的16位偏移地址(即有效地址EA)送到一个16位的通用寄存器中。即源操作数必须是一个存储器操作数,目的操作数必须是一个寄存器操作数。例如:LEABX,bufferLEAAX,[BP][DI]LEADX,bety[BX][SI]Monday,November22,2021
注意LEA指令和MOV指令的异同,比较下面两组指令:不同:LEABX,buffer;将存储器buffer的偏移地址送到BXMOVBX,buffer;将存储器buffer的内容传送到BX相同:LEABX,bufferMOVBX,OFFSETbuffer以上两条指令都是将存储器buffer的偏移地址送到BX。其中OFFSETbuffer表示存储器偏移地址。Monday,November22,2021
2)地址指针装入DS指令指令格式:LDSreg16,mem32此指令的功能是将源操作数所对应的双字长的内存单元中的高字内容(一般为16位段基址)送入DS,低字内容(一般为偏移地址)送入指令所指定的寄存器中。例如:LDSDI,[2130H]34H12H00H40H2130H2132HDMDIDS1234H4000HMonday,November22,2021
3)地址指针装入ES指令指令格式:LESreg16,mem32此指令的功能是将源操作数所对应的双字长的内存单元中的高字内容(一般为16位段基址)送入ES,低字内容(一般为偏移地址)送入指令所指定的寄存器中。例如:LESDI,[2130H]34H12H00H40H2130H2132HDMDIES1234H4000HMonday,November22,2021
(4)标志传送指令1)取标志指令指令格式:LAHF2)置标志指令指令格式:SAHFOFDFIFTFSFZFAFPFCFFLAGAHLAHF和SAHF指令操作示意图Monday,November22,2021
3)标志压入堆栈指令指令格式及操作:PUSHF;(SP)←(SP)-2,((SP)+1;(SP))←(FLAG)4)标志弹出堆栈指令指令格式及操作:POPF;(FLAG)←((SP)+1;(SP)),(SP)←(SP)+2Monday,November22,2021
在使用这些传送类指令时应注意以下几点:①目的操作数不能为立即数。②目的操作数为段寄存器(CS不能作为目的操作数),源操作数不能为立即数。③源操作数为非立即数时,两操作数之一必须为寄存器操作数。④操作数类型必须一致。⑤用BX、SI、DI来间接寻址时,默认的段寄存器为DS;用BP来间接寻址时,默认的段寄存器为SS。Monday,November22,2021
⑥对于堆栈操作,源操作数不能为立即数;CS寄存器的值可以压入堆栈,但反之则不允许。⑦数据交换指令的两个操作数任一都不能是立即数。⑧换码指令的操作数是一种特殊的基址变址寻址方式,基址寄存器为BX,变址寄存器为AL。⑨除了SAHF和POPF指令外,其余指令都不会影响标志。Monday,November22,2021
2、算术运算类指令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寄存器Monday,November22,2021
(1)加法指令在微处理器中,没有专用的BCD码运算指令,使用二进制运算指令进行BCD码数的运算,然后用BCD码运算调整指令进行调整,重新得到BCD码的结果。指令格式操作功能标志位影响OSZAPCADDdst,src(dst)←(dst)+(src)○○○○○○ADCdst,src(dst)←(dst)+(src)+(CF)○○○○○○INCdst(dst)←(dst)+1○○○○○△AAAASCII码调整指令×××○×○DAA压缩型BCD调整指令△○○○○○Monday,November22,2021
AAA指令的操作为:(非压缩型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)+06H(AF)←1如果(AL)>9FH或(CF)=1则(AL)←(AL)+60H(CF)←1Monday,November22,2021
[例]要求计算两个十进制数之和,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)=1Monday,November22,2021
[例]要求计算两个十进制数之和,56+34=?。可用以下指令实现:(压缩型BCD码调整)MOVAX,3456H;(AL)=56H,(AH)=34HADDAL,AH;(AL)=8AHDAA;(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’Monday,November22,2021
(2)减法指令指令格式操作功能标志位影响OSZAPCSUBdst,src(dst)←(dst)-(src)○○○○○○SBBdst,src(dst)←(dst)-(src)-(CF)○○○○○○DECdst(dst)←(dst)-1○○○○○△NEGdst(dst)←0-(dst)○○○○○1CMPdst,src(dst)-(src)○○○○○○AAS非压缩型BCD调整指令×××○×○DAS压缩型BCD调整指令△○○○○○Monday,November22,2021
AAS指令的操作为:(非压缩型BCD码调整)如果(AL)∧0FH>9或(AF)=1则(AL)←(AL)-06H(AH)←(AH)-1(AF)←1(CF)←(AF)(AL)←((AL)∧0FH)否则(AL)←((AL)∧0FH)DAS指令的操作为:(压缩型BCD码调整)如果(AL)∧0FH>9,(AF)=1则(AL)←(AL)-06H(AF)←1如果(AL)>9FH或(CF)=1则(AL)←(AL)-60H(CF)←1Monday,November22,2021
[例]要求计算两个十进制数之差,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)=78HMonday,November22,2021
(3)乘法指令指令格式操作功能标志位影响OSZAPCMULsrc(AX)←(AL)×(src)(DX:AX)←(AX)×(src)○××××○IMULsrc(AX)←(AL)×(src)(DX:AX)←(AX)×(src)○××××○AAMBCD调整指令×○○×○×AL源操作数AL×AHAX源操作数AXDX×Monday,November22,2021
AAM指令的操作为:(将二进制数转换成十进制数)(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)=03HMonday,November22,2021
(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调整指令×○○△○×Monday,November22,2021
8086/8088CPU执行除法时规定:除数只能是被出数的一半字长。当被除数为16位时,除数应为8位;当被除数为32位时,除数应为16位。AL源操作数AXAHAXAX源操作数DXDX商商余数余数8位16位16位32位除数除数被除数被除数Monday,November22,2021
AAD指令的操作为:(十进制数转换成二进制数)(AL)←(AH)0AH+(AL)(AH)←0例:要进行以下十进制除法运算:73÷2=?解:可编程序段如下:MOVAH,07H;(AH)=07HMOVAL,03H;(AL)=03HMOVBL,02H;(BL)=02HAAD;(AL)=49H(即十进制数73)DIVBL;(AL)=24H(商),(AH)=01H(余数)AAM;(AH)=03H,(AL)=06HMonday,November22,2021
3.位操作类指令位操作指令是对8位或16位的寄存器或存储单元中的内容按位进行操作。这一类指令包括逻辑运算指令、移位指令和循环移位指令等三组。(1)逻辑运算指令逻辑运算类指令与算术运算指令不同,算术指令是按字节或字进行算术运算,而逻辑运算指令是把操作数按位来进行逻辑运算。Monday,November22,2021
指令格式操作功能标志位影响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运算,但是不保存结果,仅影响标志。Monday,November22,2021
常见的用法举例:①清进位标志位:ANDAX,AX或ORAL,AL等。②清零操作数:XORAX,AX不仅把AX清零,而且也影响了状态标志。③把某几位取反:用XOR指令,把要取反的位和1异或,不变的位和0异或。④清零或置位某几位:用AND指令清零,用OR指令置位。Monday,November22,2021
(2)移位操作指令该类指令的使用方法是:①移动1位,用类似于SHLAX,1的格式②移动n位,用类似于SHLAX,CL的格式指令格式操作功能标志位影响OSZAPCSHLdst,1SHLdst,CL○×○○○○××○○○○SALdst,1SALdst,CL○×○○○○××○○○○SHRdst,1SHRdst,CL○×○○○○××○○○○SARdst,1SARdst,CL○×○○○○××○○○○CFdstCF0dstCF0dstCF0dstMonday,November22,2021
说明:①逻辑移位适用于无符号数,算术移位适用于有符号数。②逻辑左移和算术左移的机器码完全相同,是助记符的两种写法。Monday,November22,2021
说明:循环移位常用来变换数据格式。指令格式操作功能标志位影响OSZAPCROLdst,1ROLdst,CL○×○○○○××○○○○RORdst,1RORdst,CL○×○○○○××○○○○RCLdst,1RCLdst,CL○×○○○○××○○○○RCRdst,1RCRdst,CL○×○○○○××○○○○CFdstCFdstCFdstCFdstMonday,November22,2021
使用举例[例一]利用循环移位指令可以对寄存器或存储器中的任一位进行测试。如要测试AL寄存器中的第5位的状态是“0”还是“1”,则可利用以下指令实现:MOVCL,5;(CL)移位次数RORAL,CL;(CF)AL的第5位JNCZERO;若(CF)=0,转ZARO;否则ZERO:Monday,November22,2021
[例二]利用带进位循环移位指令可以实现将两个以上寄存器或存储器单元组合起来一起移位。如DX和AX两个寄存器组成的32位数乘以2,可用以下两条指令实现:SHLAX,1;AX左移1位,(CF)AX的最高位RCLDX,1;DX带进位左移1位,DX的最低位(CF)具体操作如下图:CFDXAX0②RCLDX,1①SHLAX,1Monday,November22,2021
4.串操作指令串操作指令的特征是对数据块,也称数据串(字符串或数值串)进行操作。其操作数为隐含操作数,并且其中部分指令的两个操作数可以同时是存储器操作数。串传送MOVS(Movestring)串比较CMPS(Comparestring)串扫描SCAS(Scanstring)串装入LODS(Loadfromstring)串保存STOS(Storeintostring)Monday,November22,2021
说明:⑴串操作指令每次执行完成一个字节或一个字的操作。⑵通常使用重复前缀来自动完成一个数据块(数据串)的操作。重复前缀:⑴REP重复⑵REPE/REPZ相等/为零则重复⑶REPNE/REPNZ不相等/不为零则重复Monday,November22,2021
特点:⑴串操作指令需要指明每次操作的数据串数据的类型: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来表示用重复前缀以后指令需要重复执行的次数(通常是数据串的长度)Monday,November22,2021
指令格式操作功能标志位影响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○○○○○○Monday,November22,2021
指令前缀适用的指令操作功能标志位影响OSZAPCREPMOVSSTOS(CX)0△△△△△△REPZ/REPEREPNZ/REPNECMPSSCAS(CX)0且(ZF)=1(CX)0且(ZF)=0○○○○○○Monday,November22,2021
5.控制转移类指令能够使程序的执行流程发生改变的指令(1)无条件转移指令指令名称指令格式指令功能转移范围段内直接短转移JMPdisp8(IP)(IP)+disp8-128~+127段内直接近转移JMPdisp16(IP)(IP)+disp16-32K~+32K段内间接转移JMPmem/reg(IP)(mem)(IP)(reg)-32K~+32K段间直接转移JMPaddr(IP)偏移地址(CS)段地址-32K~+32K段间间接转移JMPmem(IP)(mem)(CS)(mem)+2-32K~+32KMonday,November22,2021
(2)条件转移指令根据判断条件是否成立决定是否转移(即条件成立则转移,否则不转移)。按照判断条件的不同条件转移指令可分为以下类型:单个标志判断指令、无符号数判断指令、有符号数判断指令和CX寄存器判断指令。条件转移都是段内直接短转移,即(IP)=(IP)+Data8类型的转移。Monday,November22,2021
指令格式指令功能测试条件说明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)=0Monday,November22,2021
指令格式指令功能测试条件说明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)+(disp)(SF)=(OF)JL/JNGEdisp(IP)(IP)+(disp)(SF)(OF)且(ZF)=0JLE/JNGdisp(IP)(IP)+(disp)(SF)(OF)或(ZF)=1JCXZdisp(IP)(IP)+(disp)(CX)=0CX寄存器测试Monday,November22,2021
(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)+disp8(CX)0且(ZF)=1非零或不等循环LOOPNZdisp8LOOPNEdisp8(CX)(CX)-1当(CX)0且(ZF)=0则(IP)(IP)+disp8(CX)0且(ZF)=0Monday,November22,2021
说明:①程序转移类指令都不影响状态标志。②如果条件转移指令和循环控制指令的目标地址的位移量超出了Data8所能够表示的范围,则需要用五条件转移指令JMP辅助来完成转移和循环。Monday,November22,2021
(4)子程序调用与返回指令子程序(过程)通常是一个完整的、独立的有一定名称(标号)的程序段,它可以多次被调用,并在这个程序段执行完后可返回到原先调用的程序处。子程序执行的过程分为三步:①子程序调用(即从主程序转移到子程序的首地址),用CALL指令。②执行子程序③返回(即从子程序转移到主程序),用RET指令。Monday,November22,2021
主程序子程序SUBP1PROCNEARSTART:CALLSUBP1MOVAL,01HCALLSUBP1MOVAX,AXRETHLTSUBP1ENDP……………………………Monday,November22,2021
指令名称指令格式操作功能段内直接调用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)←(SP)-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)Monday,November22,2021
指令名称指令格式操作功能段内子程序返回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(偶数值)Monday,November22,2021
6.处理器控制类指令这一类指令用于对CPU进行控制,例如对CPU中某些状态标志位的状态进行操作,以及使CPU暂停、等待等等。8086/8088指令系统的处理器控制指令可分为三组:①标志操作指令②外部同步指令③空操作指令Monday,November22,2021
种类指令格式指令功能标志操作进位标志操作CLCSTCCMC(CF)←0进位标志清0(CF)←1进位标志置1(CF)←(CF)进位标志取反方向标志操作CLDSTD(DF)←0方向标志清0(DF)←1方向标志置1中断标志操作CLISTI(IF)←0中断标志清0(IF)←1中断标志置1外部同步HLTWAITESCLOCK暂停等待交权总线封锁空操作NOP空操作Monday,November22,2021
'
您可能关注的文档
- 最新循证医学 课程课件PPT课件
- 最新循证医学与疾病预后课件PPT课件
- 最新循证医学课程课件PPT课件
- 最新微分方程与差分方程稳定性课件PPT课件
- 最新微分方程的Matlab求解ppt课件PPT课件
- 最新微创技术在妇科手术中的合理应用-妇产科课件PPT课件
- 最新微型计算机原理与应用课件PPT课件
- 最新微型计算机控制技术任务8直流电机的PWM调速控制ppt课件PPT课件
- 最新微型计算机的基本系统-计算机基础操作课件PPT课件
- 最新微机作业ppt课件PPT课件
- 最新微机原理与接口技术教案ppt课件PPT课件
- 最新微机原理及应用课件PPT课件
- 最新微机原理第三章课件PPT课件
- 最新微机原理课件PPT课件
- 最新微机课程复习纲要ppt课件PPT课件
- 最新微格读写作课件PPT课件
- 最新微波实验课件PPT课件
- 最新微波技术与天线——电磁波导行与辐射工程第二版殷际杰电子教案第四章课件PPT课件