版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第3章 实方式指令寻址与指令系统n3.1 指令的基本指令的基本寻址方式寻址方式n3.2 实方式实方式32位指令寻址位指令寻址 n3.3 实方式指令系统实方式指令系统n3.4 字符设备字符设备I/O功能调用功能调用3.1指令的基本寻址方式 n8086 CPU的指令系统的基本指令包括: 数据传送类指令数据传送类指令 算术运算类指令算术运算类指令 位操作类指令位操作类指令 串操作类指令串操作类指令 控制转移类指令控制转移类指令 处理机控制类指令处理机控制类指令3.1.1指令的基本格式 n大多数数据传送类指令、算术运算类指令、位操作类指令及串操作类指令,其操作数指令有相同的语句格式和操作规定。n指令一
2、般由操作码OP 、寻址方式MOD和一个或多个操作数OD等字段组成。操作码OP寻址方式MOD操作数OD指令的表示形式nPC微机的多数指令有一个或两个操作数,当然也可以没有操作数,常见的表示形式如下:OP 操作数操作数OP 目的操作数目的操作数 源操作数源操作数 OP 示例:n单操作数指令只需指定一个操作数。例如将寄存器AX的内容加1后,其和回送到AX,指令的符号表示形式为: INC AX ; AX+1-AXn双操作数指令需要指定两个操作数.当源操作数和目的操作数进行运算后,多数指令将其结果回送到目的操作数的位置。例如寄存器BX与CX的内容相减后,其差送入BX的指令为: SUB BX,CX ; B
3、X-CX-BXn没有操作数指令,即隐含操作数指令,是指在OD位置虽然未明确给出操作数,但在指令OP中隐含有事先安排的操作数。例如: CLC ; 0-CF3.1.2 寻址方式n立即寻址n寄存器寻址n直接寻址n寄存器间接寻址n寄存器相对寻址n基址变址寻址n相对基址变址寻址立即寻址(Immediate Addressing)n立即寻址方式中,指令操作码和操作数都在存储器代码段中。n汇编格式:n(n为立即操作数,是用8位或16位二进制补码表示的有符号数)n功能:操作数存放在存储器,指令下一单元的内容为立即操作数n。n图形表示: 示例nMOV AX, 10执行后(AX)=?该例中源操作数为立即寻址方式,
4、立即数为10,存放在指令的下一单元。执行:10AX执行后:(AX)=000AH 图形表示:一、立即寻址n指令中的源操作数是立即数,即源操作数是参加操作的数据本身n例:MOV AX,1200H12H00HAH ALMOV代代码码段段 寄存器寻址(Register Addressing)n寄存器寻址方式的操作数在指令指明的寄存器中。功能:操作数直接存放在寄存器中。n图形表示: 寄存器寻址示例: n下列程序执行后,(AX)=?,(BX)=? MOV AX,1234H MOV BX,5678H ADD AX,BXn该程序中MOV指令为数据传送指令操作符,ADD指令为加法指令操作符,三条指令皆为双操作数
5、指令。第一、二条指令AX、BX皆为目的操作数地址,为寄存器寻址方式。第三条指令中,AX为目的操作数地址,BX为源操作数地址。源地址和目的地址皆为寄存器寻址方式。n执行: 1234HAX 5678HBX (AX)+(BX)AXn执行后:(AX)=68ACH,(BX)=5678Hn图形表示:寄存器寻址示例(续): 直接寻址(Direct Addressing)n指令操作码OP后直接给出操作数的16位偏移地址EA。OP与直接地址在代码段,操作数据一般在数据段。n功能:指令下一字单元的内容是操作数的偏移地址EA。n图形表示:直接寻址示例: n寄存器和存储器内容为:(AX)=1212H,BUF为数据段定
6、义的变量,其偏移地址是2000H,(DS)=3000H,(32000H)=4545H。执行指令:MOV AX ,BUF执行后:(AX)=?执行:(32000H)AX执行后:(AX)=4545H图形表示:二、直接寻址n指令中直接给出操作数的偏移地址n例:MOV AX,1200H22H11H1200H偏移地址偏移地址 数数据据段段AH AL直接寻址n直接寻址方式下,操作数的段地址默认为数据段,但允许段重设,即由指令定义段。n例:MOV AX,ES:1200H寄存器间接寻址(Register Indirect Addressing)n寄存器间接寻址方式中,寄存器R的内容为操作数的偏移地址EA,操作数
7、在存储器中,即:EA=BX / BP / DI / SI功能:操作数存放在存储器,寄存器R存放操作数的偏移地址EA。偏移地址EA计算方法如下:EA=SISI作变址寄存器。 DIDI作变址寄存器。BX BX作基址寄存器。BP BP作基址寄存器。【例】寄存器和存储器内容分别为:(AX)=0,(BP)=0030H,(SS)=2000H,(20030H)=1234Hn执行指令:MOV AX ,BP n执行后:(AX)=?,(BP)=?,(SS)=?,(20030H)=?n图形表示如右: 寄存器间接寻址示例:寄存器间接寻址例n例:MOV AX,BX 设BX=1200H22H11H1200H偏移地址偏移地
8、址AH AL 11 22数数据据段段代代码码段段MOV寄存器间接寻址n由寄存器间接给出操作数的偏移地址;n存放偏移地址的寄存器称为间址寄存器,它们是:BX,BP,SI,DIn操作数的段地址(数据处于哪个段)取决于选择哪一个间址寄存器: BX,SI,DI BP默认在数据段默认在数据段默认在堆栈段默认在堆栈段寄存器相对寻址(Register Relative Addressing)n寄存器相对寻址方式操作数的偏移地址EA为寄存器的内容加位移量,操作数在存储器中。n汇编格式:XR(X表示位移量,是8位或16位二进制补码表示的有符号数)n功能:操作数存放在存储器,寄存器R的内容加位移量X为操作数的偏移
9、地址EA。n图形表示如下:偏移地址EA计算方法如下:EA=SI+X SI作变址寄存器。 DI+X DI作变址寄存器。BX+X BX作基址寄存器。BP+X BP作基址寄存器。寄存器相对寻址示例: n设执行前: (AX)=0040H,(BX)=0030H,(DS)=2000H,(20036H)=0050H n执行指令:ADD 6BX,AXn执行后:(AX)=?,(BX)=?,(DS)=?,(20036H)=?n图形表示如下: 执行:(执行:(20036H)+(AX) 20036H执行后:(执行后:(AX)=0040H,(,(BX)=0030H,(,(DS)=2000H,(,(20036H)=009
10、0H。寄存器相对寻址示例(续): 基址变址寻址(Based Indexed Addressing)n基址变址寻址方式中,操作数的偏移地址EA是指令中基址寄存器内容加上变址寄存器内容之和,操作数在存储器中。n汇编格式: BR + IRn功能:操作数存放在存储器,BR的内容加IR的内容是操作数的偏移地址EA。偏移地址EA计算方法如下:基址变址寻址示例: n设BX=100H,SI=80H,DS=4000H,nMOV AX,BXSI 相对基址变址寻址(Relative Based Indexed Addressing)n相对基址变址寻址方式中,操作数的偏移地址EA是指令中基址寄存器内容、变址寄存器内容
11、、位移量三项之和,操作数在存储器中。n汇编格式:XBR+IRn功能:操作数存放在存储器,BR的内容加IR的内容加位移量X是操作数的偏移地址EA。偏移地址EA计算方法如下:相对基址变址寻址示例: n设COUNT=0140H,BX=600H,SI=10H,DS=2000H,nMOV AX,COUNTBXSI举例: n设DS=4000H,1、MOV AX,3020H2、VAR DW 86 MOV AX,VAR3、SI=1800H,MOV AX,SI4、COUNT DW 5,6,7,8SI=06HMOV AX,COUNTSI3.1.3数据寻址与数据结构的关系n多种寻址方式能方便、灵活的存取操作数, 支
12、持高级语言的某些数据结构。n1.简单变量寻址n2.数组或表格数据的寻址n3.记录型数组的寻址 3.1.4程序转移寻址n寻址方式对多数指令而言,是要计算出操作数的地址,但是也由少数指令是为了形成程序转移的地址(如无条件转移指令JMP、调用指令CALL等)。n程序正常顺序执行时,每取出一条指令执行IP+n-IP,其中n为取出指令的字节数;然后形成下一条指令的地址: PA = CS * 24 + IPn但是如果程序发生转移时,需要计算出转移偏移地址EA并修改IP,有时还需要修改CS的值。这种情况操作的对象是一个地址,地址的内容是要取出的指令,而不是上述讲到的操作数,因此称之为程序转移寻址。程序转移方
13、式:n段内转移是指程序在同一段代码内,仅改变IP的值而不改变CS的值所发生的转移。n而段间转移是程序要从一个代码段转移到另一个代码段,则不仅改变IP的值,同时也要改变CS的值。3.23.2实方式实方式3232位指令寻址位指令寻址n 实地址方式32位指令寻址,指在32位的PC机上使用16位的存储机制,执行32位的非保护方式及非虚拟方式的指令,达到直接存取32位寄存器和32位存储器操作数的目的。3.3实方式指令系统n指令系统是一台机器所有指令的集合。 Pentium系列机指令系统庞大、类型多样,约有300多条指令,其中包括基本指令100多条。 具有支持多进程、多任务、虚拟存储器和多媒体等功能的32
14、位指令。3.3.1常用指令类型集n1.数据传送类指令n2.算术运算类指令n3.逻辑和移位操作类指令n4.串操作与重复前缀类指令n5.控制转移类指令n6.处理机控制类指令n7.其它指令本讲义约定:nOPD表示目的操作数; OPS表示源操作数; (OPS)表示OPS的内容; (OPD)表示OPD的内容; -表示传送; R表示通用寄存器; Sr表示段寄存器; M表示主存储器; nXXXX:XXXX 表示组合号, “:”表示其前后组成一个数; L表示操作数的长度; d表示立即数; B/W/D表示字节或字或双字。3.3.2数据传送类指令n通用数据传送指令n堆栈操作指令n标志寄存器传送指令n地址传送指令n
15、输入输出指令通用数据传送指令n1.传送指令MOVn2.数据交换指令XCHGn3.查表转换指令 XLAT语句格式:MOV OPD,OPSn功能:将源操作数传送入目的地址,源地址内容不变。即(OPS)OPD。n下图描述了MOV指令在传送数据时允许传送的路径及类型。1.传送指令MOVMOV指令在传送数据时允许传送的路径及类型注意:n(1) OPD,OPS的类型(8/16/32位)必须一致.n(2) OPD不能使用立即数。n(3) 双操作数不能同时为内存中的数据。n(4) 段寄存器不能直接送立即数.n(5) 指令执行后不影响FLAGS的标志位的状态.n(6) 不能任意改变CS示例:存储器与寄存器间数据
16、传送。nMOV AX,BUF ;BUF是变量,源操作数为直接寻址nMOV BH,DI ;源操作数为寄存器间接寻址nMOV DI,ES:3SI ;源操作数为变址寻址,使用跨段前缀nMOV BP,3BX+SI ;源操作数为基址加变址寻址nMOV BUFA,DL ;BUFA是一字节变量nMOV BP,AX ;使用SS段寄存器nMOV DS:BP,DL ;使用跨段前缀nMOV BUF,DS ;BUF是个字变量nMOV ES ,BUF示例:存储器与寄存器间数据传送。nBUF DW 1,2,3,4,5,6,0MOV CX,A8MOV SI,2MOV BUFSI,CX2.数据交换指令XCHGn语句格式:XC
17、HG OPD,OPSn功能:将源地址与目的地址中的内容互换。 即(OPD)OPS,(OPS)OPD。n寄存器与存储器之间数据交换。nMOV AX,5678H;(AX)=5678HnMOV BX,0FFFFH ;(BX)=0FFFFHnXCHG AX,BX;(AX)=0FFFH, (BX)=5678HMOVSX和MOVZX指令n格式:MOVSX OPD, OPS MOVZX OPD, OPSn它们将OPS的内容-OPD,但是对于OPD左边空缺的位,MOVSX全部用OPS的符号填充(作符号延伸), 可以对有符号的数进行符号扩展;而MOVZX是全部以零(0)填充,可对无符号数进行0扩展. 注意:OP
18、D的位数比OPS的位数长示例:nMOV CL, 88H MOVZX AX, CL ;AX = 0088H MOVSX BX, CL ;BX = FF88Hn另外也可如下书写指令:nMOVSX CX, BL MOVSX EAX, BUFnMOVZX AX, CL MOVSX EBX, ALnMOVZX ESI, BUF MOVZX EDX,DI3.查表转换指令 XLAn语句格式:XLAT OPS或XLATn功能:将(BX)为首址(AL)为位移量的字节 存 储 单 元 中 的 数 据 送 A L 寄 存 器 。 即(BX+AL)AL。堆栈操作指令n1.进栈指令PUSHn2.出栈指令POPn3.PU
19、SHA/PUSHAD指令n4.POPA/POPAD指令1进栈指令PUSHn语句格式: PUSH OPS ; W/D, R/Sr/M/dn功能:将寄存器、段寄存器、立即数或存储器中的一个字数据压入堆栈顶部,指令视操作数长度为字(2字节)或双字(4字节)和地址为16位/32位,先将SP/ESP - 2/4-SP/ESP,后将OPS-SP/ESP。2出栈指令POPn语句格式: POP OPD ; W/D, R/Sr/M/dn功能: 视OPD长度为字或双字,先将当前SP/ESP指向的内容-OPD,后将SP/ESP+2/4-SP/ESP 。n从POP指令功能可看出,该指令为PUSH指令的逆过程,一般成对
20、使用。3.PUSHA/PUSHAD指令n格式: PUSHA ; 压入8个字通用寄存器. PUSHAD ; 压入8个双字通用寄存器. 4.POPA/POPAD指令n格式: POPA ;弹出到8个16位通用寄存器 POPAD ; 弹出到8个32位通用寄存器标志寄存器传送指令n1.标志送AH指令LAHFn2.AH送标志指令SAHFn3.标志寄存器进栈指令PUSHFn4.标志寄存器出栈指令POPF1标志送AH指令LAHFn语句格式:LAHFn功能:将标志寄存器的低8位送入AH寄存器。即(FLAGS)7-0AH。该指令的执行对标志位无影响。n【例】标志寄存器传送。执行前:(FLAGS)=0485H,(A
21、X)=0FFFFH执行指令:LAHF执行后 : AH =85H2.1 32位可编程寄存器体系二、基本控制寄存器 CFPFAFTFIFZFSFDFVMACVIFIDOFIOPLNTRFVIF31 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0FLAGSEFLAGS标志寄存器及其位序号标志寄存器及其位序号2AH送标志指令SAHFn语句格式:SAHFn功能:将AH的内容送入标志寄存器的低8位,高8位不变。即(AH)FLAGS7-0。n从该指令功能可看出,SAHF为LAHF的逆过程。 3标志寄存器进出栈指令PUSHF/POPFn语句格式:
22、nPUSHF 功能:将标志寄存器的内容压入堆栈。即(FLAGS)- 堆栈。 nPOPFn功能:将堆栈顶端的内容送到标志寄存器。即堆栈- (FLAGS )。 地址传送指令n1传送偏移地址指令 LEAn2传送偏移地址及数据段首址指令LDSn3传送偏移地址及附加数据段指令LES1传送偏移地址指令 LEAn语句格式: LEA OPD,OPS ;OPS的EA-OPD ;OPD是16/32位的R,OPS是Mn功能:主存按源地址的寻址方式计算偏移地址,将偏移地址送入指定寄存器。n【例】主存偏移地址的获取。MOV BX,0100H;(BX)=0100HMOV SI, 0210H;(SI) =0210HLEA
23、BX,1234BX+SI ; (BX)=1544H1传送偏移地址指令 LEAn设BUF的偏移地址为120H,BX=0A00H,SI=0010HLEA DI,BUFLEA DX,BXSI2LDS/LES/LFS/LGS/LSS指令n语句格式:LDS/LES/LFS/LGS/LSS OPD,OPS ;EA = OPSn功能: 地址传送LDS等指令中,OPD为R(16位),OPS为M(32位).操作对FLAGS无影响,执行后结果为:(EA)-R ;全程指针的偏移地址(EA+2)- LDS/LES/LFS/LGS/LSS ;全程指针的段地址2LDS/LES/LFS/LGS/LSS指令n设变量BUF的段
24、地址=0CA0H,偏移地址=0100H,BUF DW 1,2,3,4D32_BUF DD BUFLDS SI,D32_BUF3.3.4 逻辑运算和位操作类指令逻辑运算指令n1求反指令NOTn2逻辑乘指令ANDn3测试指令TESTn4逻辑加指令ORn5按位加指令XOR 一、逻辑运算n逻辑运算指令对操作数的要求大多与MOV指令相同。“非”运算指令要求操作数不能是立即数;n除“非”运算指令外,其余指令的执行都会使标志位OF=CF=0n语句格式:NOT OPDn功能:将目的地址中的内容逐位取反后送入目的地址。即(OPD)求反OPD 【例】逻辑非运算。MOVAX,878AH;(AX)=878AHNOTA
25、X ;(AX)=7875H1求反指令NOTn语句格式:AND OPD, OPSn功能:将目的操作数和源操作数进行逻辑乘运算,结果存目的地址。即(OPD)(OPS)OPD。该指令用于清除目的操作数中与源操作数置0的对应位。说明:逻辑乘的运算法则为:11=1,10=0,01=0,00=0【例】将AL中第3位和第7位清零。MOVAL,0FFH ANDAL,77H 2逻辑乘指令AND“与”指令的应用n实现两操作数按位相与的运算nAND BL,SIn使目标操作数的某些位不变,某些位清零nAND AL,0FHn在操作数不变的情况下使CF和OF清零nAND AX,AXn语句格式:TEST OPD,OPS功能
26、:源地址和目的地址的内容执行按位的逻辑乘运算,结果不送入目的地址。即(OPD)(OPS)。【例】测试AX中的第12位是否为0,不为0则转L。TEST AX,1000HJNE L 3测试指令TESTn语句格式:OR OPD,OPS功能:将目的操作数和源操作数进行逻辑加运算,结果存目的地址。即(OPD)(OPS)OPD。说明:逻辑加的运算法则为:11=1,10=1,01=1,00=0。【例】将AL寄存器中第3位和第7位置1。MOVAL,0 OR AL,88H 4逻辑加指令ORn语句格式: XOR OPD,OPS功能:目的操作数与源操作数做按位加运算,结果送入目的地址。即(OPD)(OPS) OPD
27、。说明:按位加的运算法则为;11=0,10=1,01=1,00=0。【例】按位加运算。MOVAL,45H;(AL)=45HXORAL,31H;(AL)=74H5按位加指令XOR移位指令 n移位指令包括算术移位指令、逻辑移位指令和循环移位指令,分别进行左移和右移操作。这些指令均有统一的语句格式:SAL/SHL OPD, OPS ;左移SAR OPD, OPS ;算术右移 SHR OPD, OPS ;逻辑右移其中,OPD是8/16/32位的R/M;OPS是计数值(即移位次数),有三种情形:OPS即可是8位的立即数或CL的内容(移位前次数-CL)。其功能为将目的操作数的所有位按操作符规定的方式移动1
28、位或按寄存器CL规定的次数(0255)移动,结果送入目的地址。目的操作数是8位(或16位)的寄存器数据或存储器数据。语句格式:SAL OPD,1 或SHL OPD,1 SAL OPD,CL或SHL OPD,CL功能:将(OPD)向左移动CL指定的次数,最低位补入相应的,的内容为最后移入位的值。1算术左移和逻辑左移指令SAL(SHL)算术左移和逻辑左移n算术左移指令: SAL OPRD,1 SAL OPRD,CLn逻辑左移指令: SHL OPRD,1 SHL OPRD,CL有符号数有符号数无符号数无符号数移动一位后,若移动一位后,若CF与最高不相等,则与最高不相等,则OF=1;否则;否则OF=0
29、语句格式:SAR OPD,1或SAR OPD,CLnCF功能:将(OPD)向右移动CL指定的次数且最高位保持不变;CF的内容为最后移入位的值。2算术右移指令SARMOVBH,0F4H;(BH)=0F4HMOVCL, 2;(CL)=2SARBH, CL;(BH)=0FDH,(CF)=0该例语句“SARBH,CL”实际上完成了(BH)BH的运算,所以,用SAR指令可以实现对有符号数除2n的运算(n为移位次数)。【例】算术右移运算n语句格式:SHR OPD,1或SHR OPD,CLn功能:将(OPD)向右移动CL规定的次数,最高位补入相应个数的,CF的内容为最后移入位的值。 3逻辑右移指令SHR逻辑
30、右移n格式: SHR OPRD,I SHR OPRD,CL0CF无符号数无符号数的右移的右移移动一位后,若次高位与最高位不相等,则移动一位后,若次高位与最高位不相等,则OF=1;否则;否则OF=0逻辑右移例:nMOV AL,68HnMOV CL,2nSHR AL,CL0CF0 1 1 0 1 0 AL0 0 0 0 0 1 1 0 1 0 0ALCF0 00 0 0 1 1 0 1 0 ALCF0 0移动移动1次次移动移动2次次n语句格式:ROL OPD,1或ROL LPD,CLn功能:将目的操作数的最高位与最低位连成一个环,将环中的所有位一起向左移动CL规定的次数。CF的内容为最后移入位的值
31、。4循环左移指令ROLn语句格式: ROR OPD,1或ROR OPD,CLn功能:将目的操作数的最高位与最低位连成一个环,将环中的所有位一起向右移动CL规定的次数,CF的内容为最后移入位的值。5循环右移指令RORn语句格式: RCL OPD, 1或RCL OPD,CLn功能:将目的操作数连同CF标志一起向左循环移动CL规定的次数。 6带进位的循环左移指令RCLn语句格式:RCR OPD,1或RCR OD,CLn功能:将目的操作数连同CF标志一起向右循环移动所规定的次数。 7带进位的循环右移指令RCRnSAL AX,1;设AX初值=8701H,移位1位后,AX=0E02H,CF=1;nSHR
32、BX,CL;设BX初值=8701H,CL=2,CF=1;n移位后BX=21C0H,CF=0,CL=2;n将存储单元中4个字节的内容连续左移一位。nA DW 0FC85HnB DW 4321HnSHL A,1;A单元的内容=0F90AH,CF=1;nRCL B,1;B单元的内容=8643H,CF=0;例输入输出指令n1输入指令INn2输出指令OUT1输入指令INn输入指令用来从指定的外设寄存器取信息送入累加器。它有四种形式:n(1)语句格式:INAL,PORT 功能:(PORT) ALn(2)语句格式:INAX,PORT 功能:(PORT) AXn(3)语句格式:INAL,DX 功能:(DX)
33、ALn(4)语句格式:INAX,DX 功能:(DX) AL2输出指令OUTn输出指令用来把累加器的内容送往指定的外设存储器,它有四种形式:n(1)语句格式:OUTPORT,AL 功能:(AL)PORTn(2)语句格式:OUTPORT,AX 功能:(AX)PORTn(3)语句格式:OUTDX,AL 功能:(AL)DXn(4)语句格式:OUTDX,AX 功能:(AX)DX3.1.3算术运算类指令n加法指令n减运算指令n乘运算指令n除运算指令 加法指令n1加1指令 INCn2加指令ADDn3带进位加指令ADCn1加1指令 INCn语句格式:INC OPDn功能:将目的操作数加1,结果送目的地址。即(
34、OPD)+1OPD。nINC指令是一个单操作数指令,操作数可以是寄存器或存储器操作数。如:INC BX,即(BX)+1BX。加1指令可用于对计数器和地址指针进行调整。 2加指令ADDn语句格式:ADD OPD, OPSn功能:将目的操作数与源操作数相加,结果存入目的地址中,源地址的内容不改变。n即(OPD)+(OPS)OPD。n语句格式:ADC OPD,OPSn功能:将目的操作数加源操作数再加低位进位,结果送目的地址。n即(OPD)+(OPS)+CF OPD。n【例】无符号双字加法运算。MOVAX,4652H;(AX)=4652HADDAX,0F0F0H;(AX)=3742H,CF=1MOVD
35、X,0234H;(DX)=0234HADCDX,0F0F0H;(DX)=0F325H,CF=03带进位加指令ADC减运算指令n1减1指令DECn2减指令SUBn3求补指令NEGn4带借位减指令 SBBn5比较指令 CMP1减1指令DECn语句格式:DEC OPD n功能:将目的操作数减1,结果送目的地址。即(OPD)1OPD。nDEC指令是一个单操作数指令,操作数可以是寄存器或存储器操作数。n如:DEC CX。即(CX)1CX。n减1指令DEC也一般用于对计数器和地址指针的调整。n语句格式:SUB OPD,OPSn功能:目的操作数减源操作数,结果存于目的地址,源地址内容不变。n即(OPD)(O
36、PS)OPDn【例】减法运算。nMOVAX ,5678H;(AX)=5678HSUBAX ,1234H;(AX)=4444HnMOVBX ,3354H;(BX)=3354HSUBBX ,3340H;(BX)=0014H2减指令SUBn语句格式:NEG OPDn功能:将目的操作数的每一位求反(包括符号位)后加1,结果送目的地址。n即(OPD)+1OPD。n【例】求补运算。MOVAX,0FF64HNEGAL;(AX)=0FF9CHSUBAL,9DH;(AX)=0FFFFHNEGAX;(AX)=0001HDECAL;(AX)=0000HNEGAX;(AX)=0000H3求补指令NEGn语句格式:SB
37、B OPD ,OPSn功能:目的操作数减源操作数再减低位借位CF,结果送目的地址。n即(OPD)(OPS)CF OPD4带借位减指令 SBB5比较指令 CMPn语句格式:CMP OPD,OPSn功能:目的操作数减源操作数,结果只影响标志位,不送入目的地址。n即(OPD)(OPS)。n【例】比较AL的内容数值大小。nCMPAL,50;(AL)50nJBBELOW ;(AL)=50,( AL)50ALnINCAH;(AH)+1AHnBELOW:乘运算指令n1无符号数乘法指令MULn2有符号乘指令IMUL1无符号数乘法指令MULn语句格式: MUL OPSn功能: 若是字节数据相乘,(AL)与OPS
38、相乘得到字数据存入AX中;若是字数据相乘,则(AX)与OPS相乘得到双字数据,高字存入DX、低字存入AX中。n即字节乘法:(AL)* (OPS) AX,字乘法:(AX) * (OPS) DX,AX n【例】无符号数0A3H与11H相乘。nMOVAL,0A3H;(AL)=0A3HnMOVBL, 11H;(BL)=11HnMULBL ;(AX)=0AD3H2有符号乘指令IMULn语句格式:IMUL OPSn功能:字节乘法:(AL)*(OPS)AX,字乘法:(AX)*(OPS)DX、AX。nIMUL指令除计算对象是带符号二进制数外,其他都与MUL一样,但计算结果不同。 n【例】有符号数0B4H与11
39、H相乘。nMOVAL,0B4H;(AL)=B4HnMOVBL,11H;(BL)=11HnIMULBL ;(AX)=0FAF4H 除运算指令n1无符号除指令DIVn2有符号除指令IDIV1无符号除指令DIVn语句格式:DIV OPSn功能:字节除法:(AX)/(OPS) AL(商)、AH(余数)字除法:(DX、AX)/(OPS) AX(商)、DX(余数)n【例】写出实现无符号数0400H / 0B4H运算的程序段。MOVAX,0400H;(AX)=0400HMOVBL,0B4H;(BL)=0B4HDIVBL ;商(AL)=05H,余数(AH)=7CH n语句格式:IDIV OPSn功能:字节除法
40、:(AX)/(OPS) AL(商)、AH(余数)字除法:(DX,AX)/(OPS) AX (商)、DX(余数)除法指令DIV和IDIV虽然对标志的影响未定义,但可产生溢出。n【例】写出实现有符号数0400H /0B4H运算的程序段。MOVAX,0400H;(AX)=0400HMOVBX,0B4H;(BX)=0B4HIDIVBX ;(AL)=0F3H,(AH)=24H2有符号除指令IDIV符号扩展指令 n1字节转换成字指令CBWn2将字转换成双字指令CWD1字节转换成字指令CBW语句格式:CBWn功能:将AL中的符号位数据扩展至AH。n【例】将字节数据扩展成字数据。MOVAL,0A5H;(AL)
41、=0A5HCBW ;(AX)=0FFA5HADDAL,70H;(AL)=25HCBW ;(AX)=0025Hn语句格式:CWDn功能:将AX中的符号位数据扩展至DX 。n【例】将字数据扩展成双字数据。MOVDX, 0;(DX)=0MOVAX, 0FFABH;(AX)=0FFABHCWD;(DX)=0FFFFH (AX)=0FFABH2将字转换成双字指令CWD 十进制调整指令n1压缩BCD码调整指令n2非压缩BCD码调整指令(1)加法的十进制调整指令DAA n语句格式:DAAn功能:如果AL寄存器中低4位大于9或辅助进位(AF)=1,则(AL)=(AL)+6且(AF)=1;如果(AL)=0A0H
42、或(CF)=1,则(AL)=(AL)+60H且(CF)=1。同时,SF、ZF、PF均有影响。n【例】压缩BCD码的加法运算。MOV AL,68H ;(AL)=68H,表示压缩BCD码68MOV BL,28H ;(BL)=28H,表示压缩BCD码28ADD AL,BL;二进制加法:(AL)=68H+28H=90HDAA ;十进制调整:(AL)=96H ;实现压缩BCD码加法:68+28=96(2)减法的十进制调整指令DASn语句格式:DASn功能:如果(AF)=1或AL寄存器中低4位大于9,则(AL)=(AL)6且(AF)=1;如果(AL)=0A0H或(CF)=1,则(AL)=(AL)60H且(
43、CF)=1。同时SF、ZF、PF均受影响。n【例】压缩BCD码的减法运算。nMOVAL,68H ;(AL)=68H,表示压缩BCD码68MOVBL,28H ;(BL)=28H,表示压缩BCD码28SUBAL,BL ;二进制减法:(AL)=68H28H=40HDAS ;十进制调整:(AL)=40H ;实现压缩BCD码减法:6828=402非压缩BCD码调整指令n(1)加法的非压缩BCD码调整指令AAAn(2)减法的非压缩BCD码调整指令AASn(3)乘法的非压缩BCD码调整指令AAMn(4)除法的非压缩BCD码调整指令AADn语句格式:AAA n功能:如果AL的低4位大于9或(AF)=1,则:(
44、AL)=(AL)+6(AH)=(AH)+1(AF)=(CF)=1且AL高4位清零。否则:(CF)=(AF)=0AL高4位清零。(1)加法的非压缩BCD码调整指令AAAn语句格式:AAS n功能:如果AL的低4位大于9或(AF)=1,则:(AL)=(AL)6(AH)=(AH)1(AF)=(CF)=1AL高4位清零。否则:(CF)=(AF)=0 AL高4位清零。其他标志位OF、PF、SF、ZF不确定。(2)减法的非压缩BCD码调整指令AASn语句格式:AAM n功能:被调整的乘积在AX中,对AL按10取模,则:(AL)0AHAH(商):AL(余数)其中AH为商,AL为余数,标志位AF、CF、OF、
45、PF、SF、ZF受影响。 (3)乘法的非压缩BCD码调整指令AAM语句格式:AAD n功能:除法运算前,先调整被除数AX内容,使: (AL)=(AL)+(AH)*0AH (AH)=0即把非压缩型十进制数变成二进制数。(4)除法的非压缩BCD码调整指令AAD3.3.4 逻辑运算和位操作类指令逻辑运算指令n1求反指令NOTn2逻辑乘指令ANDn3测试指令TESTn4逻辑加指令ORn5按位加指令XORn语句格式:NOT OPDn功能:将目的地址中的内容逐位取反后送入目的地址。即(OPD)求反OPD 【例】逻辑非运算。MOVAX,878AH;(AX)=878AHNOTAX ;(AX)=7875H1求反
46、指令NOTn语句格式:AND OPD, OPSn功能:将目的操作数和源操作数进行逻辑乘运算,结果存目的地址。即(OPD)(OPS)OPD。该指令用于清除目的操作数中与源操作数置0的对应位。说明:逻辑乘的运算法则为:11=1,10=0,01=0,00=0【例】将AL中第3位和第7位清零。MOVAL,0FFH ANDAL,77H 2逻辑乘指令ANDn语句格式:TEST OPD,OPS功能:源地址和目的地址的内容执行按位的逻辑乘运算,结果不送入目的地址。即(OPD)(OPS)。【例】测试AX中的第12位是否为0,不为0则转L。TEST AX,1000HJNE L 3测试指令TESTn语句格式:OR
47、OPD,OPS功能:将目的操作数和源操作数进行逻辑加运算,结果存目的地址。即(OPD)(OPS)OPD。说明:逻辑加的运算法则为:11=1,10=1,01=1,00=0。【例】将AL寄存器中第3位和第7位置1。MOVAL,0 OR AL,88H 4逻辑加指令ORn语句格式: XOR OPD,OPS功能:目的操作数与源操作数做按位加运算,结果送入目的地址。即(OPD)(OPS) OPD。说明:按位加的运算法则为;11=0,10=1,01=1,00=0。【例】按位加运算。MOVAL,45H;(AL)=45HXORAL,31H;(AL)=74H5按位加指令XOR移位指令 n移位指令包括算术移位指令、
48、逻辑移位指令和循环移位指令,分别进行左移和右移操作。这些指令均有统一的语句格式:SAL/SHL OPD, OPS ;左移SAR OPD, OPS ;算术右移 SHR OPD, OPS ;逻辑右移其中,OPD是8/16/32位的R/M;OPS是计数值(即移位次数),有三种情形:OPS即可是8位的立即数或CL的内容(移位前次数-CL)。其功能为将目的操作数的所有位按操作符规定的方式移动1位或按寄存器CL规定的次数(0255)移动,结果送入目的地址。目的操作数是8位(或16位)的寄存器数据或存储器数据。语句格式:SAL OPD,1 或SHL OPD,1 SAL OPD,CL或SHL OPD,CL功能
49、:将(OPD)向左移动CL指定的次数,最低位补入相应的,的内容为最后移入位的值。1算术左移和逻辑左移指令SAL(SHL)语句格式:SAR OPD,1或SAR OPD,CLnCF功能:将(OPD)向右移动CL指定的次数且最高位保持不变;CF的内容为最后移入位的值。2算术右移指令SARMOVBH,0F4H;(BH)=0F4HMOVCL, 2;(CL)=2SARBH, CL;(BH)=0FDH,(CF)=0该例语句“SARBH,CL”实际上完成了(BH)BH的运算,所以,用SAR指令可以实现对有符号数除2n的运算(n为移位次数)。【例】算术右移运算n语句格式:SHR OPD,1或SHR OPD,CL
50、n功能:将(OPD)向右移动CL规定的次数,最高位补入相应个数的,CF的内容为最后移入位的值。 3逻辑右移指令SHRn语句格式:ROL OPD,1或ROL LPD,CLn功能:将目的操作数的最高位与最低位连成一个环,将环中的所有位一起向左移动CL规定的次数。CF的内容为最后移入位的值。4循环左移指令ROLn语句格式: ROR OPD,1或ROR OPD,CLn功能:将目的操作数的最高位与最低位连成一个环,将环中的所有位一起向右移动CL规定的次数,CF的内容为最后移入位的值。5循环右移指令RORn语句格式: RCL OPD, 1或RCL OPD,CLn功能:将目的操作数连同CF标志一起向左循环移
51、动CL规定的次数。 6带进位的循环左移指令RCLn语句格式:RCR OPD,1或RCR OD,CLn功能:将目的操作数连同CF标志一起向右循环移动所规定的次数。 7带进位的循环右移指令RCR3.3.5串操作类指令n串操作指令 : 数据传送类指令每次只能传送一个数据,若要传送大批数据就需要重复编程,这样就浪费了大量的时间和空间。为此8086提供了一组处理主存中连续存放数据串的指令,这就是串操作指令。 下图流程图总结了串操作的过程 串操作流程图串操作流程图n语句格式: MOVSB字节串传送 MOVSW字串传送功能:将以SI为指针的源串中的一个字节(或字)存储单元中的数据传送至以DI为指针的目的地址
52、中去,并自动修改指针,使之指向下一个字节(或字)存储单元。即:(DS:SI)ES:DI。 当DF=0时,(SI)和(DI)增量。当DF=1时,(SI)和(DI)减量。1传送指令MOVSn语句格式: CMPSB字节串比较 CMPSW字串比较功能:将SI所指的源串中的一个字节(或字)存储单元中的数据与DI所指的目的串中的一个字节(或字)存储单元中的数据相减,并根据相减的结果设置标志,但结果并不保存。即:(SI)(DI)。 修改串指针,使之指向串中的下一个元素。当DF=0时,(SI)和(DI)增量。当DF=1时,(SI)和(DI)减量。2串比较指令CMPS n语句格式: SCASB字节串搜索 SCA
53、SW字串搜索功能:AL(字节)或AX(字)中的内容与DI所指的目的串中的一个字节(或字)存储单元中的数据相减,根据相减结果设置标志位,结果不保存,即: 字节操作:(AL)(DI),字操作:(AX)(DI)。 修改指针使之指向串中的下一个元素。当DF=0时,(DI)增量。当DF=1时,(DI)减量。3串搜索指令SCASn语句格式: LODSB从字节串中取数 LODSW从字串中取数功能:将SI所指的源串中的一个字节(或字)存储单元中的数据取出来送入AL(或AX)中。即: 字节操作:(SI)AL,字操作:(SI)AX。 修改指针SI,使它指向串中的下一个元素。当DF=0时,(SI)增量。当DF=1时,(SI)减量。 4从源串中取数指令LODSn语句格式: STOSB往字节串中存数(2)STOSW往字串中存数功能:将AL或AX中的数据送入DI所指的目的串中的字节(或字)存储单元中。即: 字节操作:(AL)DI,字操作:(AX)DI。 修改指针DI,使之指向串中的下一个元素。当DF=0时,(DI)增量)。当DF=1时,(DI)减量。5往目的串中存数指令STOSn(1)REP REP前缀用在MOVS、STOS 、LODS指令前。功能:每执行一次串指令(CX)1,直到(CX)=0,重复执行结束。n(2)REPZ 该指令一般用在CMP、SCAS指令前。功能:每执行一次串指令(CX
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 山西财经大学华商学院《健身理论与指导》2023-2024学年第一学期期末试卷
- 山西财经大学《国际贸易与实务》2023-2024学年第一学期期末试卷
- 2023年木片、木粒加工产品项目融资计划书
- 山东职业学院《女装工艺与制作》2023-2024学年第一学期期末试卷
- 定金 居间协议合同范例
- 语音标注采购合同范例
- 广告承接制作合同范例
- 中韩采购合同范例
- 幼儿园音乐活动《过新年》
- 螺丝热处理加工合同范例
- 论辛弃疾词作的愁情主题及其审美价值
- 新形势下我国保险市场营销的现状、问题及对策
- LTE无线网络优化PPT课件
- 动态血压监测在社区高血压患者管理的意义
- 管道中英文对照表
- 240灯控台_说明书
- 新形势下加强市场监管局档案管理工作的策略
- 例行检查和确认检验程序
- 上海旅游资源基本类型及其旅游区布局特点(共5页)
- 六一汤_医方类聚卷一○二引_御医撮要_减法方剂树
- 准格尔旗协华煤矿技改设计资料
评论
0/150
提交评论