




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1第三章8086/8088指令系统2教学目的及要求教学目的及要求 1 1)了解了解指令的一般概念、指令的基本格式及指令的一般概念、指令的基本格式及指令的执行过程;指令的执行过程;2 2)熟悉熟悉指令对操作数的各种寻址方式;指令对操作数的各种寻址方式;3 3)深入理解深入理解80868086指令系统全部六大类指令的指令系统全部六大类指令的功能,包括指令操作码的含义、指令对操作功能,包括指令操作码的含义、指令对操作数的要求和指令的执行结果数的要求和指令的执行结果33.13.1 概述4一、指令与指令系统n指令:n控制计算机完成某种操作的命令n指令系统:n处理器所能识别的所有指令的集合n指令的兼容性:
2、n同一系列机的指令都是兼容的。5二、指令格式n指令中应包含:n指令执行的功能n指令执行的对象执行的操作执行的操作运算数据的来源运算数据的来源运算结果的去向运算结果的去向6指令的一般格式操作码 操作数,操作数执行何种操作执行何种操作目标操作数目标操作数源操作数源操作数参加操作的数据或数据存放的地址参加操作的数据或数据存放的地址7指令格式:n根据操作数的数量,指令可以有以下格式: 零操作数指令:零操作数指令: 操作码操作码 单操作数指令:单操作数指令: 操作码操作码 操作数操作数双操作数指令:双操作数指令: 操作码操作码 操作数,操作数操作数,操作数8三、指令中的操作数立即数寄存器存储器表征参加操
3、作的数据本身表征参加操作的数据本身表征数据存放的地址表征数据存放的地址9(1)立即数操作数n立即数本身是参加操作的数据,可以是8位或16位,只能作为源操作数。 例: MOV AX,1234H MOV BL,22Hn立即数是运算数据本身,无地址含义,故无法作为目标操作数10(2)寄存器操作数n参加运算的数存放在指令给出的寄存器中,可以是16位或8位。n例:nMOV AX,BXnMOV DL,CH11(3)存储器操作数n参加运算的数存放在存储器的某一个或某两个单元中n表现形式: 寄存器或常数形式寄存器或常数形式寻找存储器操作数的关键是寻找存储器操作数的关键是确定数据在内存中的存放地址确定数据在内存
4、中的存放地址12存储器操作数例n例:nMOV AX,1200H22H11H1200H偏移地址偏移地址AH AL 13四、指令字长与机器字长n指令字长:n由操作码的长度、操作数地址长度、操作数个数决定;n机器字长:n计算机能够直接处理的二进制数的位数。14五、指令的执行速度n指令的字长影响指令的执行速度 (常用指令的执行时间见附录C.1)n对不同的操作数,指令执行的时间不同: 存储器快!快!立即数立即数寄存器寄存器153.2 寻址方式16寻址方式 寻找操作数所在地址的方法 寻找转移地址的方法 17寻址方式n操作数可能的来源或存放处:n由指令直接给出n寄存器n内存单元n寻找操作数所在地址的方法可以
5、有三种大类型n指令直接给出的方式n存放于寄存器中的寻址方式n存放于存储器中的寻址方式18一、立即寻址n指令中的源操作数是立即数,即源操作数是参加操作的数据本身n例:MOV AX,1200H12H00HAH ALMOV代代码码段段 立即寻址仅适合于源操作数立即寻址仅适合于源操作数立即数寻址方式20二、寄存器寻址n参加操作的操作数在CPU的通用寄存器中。n例:MOV AX,BX AX BX寄存器寻址方式22三、直接寻址n指令中直接给出操作数的偏移地址n默认在数据段n例:MOV AX,1200H22H11H1200H偏移地址偏移地址 数数据据段段AH AL直接寻址方式n注意点:n存储器操作数的字长由
6、指令中另一个操作数的字长决定。n例:MOV 1234H,CX MOV CL, 1234Hn直接寻址方式下,操作数的段地址默认为数据段,但允许段重设,即由指令定义段,说明数据存放在其他逻辑段中。n例:MOV AX,ES:1200H24CH CL22H11H 直接寻址1234H25四、寄存器间接寻址n参与操作的数据存放在内存中,其偏移地址为指令中寄存器的内容。n例:nMOV BX,1200HnMOV AX,BXBXBX的值即为数据存放处的地址的值即为数据存放处的地址间接寻址方式27寄存器间接寻址例nMOV BX,1200HnMOV AX,BX22H11H1200H偏移地址偏移地址AH AL 11
7、22数数据据段段代代码码段段MOV28寄存器间接寻址n注意点:n由寄存器间接给出操作数的偏移地址;n存放偏移地址的寄存器称为间址寄存器,它们是:nBX,BP,SI,DIn偏移地址字长均为16位,故间址寄存器必须是16位寄存器n操作数的段地址(数据处于哪个段)取决于选择哪一个间址寄存器:BX,SI,DI BP默认在数据段默认在数据段默认在堆栈段默认在堆栈段29五、寄存器相对寻址n操作数的偏移地址为寄存器的内容加上一个位移量(常量)n格式例:nMOV AX,BX+DATAn或可表示为:MOV AX,BXDATAn例:nMOV BX ,220HnMOV CL,BX+5相对寻址方式31六、基址、变址寻
8、址n操作数的偏移地址为n一个基址寄存器的内容 + 一个变址寄存器的内容;n操作数的段地址由选择的基址寄存器决定n基址寄存器为BX,默认在数据段n基址寄存器为BP,默认在堆栈段n基址变址寻址方式与相对寻址方式一样,主要用于一维数组操作。基址变址寻址方式33例:n执行下列指令:nMOV SI,1100HnMOV BX,SInMOV AX,SI+BX22H11H2200H偏移地址偏移地址AH AL 11 22数数据据段段34七、基址、变址、相对寻址n操作数的偏移地址为:n基址寄存器内容+变址寄存器内容+位移量n操作数的段地址由选择的基址寄存器决定。n基址变址相对寻址方式主要用于二维表格操作。相对基址
9、变址寻址方式36例:n执行以下程序段:nMOV DI,1100HnMOV BP,DInMOV AL,BPDI522H11H2205H偏移地址偏移地址AL 22堆堆栈栈段段37八、隐含寻址n指令中隐含了一个或两个操作数的地址,即操作数在默认的地址中。n例: nMUL BLn指令执行:nALBLAX寻址方式中的几点注意事项n立即寻址只适合于源操作数;n指令中的操作数若为 形式,则表示操作数为存储器操作数。即:n要寻找的数据在内存中n该数据在内存中的存放地址为 中的内容n寄存器寻址中的间址寄存器(出现在 中)只有4个nBX,SI,DI,BP38393.3 80863.3 8086指令系统40掌握:n
10、指令码的含义n指令对操作数的要求n指令的对标志位的影响n指令执行是否影响标志位n对加、减运算,需明确指令执行如何影响标志位n指令的功能4180868086指令系统从功能上包括六大类:数据传送数据传送算术运算算术运算逻辑运算和移位逻辑运算和移位串操作串操作程序控制程序控制处理器控制处理器控制42数据传送指令n通用数据传送n输入输出n地址传送n标志位操作43一、通用数据传送一般数据传送指令堆栈操作指令交换指令查表转换指令字位扩展指令n特点:特点:n该类指令的执行对标志位不产生影响该类指令的执行对标志位不产生影响 441. 一般数据传送指令n一般数据传送指令 MOVn格式:nMOV dest,src
11、n操作:nsrcn例:n MOV AL,BL destMOV指令的功能46一般数据传送指令n注意点:n两操作数字长必须相同;n两操作数不允许同时为存储器操作数;n两操作数不允许同时为段寄存器;n在源操作数是立即数时,目标操作数不能是段寄存器;nIP和CS不作为目标操作数,FLAGS一般也不作为操作数在指令中出现。47一般数据传送指令例n判断下列指令的正确性:nMOV AL,BXnMOV AX,SI05HnMOV BXBP,BXnMOV DS,1000HnMOV DX,09HnMOV 1200,SI48一般数据传送指令应用例n将(*)的ASCII码2AH送入内存数据段1010H开始的100个单元
12、中。题目分析:n确定首地址n确定数据长度n写一次数据n修改单元地址n修改长度值n判断写完否?n未完继续写入,否则结束1073H100B1010H 2AH数据段数据段2AH2AH2AH49一般数据传送指令应用例程序段: MOV DI,1010H MOV CX,100 MOV AL,* AGAIN:MOV DI,AL INC DI ;DI+1 DEC CX ;CX-1 JNZ AGAIN ;CX0则继续 HLT 50上段程序在代码段中的存放形式设CS=109EH,IP=0100H,则各条指令在代码段中的存放地址如下: CS : IP 机器指令 汇编指令 109E:0100 B80010 MOV D
13、I,1010H 109E:0103 . MOV CX,64H 109E:0105 . MOV AL,2AH 109E:0107 . MOV DI,AL 109E:0109 INC DI 109E:010A DEC CX 109E:010B JNZ 0107H 109E:010D HLT51数据段中的分布 n送上2AH后数据段中相应存储单元的内容改变如下:DS:1010 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A DS:1020 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A DS:1030 2A
14、 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A DS:1040 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2ADS:1050 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A DS:1060 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A DS:1070 2A 2A 2A 2A 00 00 00 00 00 00 00 00 00 00 00 00偏移地址偏移地址DI522. 堆栈操作指令掌握:n有关堆栈的概念
15、n堆栈指令的操作原理53堆栈操作的原则n先进后出n以字为单位n堆栈操作指令的操作数必为16位n堆栈指令对操作数的要求:n不能是立即数;n可以是16位寄存器或存储器2个单元;n若为存储器操作数,需要声明操作数的字长。54堆栈操作指令n压栈指令 PUSHn格式: PUSH OPRDn出栈指令 POPn格式: POP OPRD16位寄存器或位寄存器或存储器两单元存储器两单元16位寄存器或位寄存器或存储器两单元存储器两单元55压栈指令 PUSHn指令执行过程:nSP - 2 SPn操作数高字节 SP+1n操作数低字节 SP SP堆堆栈栈段段SP高高8位位低低8位位PUSH指令的功能57压栈指令的操作M
16、OV AX,1234HMOV SP,1200HPUSH AX 1200H 堆堆栈栈段段 SP-2=11FEH12H34H1200H 堆堆栈栈段段12H 34HAX入栈后入栈后入栈前入栈前58出栈指令POPn指令执行过程: SP SP+1 SP SP+2操作数低字节操作数低字节操作数高字节操作数高字节 SP堆堆栈栈段段SP高高8位位低低8位位59出栈指令的操作执行 POP AX 12H34H11FEH 堆堆栈栈段段代代码码段段POP 12 34 AX SP+21200H 出栈后出栈后出栈前出栈前POP指令的功能61堆栈操作指令说明n指令的操作数必须是16位;n操作数可以是寄存器或存储器两单元,但
17、不能是立即数;n不能从栈顶弹出一个字给CS;nPUSH和POP指令在程序中一般成对出现;nPUSH指令的操作方向是从高地址向低地址,而POP指令的操作正好相反。62堆栈操作指令例nMOV AX,9000HnMOV SS,AXnMOV SP,0E200HnMOV DX, 38FFHnPUSH DXnPUSH AXnPOP DXnPOP AX如此,会使如此,会使AX和和DX的内容互换的内容互换633. 交换指令n格式: XCHG REG,MEM/REGn注:n两操作数必须有一个是寄存器操作数n不允许使用段寄存器。n例: nXCHGAX,BXnXCHG2000,CLXCHG指令的功能654. 查表指
18、令n格式: XLATn说明:n用BX的内容代表表格首地址,AL内容为表内位移量,BX+AL得到要查找元素的偏移地址n操作:n将BX+AL所指单元的内容送ALXLAT指令的功能67查表指令例数据段中存放有一张ASCII码转换表,设首地址为2000H,现欲查出表中第11个代码的ASCII码303132.394142.45462000H+02000H+110129ABEF68查表指令例n可用如下指令实现:nMOV BX,2000H ;BX表首地址nMOV AL,11 ;AL序号nXALT ;查表转换n执行后:AL = 42Hn还可用其他方法实现,如:nMOV BX,0BHnMOV AL,BX+200
19、0H695. 字位扩展指令 n将符号数的符号位扩展到高位;n指令为零操作数指令,采用隐含寻址,隐含的操作数为AX及AX,DXn无符号数的扩展规则为在高位补070字节到字的扩展指令n格式:nCBWn操作:n将AL内容扩展到AXn规则:n若最高位=1,则执行后AH=FFHn若最高位=0,则执行后AH=00H71字到双字的扩展指令n格式:nCWDn操作:n将AX内容扩展到DX AXn规则:n若最高位=1,则执行后DX=FFFFHn若最高位=0,则执行后DX=0000H72字位扩展指令例判断以下指令执行结果: MOV AL,44H CBW MOV AX,0AFDEH CWD MOV AL,86H CB
20、W73二、输入输出指令掌握:n指令的格式及操作n指令的两种寻址方式n指令对操作数的要求74输入输出指令n专门面向I/O端口操作的指令n指令格式:n输入指令: IN acc,PORTn输出指令 :OUT PORT,acc端口地址端口地址75指令寻址方式n根据端口地址码的长度,指令具有两种不同的端口地址表现形式。n直接寻址n端口地址为8位时,指令中直接给出8位端口地址;n寻址256个端口。n间接寻址n端口地址为16位时,指令中的端口地址必须由DX指定;n可寻址64K个端口。76I/O指令例nIN AX,80HnMOV DX,2400HnIN AL,DXnOUT 35H ,AX77三、取偏移地址指令
21、LEAn操作:n将变量的16位偏移地址取出送目标寄存器n当程序中用符号地址表示内存偏移地址时,须使用该指令。n格式: LEA REG,MEM n指令要求:n源操作数必须是一个存储器操作数,目标操作数通常是间址寄存器。78LEA指令n比较下列指令: MOV SI,DATA1 LEA SI,DATA1 MOV BX,BX LEA BX,BX DATA112H34H1100H88H77HBX=1100H执行结果:执行结果:SI=1234H执行结果:执行结果:SI=DATA1执行结果:执行结果:BX=7788H执行结果:执行结果:BX=1100H79LEA指令在程序中的应用n将数据段中首地址为MEM1
22、 的50个字节的数据传送到同一逻辑段首地址为MEM2的区域存放。编写相应的程序段 。 80LEA指令在程序中的应用 开开 始始取源地址取源地址取目标地址取目标地址送数据块长度到送数据块长度到CL传送一个字节传送一个字节修改地址指针修改地址指针修改计数值修改计数值计数值计数值=0? 结结 束束NY81LEA指令在程序中的应用 LEA SI,MEM1 LEA DI,MEM2 MOV CL,50NEXT: MOV AL,SI MOV DI,AL INC SI INC DI DEC CL JNZ NEXT HLT MEM112H34HMEM282四、标志位操作指令 LAHFSAHFPUSHFPOPF隐
23、含操作数隐含操作数AH隐含操作数隐含操作数FLAGS831. LAHF,SAHFnLAHF n操作:n将FLAGS的低8位装入AHCFPFAFZFCF.AHFLAGSD15D0D7D0n SAHF执行与执行与LAHF相反的操作相反的操作842. PUSHF,POPFn针对FLAGS的堆栈操作指令 将标志寄存器压栈或从堆栈弹出85算术运算类指令86算术运算类指令n加法运算指令n减法运算指令n乘法指令n除法指令算术运算指令的执行大多对状态标志位会产生影响算术运算指令的执行大多对状态标志位会产生影响87一、加法指令 普通加法指令ADD 带进位位的加法指令ADC 加1指令INC加法指令对操作数的要求与
24、加法指令对操作数的要求与MOV指令相同指令相同881. ADD指令n格式:n ADD OPRD1,OPRD2n操作:n OPRD1+OPRD2ADD指令的执行对全部指令的执行对全部6个状态标志位都产生影响个状态标志位都产生影响OPRD189ADD指令例 MOV AL,78H ADD AL,99H指令执行后6个状态标志位的状态90ADD指令例 01111000 + 10011001 000100011标志位状态:标志位状态: CF= SF= AF= ZF= PF= OF=912. ADC指令n指令格式、对操作数的要求、对标志位的影响与ADD指令完全一样n指令的操作:n OPRD1+OPRD2+C
25、F OPRD1nADC指令多用于多字节数相加,使用前要先将CF清零。92ADC指令应用例nLEA SI,M1nLEA DI,M2nMOV CX,20nCLC ;使CF=0NEXT :MOV AL,SI ADC DI,ALnINC SInINC DInDEC CX nJNZ NEXTnHLT M112H34HM2933. INC指令n格式: INC OPRDn操作: OPRD+1 OPRD常用于在程序中修改地址指针常用于在程序中修改地址指针不能是段寄存器不能是段寄存器或立即数或立即数94二、减法指令普通减法指令SUB考虑借位的减法指令SBB减1指令DEC比较指令CMP求补指令NEG减法指令对操作
26、数的要求与对应的加法指令相同减法指令对操作数的要求与对应的加法指令相同951. SUB指令n格式:nSUB OPRD1,OPRD2n操作:nOPRD1- OPRD2 OPRD1n对标志位的影响与ADD指令同962. SBB指令n指令格式、对操作数的要求、对标志位的影响与SUB指令完全一样n指令的操作:nOPRD1- OPRD2- CF OPRD1973. DEC指令n格式:nDEC OPRDn操作:nOPRD - 1 OPRD指令对操作数的要求与指令对操作数的要求与INCINC相同相同指令常用于在程序中修改计数值指令常用于在程序中修改计数值984. NEG指令n格式:nNEG OPRDn操作:
27、n0 - OPRD OPRD8/16位寄存器或位寄存器或存储器操作数存储器操作数用用0减去操作数,相当于对该操作数求补码减去操作数,相当于对该操作数求补码两点注意请两点注意请见教材见教材p114995. CMP指令n格式:nCMP OPRD1,OPRD2n操作:nOPRD1- OPRD2 n指令执行的结果不影响目标操作数,仅影响标志位!100CMP指令n用途:n用于比较两个数的大小,可作为条件转移指令转移的条件n指令对操作数的要求及对标志位的影响与SUB指令相同101CMP指令n两个无符号数的比较: CMP AX,BX 若 AX BX 若 AX BX OF和SF状态不同 AX BX103三、乘
28、法指令无符号的乘法指令MUL带符号的乘法指令IMULn注意点:注意点:n乘法指令采用隐含寻址,隐含的是存放被乘数的累乘法指令采用隐含寻址,隐含的是存放被乘数的累加器加器ALAL或或AXAX及存放结果的及存放结果的AXAX,DXDX;n若运算结果的高位全为若运算结果的高位全为0 0或或1 1,表示其为无效数据,表示其为无效数据,OF=CF=0OF=CF=0。1041. 无符号数乘法指令n格式: MUL OPRD 不能是立即数n操作: OPRD为字节数 OPRD为16位数 ALOPRDAXOPRDDXAXAX105无符号数乘法指令例nMUL BYTE PTRBX BXXXHAL XXHAX106四
29、、除法指令无符号除法指令n格式:nDIV OPRD有符号除法指令n格式:nIDIV OPRD107除法指令的操作若OPRD是单字节数n执行:AX/OPRD n结果:AL=商 AH=余数若OPRD是双字节数n执行: DXAX/OPRDn结果: AX=商 DX=余数指指令令要要求求被被除除数数是是除除数数的的双双倍倍字字长长108五、BCD码调整指令n共6条,均为隐含寻址方式,隐含的操作数是 AL或AL、AH;n不能单独使用,要紧跟在相应的算术运算指令 之后;n执行结果为压缩BCD码或扩展BCD码表示的十进制数。109逻辑运算和移位指令110指令类型n逻辑运算n与,或,非,异或n移位操作n非循环移
30、位,循环移位111 一、逻辑运算n逻辑运算指令对操作数的要求大多与MOV指令 相同。n“非”运算指令要求操作数不能是立即数;n除了“非”运算指令外,其余指令的执行都会使标志位OF=CF=01121.“与”指令:n格式: n AND OPRD1,OPRD2n操作: n两操作数相“与”,结果送目标地址。113“与”指令的应用n实现两操作数按位相与的运算nAND BL,SIn使目标操作数的某些位不变,某些位清零nAND AL,0FHn在操作数不变的情况下使CF和OF清零nAND AX,AX114“与”指令应用例n从地址为3F8H 端口中读入一个字节数,如果该数bit1位为1,则可从38FH端口将DA
31、TA为首地址的一个字输出,否则就不能进行数据传送。 编写相应的程序段。115“与”指令应用例开开 始始取待输出数的取待输出数的偏移地址偏移地址读入状态字读入状态字测试测试bit1位状态位状态Bit1=1?取输入口地址取输入口地址取输出口地址取输出口地址 输出一个字输出一个字NY116“与”指令应用例 LEA SI,DATA MOV DX,3F8HWATT:IN AL,DX AND AL,02H JZ WATT ;ZF=1转移 MOV DX,38FH MOV AX,SI OUT DX,AX1172.“或”运算指令n格式: nOR OPRD1,OPRD2n操作: n两操作数相“或”,结果送目标地址
32、118“或”指令的应用n实现两操作数相“或”的运算nOR AX,DIn使某些位不变,某些位置“1”nOR CL,0FHn在不改变操作数的情况下使OF=CF=0nOR AX,AX119“或”指令的应用将一个二进将一个二进制数制数9变为字变为字符符9如何实现如何实现?1203.“非”运算指令n格式:nNOT OPRDn操作:n操作数按位取反再送回原地址n注:n指令中的操作数不能是立即数n指令的执行对标志位无影响n例:NOT BYTE PTRBX1214.“异或”运算指令n格式: nXOR OPRD1,OPRD2n操作:n两操作数相“异或”,结果送目标地址n例: XOR BL,80H XOR AX,
33、AX1225.“测试”指令n格式: nTEST OPRD1,OPRD2n操作: n执行“与”运算,但运算的结果不送回目标地址。n应用:n常用于测试某些位的状态123例:n从地址为3F8H的端口中读入一个字节数,当该数的 bit1,bit3,bit5位同时为1时,可从38FH端口将DATA为首地址的一个字输出,否则就不能进行数据传送。 编写相应的程序段。124源程序代码: LEA SI,DATA MOV DX,3F8HWATT:IN AL,DX MOV DX,38FH MOV AX,SI OUT DX,AXTEST AL,02HJZ WATT ;ZF=1转移转移TEST AL,08HJZ WAT
34、TTEST AL,20HJZ WATT125二、移位指令 非循环移位指令 循环移位指令注:注:n 移动一位时由指令直接给出;移动一位时由指令直接给出;n 移动两位及以上,则移位次数由移动两位及以上,则移位次数由CL指定。指定。1261. 非循环移位指令n逻辑左移n算术左移n逻辑右移n算术右移127算术左移和逻辑左移n算术左移指令: SAL OPRD,1 SAL OPRD,CLn逻辑左移指令: SHL OPRD,1 SHL OPRD,CL有符号数有符号数无符号数无符号数SHL和SAL指令的功能129逻辑右移n格式: SHR OPRD,1 SHR OPRD,CL0CF无符号数无符号数的右移的右移1
35、30逻辑右移例: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次次SHR指令的功能132算术右移n格式: SAR OPRD,1 SAR OPRD,CL有符号数有符号数的右移的右移CFSAR指令的功能134非循环移位指令的应用n左移可实现乘法运算n右移可实现除法运算 1352. 循环移位指令n不带进位位的循环移位n带进位位的循环移位左移左移 ROL右移右移 ROR左移左移 RCL右移右移 RCR指令格式、对操作数的要求与非循
36、环移位指令相同指令格式、对操作数的要求与非循环移位指令相同136不带进位位的循环移位CFCF137带进位位的循环移位CFCFROL指令的功能ROR指令的功能RCL指令的功能RCR指令的功能142循环移位指令的应用n用于对某些位状态的测试;n高位部分和低位部分的交换;n与非循环移位指令一起组成32位或更长字长数的移位。P124例例3-34P124例例3-35143程序功能n将1000H开始存放的4个压缩BCD码转换为ASCII码存放在3000H开始的单元中去。12H34H56H78H1000H3000H144程序例 MOV SI,1000H MOV DI,3000H MOV CX,4Next:M
37、OV AL,SI MOV BL,AL AND AL,0FH OR AL,30H MOV DI,AL INC DI MOV AL,BLPUSH CXMOV CL,4145串操作指令146串操作指令说明n针对数据块或字符串的操作;n可实现存储器到存储器的数据传送;n待操作的数据串称为源串,目标地址称为目标串。147串操作指令的特点n源串一般存放在数据段,偏移地址由SI指定。允许段重设;n目标串必须在附加段,偏移地址由DI指定;n指令自动修改地址指针,修改方向由DF决定。 DF=0 DF=1n数据块长度值由CX指定n可增加自动重复前缀以实现自动修改CX内容。增地址方向;增地址方向;减地址方向;减地址
38、方向;148重复前缀n无条件重复nREPn条件重复nREPE 相等重复nREPZ 为零重复nREPNE 不相等重复nREPNZ 不为零重复CX0 ZF=1CX0 ZF=0CX0 重复重复149串操作指令n串传送 MOVSn串比较 CMPSn串扫描 SCASn串装入 LODSn串存储 STOS150串操作指令流程(以传送操作为例)取源串地址取源串地址取目标串地址取目标串地址设串长度设串长度传送一个字节或字传送一个字节或字修改地址指针修改地址指针修改串长度值修改串长度值传送完否?传送完否?NY设操作方向设操作方向1511. 串传送指令n格式: MOVS OPRD1,OPRD2 MOVSB MOVS
39、Wn串传送指令常与无条件重复前缀连用152串传送指令n对比用MOV指令和MOVS指令实现将200个字节数据从内存的一个区域送到另一个区域的程序段。P104例例3-12153串传送指令例n用串传送指令实现200个字节数据的传送: LEA SI,MEM1 LEA DI,MEM2 MOV CX,200 CLD REP MOVSB HLT1542. 串比较指令n格式: CMPS OPRD1,OPRD2 CMPSB CMPSWn串比较指令常与条件重复前缀连用,指令的执行不改变操作数,仅影响标志位。n前缀的操作对标志位不影响155串比较指令例测试200个字节数据是否传送正确:LEA SI,MEM1LEA
40、DI,MEM2MOV CX,200CLD REPE CMPSB JZ STOP DEC SI MOV AL,SI MOV BX,SISTOP:HLT 1563. 串扫描指令n格式: SCAS OPRD SCASB SCASWn执行与CMPS指令相似的操作,只是这里的源操作数是AX或AL目目 标标操作数操作数157串扫描指令的应用n常用于在指定存储区域中寻找某个关键字。 教材教材p127例例1584. 串装入指令n格式: LODS OPRD LODSB LODSWn操作:n对字节:n对 字:源操作数源操作数DS:SIDS:SIDS:SIDS:SIALALAXAX1594. 串装入指令n用于将内存
41、某个区域的数据串依次装入累加器,以便显示或输出到接口。nLODS指令一般不加重复前缀。1605. 串存储指令n格式: STOS OPRD STOSB STOSWn操作:n对字节: ALn对 字: AX目目 标标操作数操作数ES:DIES:DI161串存储指令的应用n常用于将内存某个区域置同样的值n此时:n将待送存的数据放入AL(字节数)或AX(字数据);n确定操作方向(增地址/减地址)和区域大小(串长度值);n使用串存储指令+无条件重复前缀,实现数据传送。162串存储指令例n将内存某单元清零nP129例3-40163串操作指令应用注意事项n需要定义附加段n目标操作数必须在附加段n需要设置数据的
42、操作方向n确定DF的状态n源串和目标串指针分别为SI和DIn串长度值必须由CX给出n注意重复前缀的使用方法n传送类指令前加无条件重复前缀164程序控制指令n转移指令n循环控制n过程调用n中断控制165程序的执行方向n程序控制类指令的本质是:n控制程序的执行方向n决定程序执行方向的因素:nCS,IPn控制程序执行方向的方法:n修改CS 和IP ,则程序转向另一个代码段执行;n仅修改IP,则程序将改变当前的执行顺序,转向本代码段内其它某处执行。166一、转移指令无条件转移指令 无条件转移到目标地址,执行新的指令有条件转移指令 在具备一定条件的情况下转移到目标地址通过修改指令的通过修改指令的偏移地址
43、偏移地址或或段地址及偏移地址段地址及偏移地址实现程序的转移实现程序的转移1671. 无条件转移指令n格式: JMP OPRD目标地址目标地址与与JMP在同在同一代码段一代码段与与JMP不在同不在同一代码段一代码段原则上可实现在整个内存空间的转移原则上可实现在整个内存空间的转移168无条件段内转移n转移的目标地址在当前代码段内,段地址不改变。n即:目标地址是16位偏移地址。指令中直接给出指令中直接给出目标地址目标地址由指令中的寄存器或存储器由指令中的寄存器或存储器操作数指出目标地址操作数指出目标地址段内直接转移段内直接转移段内间接段内间接转移转移169段内直接转移n转移的目标地址由指令直接给出n
44、格式:nJMP Label近地址标号近地址标号170段内直接转移示图JMPLabel代代码码段段位移量位移量下一条要执行指令的偏移地址下一条要执行指令的偏移地址=当前当前IP+位移量位移量JMP Label171段内间接转移n段内间接转移n转移的目标地址存放在某个16位寄存器或存储器的某两个单元中n例:nJMP BXn若:BX=1200Hn则:转移的目标地址=1200HJMP代代码码段段1200HMOV172段内间接转移例nJMP WORD PTRBX 设:BX=1200HJMP代代码码段段数数据据段段BX=1200XXHXXHIP指令码指令码目的地址寄存器段内间接寻址方式目的地址存储器段内间
45、接寻址方式目的地址相对寻址方式176段间直接转移n段内直接转移n转移的目标地址由指令直接给出n格式:nJMP FAR Label远地址标号远地址标号177段间直接转移示图JMPLabel代代码码段段1Label与与JMP之间的位移量之间的位移量代代码码段段2XXHXXHXXHXXHIPCS目的地址段间直接寻址方式179段间间接转移n段内间接寻址n转移的目标地址由指令中的32位操作数给出n 例:nJMP DWORD PTRBXXXHXXHXXHXXHBXIPCSJMP指令码指令码代代码码段段1代代码码段段2数数据据段段目的地址存储器段间间接寻址方式181无条件段间转移n转移的目标地址不在当前代码
46、段内。n目标地址为32位,包括段地址和偏移地址。指令中直接给出指令中直接给出目标地址目标地址由指令中的由指令中的32位存储器位存储器操作数指出目标地址操作数指出目标地址段间直接转移段间直接转移段间间接转移段间间接转移182无条件转移指令例(1) 2000:0100 MOV AX,1200H(2) 2000:0103 JMP NEXT (3) 2000:0120 NEXT: MOV BX,1200H (4) JMP BX (5) 2000:1200 183无条件转移指令例nMOV SI,1122HnMOV WORD PTRSI,0120HnADD SI,2nMOV WORD PTRSI,0122
47、HJMP DWORD PTRSI-2JMP WORD PTRSIJMP1122H代代码码段段数数据据段段01H22H20H01HIPCSIP1842. 条件转移指令n在满足一定条件下,程序转移到目标地址继续执行n条件转移指令均为段内短转移,即转移范围为: -128-+127p132185条件转移指令的应用n几种条件转移指令的应用nJC/JNCn判断CF的状态。常用于比大小nJZ/JNZn判断ZF的状态。常用于循环体的结束判断nJO/JNOn判断OF的状态。常用于有符号数溢出的判断nJP/JPEn判断PF的状态。用于判断运算结果低8位中1的个数是否为偶数nJA/JAE/JB/JBEn判断CF或CF+ZF的状态。常用于无符号数的大小比较186转移指令例n统计内存数据段中以TABLE为首地址的100个8位符号数中正数、负数和零元数的个数。187转移指令例(流程图)将存放各元素个将存放各元素个数的单元清零数的单元清零取首地址取首地址设串长度设串长度取一个字节数取一个字节数正数个数加正数个数加1零元素加零元素加1为负?为负?为零?为零?负数个数加负数个数加1NYNY188二
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 20077-2025一次性托盘
- GB/T 9967-2025金属钕
- 森林防火业务知识培训课件
- 森林火灾防范知识培训课件
- 森林消防水电知识培训课件
- 棋类培训课件
- 桥梁防撞理论知识培训课件
- 2025年陵园工作招聘笔试模拟试题及答案
- 2025年健康管理师(高级)实操技能考核试题及答案
- 2025年电子商务战略规划师中级求职面试全攻略及预测题库
- 近视推拿培训课件
- 2025年国企运维岗笔试题目及答案
- 2025年职业卫生培训试题及答案
- 2025年江苏省建筑施工企业主要负责人安全员A证考核题库含答案
- 2025年洛阳理工学院招聘硕士研究生学历专任教师考试笔试试题(含答案)
- 中华人民共和国治安管理处罚法2025修订版测试题及答案
- 广西柳州市2024-2025学年七年级下学期期末历史试题 (含答案)
- 无人机应用技术专业认识
- 备考2025年湖北省宜昌市辅警协警笔试笔试预测试题(含答案)
- 新学期教学工作会议上校长讲话:把功夫下在课堂里把心思放在学生上把质量落到细节中
- 初中语文教师培训
评论
0/150
提交评论