微机原理 寻址方式指.ppt

上传人:s****8 文档编号:82787146 上传时间:2023-03-26 格式:PPT 页数:78 大小:538KB
返回 下载 相关 举报
微机原理 寻址方式指.ppt_第1页
第1页 / 共78页
微机原理 寻址方式指.ppt_第2页
第2页 / 共78页
点击查看更多>>
资源描述

《微机原理 寻址方式指.ppt》由会员分享,可在线阅读,更多相关《微机原理 寻址方式指.ppt(78页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、机电工程系第第3章章 寻址方式和指令系统寻址方式和指令系统v用来指挥和控制计算机完成指定操作的命令称为指令。不同的微处理器具有各自不同的指令。v每种微处理器能够识别和执行的所有指令的集合称为该微处理器的指令系统。机电工程系3.1 寻址方式寻址方式v计算机的指令一般由操作码和操作数两部分组成。操作码表示指令所要执行的操作,操作数表示指令执行过程中操作的对象。v所谓寻址方式,就是寻找操作数或操作数地址的方式。与数据有关的寻址方式有:立即数寻址寄存器寻址直接寻址寄存器间接寻址存储器相对寻址基址变址寻址基址变址相对寻址寄存器比例寻址机电工程系3.1.1 立即数寻址立即数寻址v立即数,操作数直接包含在指

2、令中,作为指令的一部分存放在代码段中v例3-1vMOV AX,2004H ;(AH)=20H,(AL)=04HvMOV BL,5AH ;(BL)=5AHvMOV EAX,22334455H ;(EAX)=22334455H,v (AX)=4455Hv立即数常用于给寄存器赋初值,只能作源操作数,不能作目的操作数 机电工程系3.1.2 寄存器寻址寄存器寻址v操作数存放在指令指定的8位、16位或32位通用寄存器中。v例3-2 寄存器寻址vMOV AX,BX ;将BX中的内容送入AX中,v BX中的内容保持不变vMOV SI,DI ;将DI中的内容送入SI中,v DI中的内容保持不变vMOV EAX,

3、EBX ;将EBX中的内容送入EAX中机电工程系3.1.3 直接寻址直接寻址v直接寻址指的是操作数在存储器中的有效地址EA直接包含在指令中,书写时有效地址加上中括号例3-3 存储器直接寻址MOV AX,1000H ;将DS段的1000H和1001H两个 单元的内容送入AX寄存器中MOV EAX,ES:2000H ;将ES段的2000H2003H四个 单元的内容送入EAX寄存中,其中ES为段超越前缀MOV AX,BUF ;将DS段内以有效地址BUF (符号地址)起始的两个单元的内容送入AX寄存器中机电工程系3.1.4 寄存器间接寻址寄存器间接寻址v操作数的有效地址EA放在基址寄存器BX,BP,或

4、变址寄存器SI,DI中。v操作数的物理地址为:v(DS)16(SI/DI/BX)或(SS)16(BP)例3-4 假定(DS)2000H,(SI)=3600H,(23600H)=6022HMOV AX,SI ;先将DS中的值左移4位,然后与SI中的值相加,形成物理地址是23600H,再将该物理地址中的 数据6022H送入AX寄存器中例3-5 假定(SS)=3000H,(BP)=1100H,(31100H)=5E28HMOV BX,BP 例3-6 偏移量为32位时的寄存器间接寻址MOV EAX,ECX MOV EAX,DX机电工程系3.1.5 寄存器相对寻址寄存器相对寻址v操作数的有效地址是一个基

5、址寄存器或变址寄存器中存放的数据加上指令给出的8位或16位偏移量,其物理地址为:(DS)16(SI/DI/BX)8位或16位偏移量 或(SS)16(BP)8位或16 位偏移量例3-7 假定(DS)=2000H,(SS)=3000H,(SI)=3600H,(BP)=1100H,COUNT=10H,(23620H)=8A76H,(31110H)=4567H MOV AX,SI+20H MOV BX,BP+COUNTv指令MOV BX,BP+COUNT书写有下面的等效形式:v MOV BX,BP+COUNTv MOV BX,COUNTBP机电工程系3.1.6 基址变址寻址基址变址寻址v操作数的有效地

6、址是一个基址寄存器和一个变址寄存器的内容之和。其物理地址为:(DS)16(BX)(SI/DI)或(SS)16+(BP)+(SI/DI)v例3-8基址变址寻址,假定(DS)=2000H,(SS)3000H,(BX)=1800H,(BP)=2080H,(DI)=1000H,(SI)=0800H,(22800H)=80CFH,(32880H)=067AHMOV AX,BXDIMOV AX,BP+SI 机电工程系3.1.7 基址变址相对寻址基址变址相对寻址v操作数的有效地址是一个基址寄存器内容和一个变址寄存器的内容和8位或16位偏移量相加之加,其物理地址为:(DS)16(BX)+(SI/DI)+8位或

7、16位偏移量(SS)16(BP)+(SI/DI)+8位或16位偏移量v例3-9基址变址相对寻址MOV AX,BX+SI+100HMOV 20H BP+SI,AXMOV CX,DS:BX+SI+NUMMOV DX,SS:NUMDIBPv例3-10 32位偏移量的寄存器比例寻址MOV EAX,DAT EBX+ESIMOV EAX,NUM EBP+EDI机电工程系3.1.8 寄存器比例寻址寄存器比例寻址v这种寻址方式中,形成存储器操作数的有效地址可以采用:(1)变址寄存器的内容乘以比例因子,再加上偏移量,称为比例变址方式(2)变址寄存器的内容乘以比例因子,再加上基址寄存器的内容,称为基址比例变址方式

8、。(3)变址寄存器的内容乘以比例因子,再加上基址寄存器的内容和偏移量,称为基址比例变址偏移方式。v例3-11 寄存器比例寻址MOV EAX,XEDI*4 MOV EBX,EDI*8EBX ;EA=(EDI)*8+(EBX)MOV EAX,XESI*4EBP ;EA=(ESI)*4+(EBP)+X机电工程系3.2 8086指令系统指令系统v8086指令系统是80 x86的基本指令集,按功能可以把这些指令分为六种类型:数据传送指令算术运算指令逻辑运算与移位指令串操作指令控制转移指令处理器控制指令机电工程系3.2.1 数据传送指令数据传送指令v数据传送指令用于寄存器,存储单元和输入输出端口之间传送数

9、据或地址。除SAHF和POPF外,对标志无影响。主要有四类:1通用数据传送指令2地址传送指令3标志传送指令4输入输出指令机电工程系1通用数据传送指令通用数据传送指令v(1)基本的传送指令movv格式:MOV DEST,SRCv功能:将源操作数的内容传送到目的操作数v例3-12 基本的传送指令vMOV AL,30H ;立即数传送到寄存器vMOV AL,BL ;寄存器之间传送字节数据vMOV SI,BX+62H ;寄存器和存储器之间传送数据v例3-13下列指令是不合法的。vMOV 6234H,AX ;立即数不能用于目的操作数vMOV CS,AX ;CS不能用于目的操作数vMOV IP,AX ;IP

10、不能用于目的操作数vMOV DS,4234H ;立即数不能直接传送给段寄存器vMOV AL,BX ;源操作数与目的操作数的位数必须一致vMOV BUF1,BUF2 ;不能在两个存储器单元之间传送数据vMOV DS,ES ;不能在两个段寄存器之间传送数据机电工程系(2)交换指令)交换指令v格式:XCHG DEST,SRCv功能:将源操作数与目的操作数的内容交换(Exchange)v例3-14 交换指令vXCHG AL,CL ;字节交换vXCHG BX,SI ;字交换vXCHG AX,BX+SI ;寄存器和存储器之间交换数据v例3-15 下列指令是非法的vXCHG AX,6234H ;寄存器与立即

11、数之间不能交换vXCHG BUF1,BUF2 ;存储器单元与存储器单元之间不能交换vXCHG ADDR,4234H ;存储器单元与立即数之间不能交换vXCHG CS,DATBX ;不能与CS(或IP)寄存器进行交换机电工程系(3)堆栈操作指令)堆栈操作指令v堆栈是按“先进后出”原则工作的一段存储器区域 v格式:PUSH SRCv POP DESTv例3-16 将16位通用寄存器CX的内容压入堆栈,然后,弹出栈顶至CX中,已知:(SS)=0200H,(SP)=0008H,(CX)=12FAH,其示意图见图3-1和图3-2。-2020012FA162006200712FAH2000存储器SS段首地

12、址新栈顶原栈顶120008SSCXSP2008FA+12FAH+216存储器SS段首地址新栈顶原栈顶CXSPSS020012FA0008200620072008FA122000+机电工程系(4)换码指令)换码指令v格式:XLATv功能:这是一条专门用于AL和字节表中某一存储单元之间执行数据传送的指令。执行(AL)BX+AL的操作,使AL中的一个值变换为内存表格中的某一个值,实现编码的转换。v例3-17 在内存的数据段中存放有一张数值09的ASCII码转换表,首地址为Hex_table,如图3-3所示。现要把数值8转换成对应的ASCII码,可用以下几条指令实现:LEA BX,Hex_table

13、;(BX)表首偏移地址MOV AL,8 ;(AL)8XLAT ;查表转换Hex_table+0Hex_table+1Hex_table+2Hex_table+8Hex_table+90128930H31H32H38H39H机电工程系2.地址传送指令地址传送指令v(1)有效地址传送指令v格式:LEA DEST,SRCv功能:这是一条取有效地址的指令(Load effective address)。它用来将源操作数的偏移地址传送到通用寄存器、指针或变址寄存器中 v例3-18 有效地址传送指令vMOV BX,3200H ;将3200H单元的内容送BXvLEA BX,3200H ;将有效地址3200H

14、送BXvLEA SI,ADDR ;将ADDR的有效地址送SI机电工程系(2)地址指针传送指令)地址指针传送指令v格式:LDS DEST,SRCv LES DEST,SRCv功能:将源操作数指定的连续4个存储器单元中存放的32位地址指针(包括一个段地址和一个偏移地址)传送到两个16位寄存器 v例3-19 地址指针传送指令vPOINT DD 55663344H ;设定POINT的段地址和偏移地址v LDS BX,POINT ;(BX)=3344H,(DS)=5566Hv LES BX,POINT ;(BX)=3344H,(ES)=5566H机电工程系3.标志传送指令标志传送指令v(1)标志读写指令

15、v格式:LAHF/SAHFv功能: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)标志入栈出栈指令)标志入栈出栈指令v格式:PUSHF/POPFv功能:vPUSHF指令是将标志寄存器中的内容压入堆栈,指令的操作为SP-1(FLAGSH),SP-2(FLAGSL),(SP)(SP)-2vPOPF指

16、令是将栈顶的字单元内容弹出到标志寄存器中,同时SP(SP)+2机电工程系4输入输出指令输入输出指令v格式:IN DEST,SRCv OUT DEST,SRCv功能:专门用于累加器和I/O端口之间执行数据传送v例3-20 输入输出指令vIN AL,28H ;从端口28H输入一个字节到ALvOUT 15,AL ;从AL输出一个字节到端口15vMOV DX,0362H ;先将端口地址送入DXvIN AX,DX ;从端口0362H输入一个字到AX机电工程系3.2.2 算术运算指令算术运算指令v算术运算指令包括加,减,乘,除4种基本的运算指令。v算术运算指令除了符号扩展指令,均不同程度影响标志位。机电工

17、程系1.加法指令加法指令v(1)不带进位加法指令v格式:ADD DEST,SRCv功能:将源操作数与目的操作数相加,结果送入原存放目的操作数的地方。该指令对标志位有影响。v例3-21 不带进位加法指令vADD CL,20H ;(CL)(CL)+20HvADD AX,SI ;(AX)(AX)+(SI)vADD DATA BX,AL;(BX)+DATA)(BX)+DATA)+(AL)vADD DX,BX+SI ;(DX)(DX)+(BX)+(SI)机电工程系(2)带进位加法指令)带进位加法指令v格式:ADC DEST,SRCv功能:将源操作数和目的操作数相加,同时加上进位标志的现行值CF,结果送入

18、原存放目的操作数的地方v例3-22 带进位加法指令vADC AX,SI ;(AX)(AX)+(SI)+CFvADC BX,3000H ;(BX)(BX)+3000H+CFvADC AX,DATSI ;(AX)(AX)+(SI+DAT)+CF机电工程系(3)加)加1指令指令v格式:INC DESTv功能:将目的操作数中的内容加1,然后送回该操作数。目的操作数可以是寄存器或存储器。该指令一般用在循环程序中修改指针和循环次数v例3-23 加1指令vINC BX ;(BX)(BX)+1vINC BYTE PTR DI+100H ;将(DI)100H所指的字节单元内容加1机电工程系(4)BCD码加法十进

19、制调整指令码加法十进制调整指令v 未组合BCD码的加法调整指令 v格式:AAAv功能:将AL的内容调整为一位非组合型的十进制数 v例3-24 两个未组合BCD码的加法运算,设(AH)=0vMOV AL,08 ;(AL)08 (AL)=00001000vADD AL,09 ;(AL)08+09 (AL)=00010001=11HvAAA ;AF=1,(AH)(AH)+01,AL(AL+6),AL高4位v 为0,(AL)=00000111,结果(AX)=0107 AF=1 CF=1v 组合BCD码的加法调整指令v格式:DAAv功能:将AL的内容调整为两位组合型的二进制数。调整方法与AAA指令类似,

20、不同的是DAA指令要分别考虑AL的高4位和低4位。如果AL的低4位大于9或AF1,则AL的内容加6,并将AF置1;如果AL 的高4位大于9或CF=1,则AL的内容加60H,且将CF置1。v例3-25 两个组合BCD码的加法运算vMOV AL,37 ;(AL)37vMOV BL,35 ;(BL)35vADD AL,BL ;(AL)=6CH,AF=0,CF=0vDAA ;因为AL中的低4位大于9,所以(AL)(AL)+06,v 结果(AL)=72,AF=1,CF=0机电工程系2.减法指令减法指令v(1)不带借位的减法指令v格式:SUB DEST,SRCv功能:将目的操作数减去源操作数,结果送入目的

21、操作数。v例3-26 不带借位的减法指令vSUB AX,3000H ;(AX)(AX)-3000HvSUB BX,SI+100H ;(BX)(BX)-SI+100H机电工程系(2)带借位的减法指令)带借位的减法指令v格式:SBB DEST,SRCv功能:将目的操作数减去源操作数,还要减去CF的值,结果送入目的操作数v例3-27 带借位的减法指令vSBB AX,BX ;(AX)(AX)-(BX)-CFvSBB WORD PTR SI,1068H ;(SI)(SI)-1068H-CF机电工程系(3)减)减1指令指令v格式:DEC DESTv功能:将目的操作数的内容减1,然后送回目的操作数。v例3-

22、28 减1指令vDEC BL ;(BL)(BL)-1vDEC BYTE PTRDI+2;DI+2DI+2-1机电工程系(4)求补指令)求补指令v格式:NEG DESTv功能:对目的操作数取补码,即用零减去此操作数,结果送回此操作数中。v例3-29设(AX)=020H,(BX)2212HvNEG AX;(AX)0-(AX),结果(AX)=0FEHvNEG BX;(BX)0-(BX),结果(BX)=DDEEH机电工程系(5)比较指令)比较指令v格式:CMP DEST,SRCv功能:将目的操作数减去源操作数,结果不送回目的操作数,二操作数原值不变,只是影响状态标志位。其余同SUB指令。v这条指令后边

23、一般跟条件转移指令,以判断二操作数是否满足某种关系。根据比较结果对标志位的影响来实现程序的分支。机电工程系(6)BCD码减法十进制调整指令码减法十进制调整指令v 未组合BCD码的减法调整指令v格式:AASv功能:与AAA指令类似是将AL的内容调整为一位非组合型的十进制数v例3-30 两个未组合BCD码的减法运算vMOV AX,0608H ;AX0608HvSUB AL,09H ;AL0FFHvAAS ;AL09H,AH05Hv 组合BCD码的减法调整指令v格式:DASv功能:与DAA指令类似,是将AL 的内容转换成两位组合型的十进制数v例3-31:两个组合BCD码的减法运算vMOV AL,73

24、H ;AL73HvSUB AL,27H ;AL4CHvDAS ;AL46H机电工程系3.乘法指令乘法指令v(1)无符号数乘法指令v格式:MUL SRCv功能:字节相乘时,AL与源操作数相乘,乘积为16位送入AX中;字相乘时,AX与源操作数相乘,乘积为32位,高16位送DX,低16位送AX。v对标志位影响:若乘积的高半部分(字节相乘时为AH,字相乘时为DX)不为零,则CF1,OF1;否则CF=0,OF=0。其它标志位为任意值。v例3-32 无符号数乘法指令vMUL DL ;AXAX*DLvMUL CX ;DX:AXAX*CXvMUL BYTE PTR SI+8 ;AXAL*SI+8机电工程系(2

25、)有符号数乘法指令)有符号数乘法指令v格式:IMUL SRCv功能:与MUL的功能相同,只是要求两乘数都必须为有符号数。v例3-33两个有符号数的乘法vMOV AL,FEH ;ALFEH,FEH看作有符号数-2vMOV CL,11H ;CL11H,11H看作有符号数17vIMUL CL ;AXFFDEH,执行02H*11H,v 将乘积结果取补码,FFDEH=-34机电工程系(3)非组合)非组合BCD码乘法调整指令码乘法调整指令v格式:AAMv功能:用于将非组合BCD码乘法的结果(在AL中)转换成两个非组合型BCD码(AH和AL中)v例3-34 两个非组合BCD码的乘法运算。vMOV AL,,0

26、6H ;AL06HvMOV BL,07H ;BL07HvMUL BL ;AX002AHvAAM ;AX0402H机电工程系4.除法指令除法指令v(1)无符号数除法指令v格式:DIV SRCv功能:a.字节除法:将AX/SRC的商送入AL,将AX/SRC的余数送入AHvb.字除法:将DX:AX/SRC的商送入AX,将DX:AX/SRC的余数送入DXv例3-35 无符号数除法指令vDIV CL;AX中的16位数除以CL中的8位数,商送AL,余数送AHvDIV CX ;DX和AX中的32位数除以CX中的16位数,v 商送AX,余数送DX机电工程系(2)有符号数除法指令)有符号数除法指令v格式:IDI

27、V SRCv功能:与DIV指令相比只有两点不同:va.两个操作数均为有符号数。vb.如果被除数不是除数的两倍长度,对被除数要用专门的指令进行符号扩展,以产生双倍长度表示的被除数。机电工程系(3)非组合)非组合BCD码除法调整指令码除法调整指令v格式:AADv功能:AAD指令常用于DIV指令之前,将AX中的两位非组合BCD码变为二进制数v例3-36 两个非组合BCD码的除法运算。vMOV AX,0605H ;AX0605HvMOV BL,07H ;BL07HvAAD ;AX0041HvDIV BL ;商值AL09,余数AH02H机电工程系(4)有符号扩展指令)有符号扩展指令v格式:CBWv CW

28、Dv功能:CBW为字节扩展指令,将AL中有符号数的符号位扩展到AH中v例3-37vMOV AL,12H ;AL12HvCBW ;AX0012H,AH=00HvMOV AX,BBA3HvCWD ;DXFFFFH,AXBBA3H机电工程系3.2.3 逻辑运算与移位指令逻辑运算与移位指令v逻辑运算与移位指令包括逻辑运算指令,移位指令,循环移位指令。机电工程系1逻辑运算指令逻辑运算指令v逻辑运算指令主要用于对寄存器或存储器单元中某些位的测试,置位,复位等操作。逻辑运算指令对操作数都是按位进行操作,对相应的标志位产生影响,操作数可以是字节或字。v格式:AND DEST,SRCv OR DEST,SRCv

29、 NOT DESTv XOR DEST,SRCv TEST DEST,SRC机电工程系v例3-38vAND AL,0FH ;AL中的内容和OFH相与,结果在AL中vAND AX,BX ;AX和BX中的内容相与,结果在AX中vAND DX,BX+SI;vOR AX,00F0H ;AX和00F0相或,结果在AX中vXOR AL,0FH ;AL和0FH相异或,结果在AL中vXOR AX,AX ;AX的内容本身进行异或,结果AX清零v例3-39vTEST AX,8000H ;如果AX的最高位为1,则ZF0,否则ZF=1vTEST AL,01H ;如果AL的最低位为1,则ZF=0,否则ZF=1v例3-4

30、0vNOT AL ;AL中内容求反码,结果在AL中vNOT BX ;BX中内容求反码,结果在BX中vNOT WORD PTR 1000H ;1000H和1001Hv 2个单元中 的内容求反码,再送回这2个单元中v例3-41vAND AL,0FH ;AL中的高4位请零vOR AL,0FH ;AL中的低4位置1vXOR AL,0FH ;AL中的低4位求反vTEST AL,0FH ;检查AL中的低4位是否全为零机电工程系2.移位指令移位指令v移位指令可以对寄存器或存储器单元按字节或字进行操作,移位指令包括:算术左移指令SAL,算术右移指令SAR,逻辑左移指令SHL,逻辑右移指令SHR。v格式:SAL

31、 DEST,COUNTv SAR DEST,COUNTv SHL DEST,COUNTv SHR DEST,COUNT机电工程系v例例3-42将将AL寄存器中的数据左移寄存器中的数据左移1位,位,BL寄存器中的数据右移寄存器中的数据右移4位位 MOV AL,52H ;AL52H MOV BL,63H ;BL63H MOV CL,04H ;CL04H SHL AL,1 ;ALA4H SHR BL,CL ;BL0CH最高位最低位CF0最高位最低位CF0最高位最低位CF0最高位最低位CFa)算术左移指令SALd)逻辑右移指令SHRb)逻辑左移指令SHLc)算术右移指令SAR机电工程系3循环移位指令循

32、环移位指令v循环移位指令包括,不含进位位的循环左移指令ROL,不含进位位的循环右移指令ROR,含进位位的循环左移指令RCL,含进位位的循环右移指令RCR。v格式:ROL DEST,COUNTv ROR DEST,COUNTv RCL DEST,CPUNTv RCR DEST,COUNT机电工程系v例例3-43 将将AX的最高位移入的最高位移入DX的最低位的最低位RCL AX,1 ;将;将AX的最高位移位的最高位移位CFRCL DX,1 ;将;将CF移入移入DX的最低位的最低位v例例3-44 将将AX00A2H,BX=00B4H,装配在一起形成,装配在一起形成AXA2B4H MOV CL,8 ;

33、(CL)移位数移位数8ROL AX,CL ;AX循环左移循环左移8位,(位,(AX)=A200HADD AX,BX c)不带CF的循环右移指令ROR最高位最低位CF最高位最低位CF最高位最低位CF0最高位最低位CFa)不带CF的循环左移指令ROLb)带CF的循环左移指令RCLd)带CF的循环右移指令RCR机电工程系3.2.4 串操作指令串操作指令v串操作指令就是用一条指令实现对存储器中一串字符或数据的操作。8086指令系统提供了5条基本的串操作指令和一条重复前缀指令。机电工程系1基本串操作指令基本串操作指令v(1)串传送指令vMOVSB ;字节传送,ES:DIDS:SI,v SISI1,DID

34、I 1vMOVSW ;字传送,ES:DIDS:SI,v SISI 2,DIDI 2v(2)取串指令vLODSB ;字节传送,ALDS:SI,SISI 1vLODSW ;字传送,AXDS:SI,SISI 2v(3)存串指令vSTOSB ;字节传送,ES:DIAL,DIDI 1vSTOSW ;字传送,ES:DIAX,DIDI 2.机电工程系v(4)串比较指令vCMPSB;字节传送ES:SI-DS:DI,SISI 1,DIDI 1vCMPSW ;字传送,ES:SI-DS:DI,SISI 2,DIDI 2v5)串搜索指令vSCASB ;字节传送,AL-ES:DI,DIDI 1.vSCASW ;字传送,

35、AX-ES:DI,DIDI 2机电工程系2重复前缀指令重复前缀指令v格式:REP ;无条件重复前缀指令v REPE/REPZ ;条件重复前缀指令v REPNE/REPNZ ;条件重复前缀指令REP指令用在MOVS、STOS指令之前,每执行一次串指令,CX(CX)-1,直到CX=0,重复执行结束REPE/REPZ指令用在CMPS、SCAS指令之前,每执行一次串指令,CX(CX)-1,并判断ZF标志位是否为0;只要CX=0或ZF=0,则重复执行结束REPNE/REPNZ指令用在CMPS、SCAS指令之前,每执行一次串指令,CX(CX)-1,并判断ZF标志位是否为1;只要CX=0或ZF=1,则重复执

36、行结束LODS指令之前不能添加重复前缀机电工程系例题例题v例3-45将首地址为SRC的源字符串传送到DEST为首地址的内存区,字符串的长度为N个字节。vCLD ;DF=0,增量方向vLEA SI,SRC ;DS:SI字符串首地址vLEA DI,ES:DEST ;ES:DI目标地址vMOV CX,N ;字符串长度vREP MOVSB ;重复字符串传送机电工程系v例3-46比较两个字符串是否有相同的元素,它们的首地址和目标地址分别为SRC和DEST,字符串的长度为N个字节。vCLD ;DF=0,增量方向vLEA SI,SRC ;DS:SI字符串首地址vLEA DI,ES:DEST ;ES:DI目标

37、地址vMOV CX,N ;字符串长度vREPNE CMPSB ;重复比较字符串vJNZ NOT_FOUNT ;无相同的元素,转 NOT_FOUNT,否则继续执行下条指令机电工程系例题例题v例3-47在首地址为ES:DEST的字符串中检查是否有字符M,字符串的长度为N个字节。vCLD ;DF=0,增量方向vLEA DI,ES:DEST ;ES:DI目标地址vMOV CX,N ;字符串长度vMOV AL,M ;AL搜索字符vREPNE SCASB ;重复搜索字符串是否有字符M机电工程系v例3-48将首地址为DS:SRC的字节数据串中非0元素送到首地址为ES:DEST的内存区中。字符串长度为N。CL

38、D;DF=0,增量方向LEASI,SRC;DS:SI字符串首地址LEADI,ES:DEST;ES:DI目标地址MOVCX,N;字符串长度GOON:LODSB;取字符串的一个元素CMPAL,0;字符串元素为0吗?JZNEXT;是0,继续下一个元素STOSB;非0,存入首地址为ES:DEST的内存区中NEXT:DECCXJNEGOON机电工程系3.2.5 控制转移指令控制转移指令v控制转移指令通过改变段寄存器CS和指令指针IP可以改变指令执行的顺序。v控制转移指令根据程序转移地址的不同:v1.段内转移只改变IP内容v2.段间转移改变IP和CS的内容机电工程系1无条件转移指令无条件转移指令v(1)段

39、内直接转移v程序转移有效地址是当前IP内容加上指令中给出的8位或16位偏移量。v如:vJMP 1200H ;IP1200H,直接转移到1200H去执行指令vJMP SHORT LOOP ;IP(IP)+8位偏移量,段内短转移,v 转向符号地址LOOP处vJMP NEAR PTR L2 ;IP(IP)+16位偏移量,段内近转移,v 转向符号地址L2处机电工程系v(2)段内间接转移v程序转移的偏移地址在寄存器或存储单元之中。v如:vJMP CX ;IP(CX)vJMP AX+SI ;IPAX+SIvJMP WORD PTR SI ;IP(SI)所指定的存储器字单元之中的16位数据机电工程系v(3)

40、段间直接转移v指令中直接给出转移地址的段地址和偏移地址:v如:vJMP FAR PTR NEXT ;CS:IP新的段基址和新的偏移地址v(4)段间间接转移v程序转移的段基址和偏移地址在存储单元之中v如:vJMP DWORD PTR DI ;(IP)(DS:DI),(CS)(DS:DI+2)机电工程系2过程调用及返回指令过程调用及返回指令v程序设计中,将具有独立功能的程序模块称为子程序,8086汇编中称为过程。v程序执行过程中,由调用程序使用调用指令调用这些子程序;当子程序执行后,通过返回指令返回主程序。机电工程系(1)调用指令)调用指令v格式:CALL 过程名v功能:调用已定义的过程,并将断点

41、地址压入堆栈保存。v 段内直接调用CALL;SP(SP)-2,SS:SP IP;IP(IP)+16位偏移量v 段内间接调用CALL BX;SP(SP)-2,SS:SP IP;IPBX偏移量v 段间直接调用CALL FAR PTR SUB2;SP(SP)-2,SS:SPCS;SP(SP)-2vSS:SP IP,IPSUB2偏移地址,CSSUB2段地址v 段间间接调用CALL FAR PTR SI ;SP(SP)-2,SS:SPCS;SP(SP)-2SS:SP IP,IPSI,CSSI+2机电工程系(2)返回指令)返回指令v格式:RET nv功能:将断点地址从堆栈中弹出,然后按返回地址继续执行。v

42、 无参数段内返回RET ;IPSS:SP,SP(SP)+2v 有参数段内返回RET n ;IPSS:SP,SP(SP)+2,SP(SP)+nv 无参数段间返回RET ;IPSS:SP,SP(SP)+2,CSSS:SP,SP(SP)+2v 有参数段间返回RET n ;IPSS:SP,SP(SP)+2,CSSS:SP,SP(SP)+2,SP(SP)n机电工程系3条件转移指令条件转移指令v格式:JXX DESTv功能:以标志位的状态或者以标志位的逻辑运算结果作为转移依据,如果满足转移条件,则转到DEST所指示的指令处执行,否则顺序执行下一条指令。v从指令的转移条件以及上条指令参加运算的操作数性质,可

43、以将它们分成三类:机电工程系v(1)根据单个标志位的状态判断转移的指令指令转移条件 说明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”机电工程系v(2)根据两个无符号数的比较结果判断转移的指令v(

44、3)根据两个有符号数的比较结果判断转移的指令指令转移条件含义JG/JNLE DESTSF=OF AND ZF=0有符号数ABJGE/JNL DESTSF=OF OR ZF=1有符号数ABJL/JNGE DESTSFOF AND ZF=0有符号数ABJGE/JNL DESTSF=OF OR ZF=1有符号数ABJL/JNGE DESTSFOF AND ZF=0有符号数A05H,则转向ABC机电工程系4循环控制指令循环控制指令v格式:LOOP DEST ;(CX)0,则循环vLOOPE/LOOPZ DEST ;ZF=1且(CX0),则循环vLOOPNE/LOOPNZ DEST ;ZF=0且(CX)

45、0,则循环vJCXZ DEST ;(CX)=0,则循环机电工程系v例3-54在以DATA为首地址的内存数据段中,存放有200个16位有符号数,试找出其中最大和最小的有符号数,并分别放在MAX和MIN为首的内存单元中vSTART:LEA SI,DATA ;(SI)数据块首地址v MOV CX,200 ;(CX)数据块长度 v CLD ;清方向标志DFv LODSB ;(AX)一个16位有符号数v MOV MAX,AX ;将该数送MAXv MOV MIN,AX ;将该数送MINv DEC CX ;(CX)(CX)-1vNEXT:LODSW ;取下一个16位有符号数v CMP AX,MAX ;与MA

46、X单元内容进行比较v JG LARGER ;若大于则转LARGERv CMP AX,MIN ;否则再与MIN单元内容进行比较 v JL SMALL ;若小于MIN的内容则转SMALLv JMP GOON ;否则就转至GOONvLARGER:MOV MAX,AX ;(MAX)(AX)v JMP GOON vSMALL:MOV MIN,AX ;(MIN)(AX)vGOON:LOOP NEXT ;(CX)-1,若CX0,则转NEXTv HLT机电工程系5中断指令中断指令v(1)中断指令格式:INT n功能:用于产生软件中断,以调用中断类型号为n的中断服务程序 n为一个8位立即数,取值范围为0255。

47、v(2)溢出中断指令格式:INTO功能:用来判断有符号数加减运算是否溢出。一般把INTO指令安排在有符号数加、减运算指令的后面,一旦查出OF=1。则转到溢出中断处理程序。INTO指令是n4的INT指令。其中断向量为0010H。v(3)中断返回指令格式:IRET功能:将堆栈中的断点地址弹出赋给IP和CS,以实现中断返回;将标志寄存器的值弹出,恢复中断前的状态。机电工程系3.2.6 处理器控制指令处理器控制指令v1标志操作指令vCLC ;CF0,进位标志位置0(Clear carry)vSTC ;CF1,进位标志位置1(Set carry)vCMC ;CF=进位标志取反(complement Ca

48、rry)vCLD ;DF0方向标志位置0(clear direction)vSTD ;DF1方向标志位置1(set direction)vCLI ;IF0中断允许标志位置0(clear interrupt)vSTI ;IF1中断允许标志位置1(set interrupt)机电工程系v2.外部同步指令(1)暂停指令HLT(2)等待指令WAIT(3)交权指令ESC(4)封锁指令LOCK(5)空操作指令NOP机电工程系3.3 80X86与与Pentium扩充和增加的指令扩充和增加的指令v3.3.1 80286扩充和增加的指令v180286扩充功能的指令v(1)堆栈操作指令PUSH SRCv(2)有符

49、号数乘法指令IMUL DEST,SRC IMUL DEST,SRC1,SRC2 ;例3-55 有符号数乘法IMUL CX,205 ;(CX)(CX)205IMUL DX,BP,68H;(DX)BP68H机电工程系v(3)移位指令例3-56 下列指令都是正确的SAL AX,9ROL BP,29RCR BXSI,31SAR DX,6;算术右移6次机电工程系280286增加的指令增加的指令v(1)栈操作指令PUSHA、POPA v(2)字符串输入指令INS ES:DI,DX(INSB、INSW)v(3)字符串输出指令OUTS DX,DS:SI(OUTB、OUTW)v(4)数组界限检查指令BOUND

50、DEST,SRC v(5)建立堆栈空间指令ENTER DEST,SRC v(6)取消建立的栈空间指令LEAVEv(7)控制保护指令机电工程系v控制保护指令有16条:LAR ;装入访问权限LSL ;装入段界限LGDT;装入全局描述符表SGDT;存储全局描述符表LIDT;装入8字节中断描述符表SIDT;存储8字节中断描述符表LIDT;装入局部描述符表SLDT;存储局部描述符表LTR ;装入任务寄存器STR ;存储任务寄存器LMSW;装入机器状态字SMSW ;存储机器状态字ARPL ;调整已请求特权级别CLTS ;清除任务转移状态VERR ;对存储器或寄存器读校验VERW ;对存储器或寄存器写校验机

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 生活常识

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁