寻址方式和指令系统_第1页
寻址方式和指令系统_第2页
寻址方式和指令系统_第3页
寻址方式和指令系统_第4页
寻址方式和指令系统_第5页
已阅读5页,还剩59页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第3章 寻址方式和指令系统l3.1 寻址方式l3.2 8086指令系统l3.3 80X86与Pentium扩充和增加的指令3.1 寻址方式l3.1.1 立即数寻址l3.1.2 寄存器寻址l3.1.3 直接寻址l3.1.4 寄存器间接寻址l3.1.5 存储器相对寻址l3.1.6 基址变址寻址l3.1.7 基址变址相对寻址l3.1.8 寄存器比例寻址返返 回回3.1.1 立即数寻址l立即数,操作数直接包含在指令中,作为指令的一部分存放在代码段中l例3-1lMOV AX,2004H ;(AH)=20H,(AL)=04HlMOV BL, 5AH ;(BL)=5AHlMOV EAX,22334455H

2、;(EAX)=22334455H, (AX)=4455Hl立即数常用于给寄存器赋初值,只能作源操作数,不能作目的操作数 返返 回回3.1.2 寄存器寻址l操作数存放在指令指定的8位、16位或32位通用寄存器中。l例3-2 寄存器寻址lMOV AX,BX ; 将BX中的内容送入AX中,l BX中的内容保持不变lMOV SI,DI ;将DI中的内容送入SI中,l DI中的内容保持不变lMOV EAX,EBX ;将EBX中的内容送入EAX中返返 回回3.1.3 直接寻址l直接寻址指的是操作数在存储器中的有效地址EA直接包含在指令中,书写时有效地址加上中括号 l例3-3 存储器直接寻址lMOV AX,

3、1000H ;将DS段的1000H和1001H两个l 单元的内容送入AX寄存器中lMOV EAX,ES:2000H ;将ES段的2000H2003H四个l 单元的内容送入EAX寄存中,其中ES为段超越前缀lMOV AX,BUF ;将DS段内以有效地址BUF (符号地址)起始的两个单元的内容送入AX寄存器中返返 回回3.1.4 寄存器间接寻址l操作数的物理地址为:l(DS)16(SI/DI/BX)或(SS)16(BP)l例3-4 假定(DS)2000H,(SI)=3600H,(23600H)=6022HlMOV AX,SI ;先将DS中的值左移4位,然后与SI中的值相加, 形成物理地址是2360

4、0H,再将该物理地址中的 数据6022H送入AX寄存器中l例3-5 假定(SS)=3000H,(BP)=1100H,(31100H)=5E28HlMOV BX,BP l例3-6 偏移量为32位时的寄存器间接寻址lMOV EAX,ECX lMOV EAX,DX返返 回回3.1.5 寄存器相对寻址l其物理地址为:l(DS)16(SI/DI/BX)8位或16位偏移量l 或 (SS)16(BP)8位或16 位偏移量l例3-7 假定(DS)=2000H,(SS)=3000H,(SI)=3600H,(BP)=1100H,COUNT=10H,(23620H)=8A76H,(31110H)=4567H lMO

5、V AX ,SI+20H lMOV BX ,BP+COUNTl指令MOV BX,BP+COUNT书写有下面的等效形式: l MOV BX,BP+COUNTl MOV BX,COUNTBP返返 回回3.1.6 基址变址寻址l其物理地址为:l(DS)16(BX)(SI/DI)l或(SS)16+(BP)+(SI/DI)l例3-8基址变址寻址,假定(DS)=2000H,(SS)3000H,(BX)=1800H,(BP)=2080H ,(DI)=1000H,(SI)=0800H, (22800H)=80CFH,(32880H)=067AHlMOV AX,BXDIlMOV AX,BP+SI 返返 回回3.

6、1.7 基址变址相对寻址l其物理地址为:l(DS)16(BX)+(SI/DI)+8位或16位偏移量l(SS)16(BP)+(SI/DI)+8位或16位偏移量l例3-9基址变址相对寻址lMOV AX, BX+SI+100HlMOV 20H BP+SI, AXlMOV CX,DS:BX+SI+NUMlMOV DX,SS: NUMDIBPl例3-10 32位偏移量的寄存器比例寻址lMOV EAX,DAT EBX+ESIlMOV EAX,NUM EBP+EDI返返 回回3.1.8 寄存器比例寻址l例3-11 寄存器比例寻址lMOV EAX,XEDI*4 lMOV EBX,EDI*8EBX ;EA=(E

7、DI)*8+(EBX)lMOV EAX,XESI*4EBP ;EA=(ESI)*4+(EBP)+X返返 回回3.2 8086指令系统l3.2.1 数据传送指令l3.2.2 算术运算指令l3.2.3 逻辑运算与移位指令l3.2.4 串操作指令l3.2.5 控制转移指令l3.2.6 处理器控制指令返返 回回3.2.1 数据传送指令l1通用数据传送指令l2地址传送指令l3标志传送指令l4输入输出指令(1)基本的传送指令l格式:MOV DEST , SRCl功能:将源操作数的内容传送到目的操作数中l例3-12 基本的传送指令lMOV AL,30H ;立即数传送到寄存器lMOV AL, BL ;寄存器之

8、间传送字节数据lMOV SI, BX+62H ;寄存器和存储器之间传送数据l例3-13下列指令是不合法的。lMOV 6234H,AX ;立即数不能用于目的操作数lMOV CS,AX ;CS不能用于目的操作数lMOV IP,AX ;IP不能用于目的操作数lMOV DS,4234H ;立即数不能直接传送给段寄存器lMOV AL,BX ;源操作数与目的操作数的位数必须一致lMOV BUF1,BUF2 ;不能在两个存储器单元之间传送数据lMOV DS,ES ;不能在两个段寄存器之间传送数据(2)交换指令l格式:XCHG DEST,SRCl功能:将源操作数与目的操作数的内容交换(Exchange)l例3

9、-14 交换指令lXCHG AL,CL ;字节交换lXCHG BX,SI ;字交换lXCHG AX,BX+SI ;寄存器和存储器之间交换数据l例3-15 下列指令是非法的lXCHG AX,6234H ;寄存器与立即数之间不能交换lXCHG BUF1,BUF2 ;存储器单元与存储器单元之间不能交换lXCHG ADDR,4234H ;存储器单元与立即数之间不能交换lXCHG CS,DATBX ;不能与CS(或IP)寄存器进行交换(3)堆栈操作指令l堆栈是按“先进后出”原则工作的一段存储器区域 l格式:PUSH SRC POP DESTl例3-16 将16位通用寄存器CX的内容压入堆栈,然后,弹出栈

10、顶至CX中,已知:(SS)=0200H,(SP)=0008H,(CX)=12FAH,其示意图见图3-1和图3-2。 -2020012FA162006200712FAH2000存储器SS段首地址新栈顶原栈顶120008SSCXSP2008FA+12FAH+216存储器SS段首地址新栈顶原栈顶CXSPSS020012FA0008200620072008FA122000+(4)换码指令l格式:XLATl功能:这是一条专门用于AL和字节表中某一存储单元之间执行数据传送的指令。执行(AL) BX+AL的操作,使AL中的一个值变换为内存表格中的某一个值,实现编码的转换。 l例3-17 在内存的数据段中存放

11、有一张数值09的ASCII码转换表,首地址为Hex_table,如图3-3所示。现要把数值8转换成对应的ASCII码,可用以下几条指令实现:lLEA BX,Hex_table ;(BX)表首偏移地址lMOV AL, 8 ; (AL)8lXLAT ;查表转换Hex_table+0Hex_table+1Hex_table+2Hex_table+8Hex_table+90128930H31H32H38H39H返返 回回(1)有效地址传送指令l格式:LEA DEST,SRCl功能:这是一条取有效地址的指令(Load effective address)。它用来将源操作数的偏移地址传送到通用寄存器、指针

12、或变址寄存器中 l例3-18 有效地址传送指令lMOV BX,3200H ;将3200H单元的内容送BXlLEA BX,3200H ;将有效地址3200H送BXlLEA SI,ADDR ;将ADDR的有效地址送SI(2)地址指针传送指令l格式:LDS DEST,SRC LES DEST,SRCl功能:将源操作数指定的连续4个存储器单元中存放的32位地址指针(包括一个段地址和一个偏移地址)传送到两个16位寄存器 l例3-19 地址指针传送指令lPOINT DD 55663344H ;设定POINT的段地址和偏移地址l LDS BX,POINT ;(BX)=3344H,(DS)=5566Hl LE

13、S BX,POINT ;(BX)=3344H,(ES)=5566H返返 回回(1)标志读写指令l格式:LAHF/SAHFl功能:LAHF用于将标志寄存器的低8位送AH,即将标志寄存器FLAGS中的SF(符号标志)、ZF(零标志)、AF(半加进位标志)、PF(奇偶标志)和CF(进位标志)5个标志位分别传送到累加器AH的对应位 D7 D0 D15 OF DF IF TF D0SF ZF AF PF CFAH图图3-4 LAHF指令操作示意图指令操作示意图FLAGS(2)标志入栈出栈指令l格式:PUSHF/POPFl功能:lPUSHF指令是将标志寄存器中的内容压入堆栈,指令的操作为SP-1(FLAG

14、SH),SP-2(FLAGSL),(SP)(SP)-2lPOPF指令是将栈顶的字单元内容弹出到标志寄存器中,同时SP(SP)+2返返 回回4输入输出指令l格式:IN DEST,SRC OUT DEST,SRCl功能:专门用于累加器和I/O端口之间执行数据传送l例3-20 输入输出指令lIN AL,28H ;从端口28H输入一个字节到ALlOUT 15,AL ;从AL输出一个字节到端口15lMOV DX,0362H ;先将端口地址送入DXlIN AX,DX ;从端口0362H输入一个字到AX返返 回回3.2.2 算术运算指令l1加法指令l2减法指令l3乘法指令l4除法指令返返 回回(1)不带进位

15、加法指令l格式:ADD DEST, SRCl功能:将源操作数与目的操作数相加,结果送入原存放目的操作数的地方。该指令对标志位有影响。l例3-21 不带进位加法指令lADD CL,20H ;(CL)(CL)+20HlADD AX,SI ;(AX)(AX)+(SI)lADD DATA BX,AL ;(BX)+DATA)(BX)+DATA)+(AL)lADD DX,BX+SI ;(DX)(DX)+(BX)+(SI)(2)带进位加法指令l格式:ADC DEST,SRCl功能:将源操作数和目的操作数相加,同时加上进位标志的现行值CF,结果送入原存放目的操作数的地方l例3-22 带进位加法指令lADC A

16、X,SI ;(AX)(AX)+(SI)+CFlADC BX,3000H ;(BX)(BX)+3000H+CFlADC AX,DATSI ;(AX)(AX)+(SI+DAT)+CF(3)加1指令l格式:INC DESTl功能:将目的操作数中的内容加1,然后送回该操作数。目的操作数可以是寄存器或存储器。该指令一般用在循环程序中修改指针和循环次数l例3-23 加1指令lINC BX ;(BX)(BX)+1lINC BYTE PTR DI+100H ;将(DI)100H所指的字节l 单元内容加1(4)BCD码加法十进制调整指令 未组合BCD码的加法调整指令 l格式:AAAl功能:将AL的内容调整为一位

17、非组合型的十进制数 l例3-24 两个未组合BCD码的加法运算,设(AH)=0lMOV AL,08 ;(AL) 08 (AL)=00001000lADD AL,09 ;(AL) 08+09 (AL)=00010001=11HlAAA ;AF=1,(AH)(AH)+01,AL(AL+6),AL高4位 为0,(AL)=00000111,结果(AX)=0107 AF=1 CF=1 组合BCD码的加法调整指令l格式:DAAl功能:将AL的内容调整为两位组合型的二进制数。调整方法与AAA指令类似,不同的是DAA指令要分别考虑AL的高4位和低4位。如果AL的低4位大于9或AF1,则AL的内容加6,并将AF

18、置1;如果AL 的高4位大于9或CF=1,则AL的内容加60H,且将CF置1。l例3-25 两个组合BCD码的加法运算lMOV AL,37 ;(AL)37lMOV BL,35 ;(BL)35lADD AL,BL ;(AL)=6CH,AF=0,CF=0lDAA ;因为AL中的低4位大于9,所以(AL)(AL)+06, 结果(AL)=72,AF=1,CF=0返返 回回(1)不带借位的减法指令l格式:SUB DEST, SRCl功能:将目的操作数减去源操作数,结果送入目的操作数。l例3-26 不带借位的减法指令lSUB AX,3000H ;(AX)(AX)-3000HlSUB BX,SI+100H

19、;(BX)(BX)-SI+100H(2)带借位的减法指令l格式:SBB DEST, SRCl功能:将目的操作数减去源操作数,还要减去CF的值,结果送入目的操作数l例3-27 带借位的减法指令lSBB AX,BX ;(AX)(AX)-(BX)-CFlSBB WORD PTR SI,1068H ;(SI)(SI)-1068H-CF(3)减1指令l格式:DEC DESTl功能:将目的操作数的内容减1,然后送回目的操作数。l例3-28 减1指令lDEC BL ;(BL)(BL)-1lDEC BYTE PTRDI+2 ;DI+2DI+2-1(4)求补指令l格式:NEG DESTl功能:对目的操作数取补码

20、,即用零减去此操作数,结果送回此操作数中。l例3-29设(AX)=020H,(BX)2212HlNEG AX ;(AX)0-(AX),结果(AX)=0FEHlNEG BX ;(BX)0-(BX),结果(BX)=DDEEH(5)比较指令l格式:CMP DEST,SRCl功能:将目的操作数减去源操作数,结果不送回目的操作数,二操作数原值不变,只是影响状态标志位。其余同SUB指令。l这条指令后边一般跟条件转移指令,以判断二操作数是否满足某种关系。根据比较结果对标志位的影响来实现程序的分支。(6)BCD码减法十进制调整指令 未组合BCD码的减法调整指令l格式:AASl功能:与AAA指令类似是将AL的内

21、容调整为一位非组合型的十进制数l例3-30 两个未组合BCD码的减法运算lMOV AX,0608H ;AX0608HlSUB AL, 09H ;AL0FFHlAAS ;AL09H,AH05H 组合BCD码的减法调整指令l格式:DASl功能:与DAA指令类似,是将AL 的内容转换成两位组合型的十进制数l例3-31:两个组合BCD码的减法运算lMOV AL,73H ;AL73HlSUB AL,27H ;AL4CHlDAS ;AL46H返返 回回(1)无符号数乘法指令l格式:MUL SRCl功能:字节相乘时,AL与源操作数相乘,乘积为16位送入AX中;字相乘时,AX与源操作数相乘,乘积为32位,高1

22、6位送DX,低16位送AX。l对标志位影响:若乘积的高半部分(字节相乘时为AH,字相乘时为DX)不为零,则CF1,OF1;否则CF=0,OF=0。其它标志位为任意值。l例3-32 无符号数乘法指令lMUL DL ;AXAX*DLlMUL CX ;DX:AXAX*CXlMUL BYTE PTR SI+8 ;AXAL*SI+8(2)有符号数乘法指令l格式:IMUL SRCl功能:与MUL的功能相同,只是要求两乘数都必须为有符号数。l例3-33两个有符号数的乘法lMOV AL,FEH ;ALFEH,FEH看作有符号数-2lMOV CL,11H ;CL11H,11H看作有符号数17lIMUL CL ;

23、AXFFDEH,执行02H*11H, 将乘积结果取补码得FFDEH=-34(3)非组合BCD码乘法调整指令l格式:AAMl功能:用于将非组合BCD码乘法的结果(在AL中)转换成两个非组合型BCD码(AH和AL中)l例3-34 两个非组合BCD码的乘法运算。lMOV AL,,06H ;AL06HlMOV BL,07H ;BL07HlMUL BL ;AX002AHlAAM ;AX0402H返返 回回(1)无符号数除法指令l格式:DIV SRCl功能:a.字节除法:将AX/SRC的商送入AL,将AX/SRC的余数送入AHlb.字除法:将DX:AX/SRC的商送入AX,将DX:AX/SRC的余数送入D

24、Xl例3-35 无符号数除法指令lDIV CL ;AX中的16位数除以CL中的8位数, 商送AL,余数送AHlDIV CX ;DX和AX中的32位数除以CX中的16位数, 商送AX,余数送DX(2)有符号数除法指令l格式:IDIV SRCl功能:与DIV指令相比只有两点不同:la.两个操作数均为有符号数。lb.如果被除数不是除数的两倍长度,对被除数要用专门的指令进行符号扩展,以产生双倍长度表示的被除数。 (3)非组合BCD码除法调整指令l格式:AADl功能:AAD指令常用于DIV指令之前,将AX中的两位非组合BCD码变为二进制数l例3-36 两个非组合BCD码的除法运算。lMOV AX, 06

25、05H ;AX0605HlMOV BL,07H ;BL07HlAAD ;AX0041HlDIV BL ;商值AL09,余数AH02H(4)有符号扩展指令l格式:CBW CWDl功能:CBW为字节扩展指令,将AL中有符号数的符号位扩展到AH中l例3-37lMOV AL,12H ;AL12HlCBW ;AX0012H,AH=00HlMOV AX,BBA3HlCWD ;DXFFFFH,AXBBA3H返返 回回3.2.3 逻辑运算与移位指令l1逻辑运算指令l2移位指令l3循环移位指令返返 回回1逻辑运算指令l例3-38lAND AL,0FH ;AL中的内容和OFH相与,结果在AL中lAND AX,BX

26、 ;AX和BX中的内容相与,结果在AX中lAND DX,BX+SI ;lOR AX,00F0H ;AX和00F0相或,结果在AX中lXOR AL,0FH ;AL和0FH相异或,结果在AL中lXOR AX,AX ;AX的内容本身进行异或,结果AX清零l例3-39lTEST AX,8000H ;如果AX的最高位为1,则ZF0,否则ZF=1lTEST AL,01H ;如果AL的最低位为1,则ZF=0, 否则ZF=1l例3-40lNOT AL ;AL中内容求反码,结果在AL中lNOT BX ;BX中内容求反码,结果在BX中lNOT WORD PTR 1000H ;1000H和1001Hl 2个单元中

27、的内容求反码,再送回这2个单元中l例3-41lAND AL,0FH ;AL中的高4位请零lOR AL,0FH ;AL中的低4位置1lXOR AL,0FH ;AL中的低4位求反lTEST AL,0FH ;检查AL中的低4位是否全为零返返 回回2移位指令l例例3-42将将AL寄存器中的数据左移寄存器中的数据左移1位,位,BL寄存器中的数据右移寄存器中的数据右移4位位l MOV AL,52H ;AL52Hl MOV BL,63H ;BL63Hl MOV CL,04H ;CL04Hl SHL AL,1 ;ALA4Hl SHR BL,CL ;BL0CH最高位最低位CF0最高位最低位CF0最高位最低位CF

28、0最高位最低位CFa)算术左移指令SALd)逻辑右移指令SHRb)逻辑左移指令SHLc)算术右移指令SAR返返 回回3循环移位指令l例例3-43 将将AX的最高位移入的最高位移入DX的最低位的最低位lRCL AX,1 ;将;将AX的最高位移位的最高位移位CFlRCL DX,1 ;将;将CF移入移入DX的最低位的最低位l例例3-44 将将AX00A2H,BX=00B4H,装配在一起形成,装配在一起形成AXA2B4H lMOV CL,8 ;(CL)移位数移位数8lROL AX,CL ;AX循环左移循环左移8位,(位,(AX)=A200HlADD AX,BX c)不带CF的循环右移指令ROR最高位最

29、低位CF最高位最低位CF最高位最低位CF0最高位最低位CFa)不带CF的循环左移指令ROLb)带CF的循环左移指令RCLd)带CF的循环右移指令RCR返返 回回3.2.4 串操作指令l1基本串操作指令l2重复前缀指令返返 回回1基本串操作指令l(1)串传送指令lMOVSB ;字节传送,ES:DIDS:SI,l SISI1,DIDI 1lMOVSW ;字传送,ES:DIDS:SI,l SISI 2,DIDI 2l(2)取串指令lLODSB ;字节传送,ALDS:SI,SISI 1lLODSW ;字传送,AXDS:SI,SISI 2l(3)存串指令lSTOSB ;字节传送,ES:DIAL,DIDI

30、 1lSTOSW ;字传送,ES:DIAX,DIDI 2.l(4)串比较指令lCMPSB ;字节传送ES:SI-DS:DI,SISI 1,DIDI 1lCMPSW ;字传送,ES:SI-DS:DI,SISI 2,DIDI 2l5)串搜索指令lSCASB ;字节传送,AL-ES:DI,DIDI 1.lSCASW ;字传送,AX-ES:DI,DIDI 22重复前缀指令l格式: REP ;无条件重复前缀指令l REPE/REPZ ;条件重复前缀指令l REPNE/REPNZ ;条件重复前缀指令lREP指令用在MOVS、STOS指令之前,每执行一次串指令,CX(CX)-1,直到CX=0,重复执行结束l

31、REPE/REPZ指令用在CMPS、SCAS指令之前,每执行一次串指令,CX(CX)-1,并判断ZF标志位是否为0;只要CX=0或ZF=0,则重复执行结束lREPNE/REPNZ指令用在CMPS、SCAS指令之前,每执行一次串指令,CX(CX)-1,并判断ZF标志位是否为1;只要CX=0或ZF=1,则重复执行结束lLODS指令之前不能添加重复前缀例题l例3-45将首地址为SRC的源字符串传送到DEST为首地址的内存区,字符串的长度为N个字节。lCLD ;DF=0,增量方向lLEA SI,SRC ;DS:SI字符串首地址lLEA DI,ES:DEST ;ES:DI目标地址lMOV CX,N ;字

32、符串长度lREP MOVSB ;重复字符串传送l例3-46比较两个字符串是否有相同的元素,它们的首地址和目标地址分别为SRC和DEST,字符串的长度为N个字节。lCLD ;DF=0,增量方向lLEA SI,SRC ;DS:SI字符串首地址lLEA DI,ES:DEST ;ES:DI目标地址lMOV CX,N ;字符串长度lREPNE CMPSB ;重复比较字符串lJNZ NOT_FOUNT ;无相同的元素,转NOT_FOUNT,l 否则继续执行下条指令例题l例3-47在首地址为ES:DEST的字符串中检查是否有字符M,字符串的长度为N个字节。lCLD ;DF=0,增量方向lLEA DI,ES:

33、DEST ;ES:DI目标地址lMOV CX,N ;字符串长度lMOV AL,M ;AL搜索字符lREPNE SCASB ;重复搜索字符串是否有字符Ml例3-48将首地址为DS:SRC的字节数据串中非0元素送到首地址为ES:DEST的内存区中。字符串长度为N。l CLD ;DF=0,增量方向l LEA SI,SRC ;DS:SI字符串首地址l LEA DI,ES:DEST ;ES:DI目标地址l MOV CX,N ;字符串长度lGOON: LODSB ;取字符串的一个元素l CMP AL,0 ;字符串元素为0吗?l JZ NEXT ;是0,继续下一个元素l STOSB ;非0,存入首地址为ES

34、:DEST的内存区中lNEXT: DEC CXl JNE GOON 返返 回回3.2.5 控制转移指令l1无条件转移指令l2过程调用及返回指令l3条件转移指令l4循环控制指令l5中断指令返返 回回1无条件转移指令l(1)段内直接转移lJMP 1200H ;IP1200H,直接转移到1200H去执行指令lJMP SHORT LOOP ;IP(IP)+8位偏移量,段内短转移,l 转向符号地址LOOP处lJMP NEAR PTR L2 ;IP(IP)+16位偏移量,段内近转移,l 转向符号地址L2处l(2)段内间接转移lJMP CX ;IP(CX)lJMP AX+SI ;IPAX+SIlJMP WO

35、RD PTR SI ;IP(SI)所指定的存储器字单元之中的16位数据l(3)段间直接转移lJMP FAR PTR NEXT ;CS:IP新的段基址和新的偏移地址l(4)段间间接转移lJMP DWORD PTR DI ;(IP) (DS:DI),(CS) (DS:DI+2)2过程调用及返回指令l(1)调用指令l 段内直接调用lCALL;SP(SP)-2,SS:SP IP;IP(IP)+16位偏移量l 段内间接调用lCALL BX ;SP(SP)-2,SS:SP IP;IPBX偏移量l 段间直接调用lCALL FAR PTR SUB2 ;SP(SP)-2,SS:SPCS;SP(SP)-2lSS:

36、SP IP,IPSUB2偏移地址,CSSUB2段地址l 段间间接调用lCALL FAR PTR SI ;SP(SP)-2,SS:SPCS;SP(SP)-2lSS:SP IP,IPSI,CSSI+22过程调用及返回指令l(2)返回指令l 无参数段内返回lRET ;IPSS:SP,SP(SP)+2l 有参数段内返回lRET n ;IPSS:SP,SP(SP)+2,SP(SP)+nl 无参数段间返回lRET ;IPSS:SP,SP(SP)+2, CSSS:SP,SP(SP)+2l 有参数段间返回lRET n ;IPSS:SP,SP(SP)+2, CSSS:SP,SP(SP)+2, SP(SP)n3条

37、件转移指令指令转移条件 说明JC DESTCF=1 有进位有进位/借位借位JNC DESTCF=0无进位无进位/借位借位JE/JZ DESTZF=1相等相等/等于零等于零JNE/JNZ DESTZF=0不相等不相等/不等于零不等于零JS DESTSF=1是负数是负数JNS DESTSF=0是正数是正数JO DESTOF=1有溢出有溢出JNO DESTOF=0无溢出无溢出JP/JPE DESTPF=1有偶数个有偶数个“1”JNP/JPO DESTPF=0有奇数个有奇数个“1”指令转移条件含义JG/JNLE DESTSF=OF AND ZF=0有符号数ABJGE/JNL DESTSF=OF OR

38、ZF=1有符号数ABJL/JNGE DESTSFOF AND ZF=0有符号数ABJGE/JNL DESTSF=OF OR ZF=1有符号数ABJL/JNGE DESTSFOF AND ZF=0有符号数A05H,则转向ABC4循环控制指令l格式:LOOP DEST ;(CX)0,则循环lLOOPE/LOOPZ DEST ;ZF=1且(CX0),则循环lLOOPNE/LOOPNZ DEST ;ZF=0且(CX)0,则循环lJCXZ DEST ;(CX)=0,则循环l例3-54在以DATA为首地址的内存数据段中,存放有200个16位有符号数,试找出其中最大和最小的有符号数,并分别放在MAX和MIN

39、为首的内存单元中lSTART: LEA SI,DATA ;(SI) 数据块首地址l MOV CX,200 ;(CX) 数据块长度 l CLD ;清方向标志DFl LODSB ;(AX)一个16位有符号数l MOV MAX,AX ;将该数送MAXl MOV MIN,AX ;将该数送MINl DEC CX ;(CX) (CX)-1lNEXT: LODSW ;取下一个16位有符号数l CMP AX,MAX ;与MAX单元内容进行比较l JG LARGER ;若大于则转LARGERl CMP AX,MIN ;否则再与MIN单元内容进行比较 l JL SMALL ;若小于MIN的内容则转SMALLl J

40、MP GOON ;否则就转至GOONlLARGER:MOV MAX, AX ;(MAX) (AX)l JMP GOON lSMALL: MOV MIN,AX ;(MIN) (AX)lGOON: LOOP NEXT ;(CX)-1,若CX0,则转NEXTl HLT5中断指令l(1)中断指令l格式:INT nl功能:用于产生软件中断,以调用中断类型号为n的中断服务程序 n为一个8位立即数,取值范围为0255。l(2)溢出中断指令l格式:INTOl功能:用来判断有符号数加减运算是否溢出。一般把INTO指令安排在有符号数加、减运算指令的后面,一旦查出OF=1。则转到溢出中断处理程序。INTO指令是n4

41、的INT指令。其中断向量为0010H。l(3)中断返回指令l格式:IRETl功能:将堆栈中的断点地址弹出赋给IP和CS,以实现中断返回;将标志寄存器的值弹出,恢复中断前的状态。返返 回回3.2.6 处理器控制指令l1标志操作指令lCLC ;CF0,进位标志位置0(Clear carry)lSTC ;CF1,进位标志位置1(Set carry)lCMC ;CF= 进位标志取反(complement Carry)lCLD ;DF0方向标志位置0(clear direction)lSTD ;DF1方向标志位置1(set direction)lCLI ;IF0中断允许标志位置0(clear inter

42、rupt)lSTI ;IF1中断允许标志位置1(set interrupt)l外部同步指令l(1)暂停指令HLTl(2)等待指令WAITl(3)交权指令ESCl(4)封锁指令l(5)空操作指令返返 回回3.3 80X86与Pentium扩充和增加的指令l3.3.1 80286扩充和增加的指令l3.3.2 80386扩充和增加的指令l3.3.3 80486新增加的指令l3.3.4 Pentium新增加的指令 返返 回回3.3.1 80286扩充和增加的指令l180286扩充功能的指令l(1)堆栈操作指令PUSH SRCl l(2)有符号数乘法指令lIMUL DEST,SRC lIMUL DEST,SRC1,SRC2 ;l例3-55 有符号数乘法lIMUL CX,205 ; (CX) (CX)205lIMUL DX,BP,68H ; (DX)BP68Hl(3)移位指令l例3-56 下列指令都是正确的lSAL AX,9lROL BP,29lRCR BXSI,31lSAR DX,6;算术右移6次3.3.1 80286扩充和增加的指令l280286增加的指令l(1)栈操作指令PUSHA、POPA

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论