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

下载本文档

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

文档简介

第3章寻址方式和指令系统3.1寻址方式3.28086指令系统3.380X86与Pentium扩充和增加的指令3.1寻址方式3.1.1立即数寻址3.1.2寄存器寻址3.1.3直接寻址3.1.4寄存器间接寻址3.1.5存储器相对寻址3.1.6基址变址寻址3.1.7基址变址相对寻址3.1.8寄存器比例寻址返回3.1.1立即数寻址立即数,操作数直接包含在指令中,作为指令的一部分存放在代码段中例3-1MOVAX,2004H;(AH)=20H,(AL)=04HMOVBL,5AH;(BL)=5AHMOVEAX,22334455H;(EAX)=22334455H,

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

例3-3存储器直接寻址MOVAX,[1000H];将DS段的1000H和1001H两个单元的内容送入AX寄存器中MOVEAX,ES:[2000H];将ES段的2000H~2003H四个单元的内容送入EAX寄存中,其中ES为段超越前缀MOVAX,BUF;将DS段内以有效地址BUF(符号地址)起始的两个单元的内容送入AX寄存器中返回3.1.4寄存器间接寻址操作数的物理地址为:(DS)×16+(SI/DI/BX)或(SS)×16+(BP)例3-4假定(DS)=2000H,(SI)=3600H,(23600H)=6022HMOVAX,[SI];先将DS中的值左移4位,然后与SI中的值相加,形成物理地址是23600H,再将该物理地址中的数据6022H送入AX寄存器中例3-5假定(SS)=3000H,(BP)=1100H,(31100H)=5E28HMOVBX,[BP]例3-6偏移量为32位时的寄存器间接寻址MOVEAX,[ECX]MOVEAX,[DX]返回3.1.5寄存器相对寻址其物理地址为:(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

MOVAX,[SI+20H]MOVBX,[BP+COUNT]指令MOVBX,[BP+COUNT]书写有下面的等效形式:

MOVBX,[BP]+COUNTMOVBX,COUNT[BP]返回3.1.6基址变址寻址其物理地址为:(DS)×16+(BX)+(SI/DI)或(SS)×16+(BP)+(SI/DI)例3-8基址变址寻址,假定(DS)=2000H,(SS)=3000H,(BX)=1800H,(BP)=2080H,(DI)=1000H,(SI)=0800H,(22800H)=80CFH,(32880H)=067AHMOVAX,[BX][DI]MOVAX,[BP+SI]

返回3.1.7基址变址相对寻址其物理地址为:(DS)×16+(BX)+(SI/DI)+8位或16位偏移量(SS)×16+(BP)+(SI/DI)+8位或16位偏移量例3-9基址变址相对寻址MOVAX,[BX+SI+100H]MOV20H[BP+SI],AXMOVCX,DS:[BX+SI+NUM]MOVDX,SS:NUM[DI][BP]例3-1032位偏移量的寄存器比例寻址MOVEAX,DAT[EBX+ESI]MOVEAX,NUM[EBP+EDI]返回3.1.8寄存器比例寻址例3-11寄存器比例寻址MOVEAX,X[EDI*4]MOVEBX,[EDI*8][EBX];EA=(EDI)*8+(EBX)MOVEAX,X[ESI*4][EBP];EA=(ESI)*4+(EBP)+X返回3.28086指令系统3.2.1数据传送指令3.2.2算术运算指令3.2.3逻辑运算与移位指令3.2.4串操作指令3.2.5控制转移指令3.2.6处理器控制指令返回3.2.1数据传送指令1.通用数据传送指令2.地址传送指令3.标志传送指令4.输入输出指令(1)基本的传送指令格式:MOVDEST,SRC功能:将源操作数的内容传送到目的操作数中例3-12基本的传送指令MOVAL,30H;立即数传送到寄存器MOVAL,BL;寄存器之间传送字节数据MOVSI,[BX+62H];寄存器和存储器之间传送数据例3-13下列指令是不合法的。MOV6234H,AX;立即数不能用于目的操作数MOVCS,AX;CS不能用于目的操作数MOVIP,AX;IP不能用于目的操作数MOVDS,4234H;立即数不能直接传送给段寄存器MOVAL,BX;源操作数与目的操作数的位数必须一致MOVBUF1,BUF2;不能在两个存储器单元之间传送数据MOVDS,ES;不能在两个段寄存器之间传送数据(2)交换指令格式:XCHGDEST,SRC功能:将源操作数与目的操作数的内容交换(Exchange)例3-14交换指令XCHGAL,CL;字节交换XCHGBX,SI;字交换XCHGAX,[BX+SI];寄存器和存储器之间交换数据例3-15下列指令是非法的XCHGAX,6234H;寄存器与立即数之间不能交换XCHGBUF1,BUF2;存储器单元与存储器单元之间不能交换XCHGADDR,4234H;存储器单元与立即数之间不能交换XCHGCS,DAT[BX];不能与CS(或IP)寄存器进行交换(3)堆栈操作指令堆栈是按“先进后出”原则工作的一段存储器区域格式:PUSHSRCPOPDEST例3-16将16位通用寄存器CX的内容压入堆栈,然后,弹出栈顶至CX中,已知:(SS)=0200H,(SP)=0008H,(CX)=12FAH,其示意图见图3-1和图3-2。-2020012FA×162006200712FAH2000存储器SS段首地址新栈顶原栈顶120008SSCXSP2008FA+12FAH+2×16存储器SS段首地址新栈顶原栈顶CXSPSS020012FA0008200620072008FA122000+(4)换码指令格式:XLAT功能:这是一条专门用于AL和字节表中某一存储单元之间执行数据传送的指令。执行(AL)←[BX+AL]的操作,使AL中的一个值变换为内存表格中的某一个值,实现编码的转换。

例3-17在内存的数据段中存放有一张数值0~9的ASCII码转换表,首地址为Hex_table,如图3-3所示。现要把数值8转换成对应的ASCII码,可用以下几条指令实现:LEABX,Hex_table

;(BX)←表首偏移地址MOVAL,8;(AL)←8XLAT;查表转换Hex_table+0Hex_table+1Hex_table+2Hex_table+8Hex_table+9‘0’‘1’‘2’‘8’‘9’30H31H32H38H39H返回(1)有效地址传送指令格式:LEADEST,SRC功能:这是一条取有效地址的指令(Loadeffectiveaddress)。它用来将源操作数的偏移地址传送到通用寄存器、指针或变址寄存器中例3-18有效地址传送指令MOVBX,[3200H];将3200H单元的内容送BXLEABX,[3200H];将有效地址3200H送BXLEASI,ADDR;将ADDR的有效地址送SI(2)地址指针传送指令格式:LDSDEST,SRC

LESDEST,SRC功能:将源操作数指定的连续4个存储器单元中存放的32位地址指针(包括一个段地址和一个偏移地址)传送到两个16位寄存器例3-19地址指针传送指令POINTDD55663344H;设定POINT的段地址和偏移地址LDSBX,POINT;(BX)=3344H,(DS)=5566HLESBX,POINT;(BX)=3344H,(ES)=5566H返回(1)标志读写指令格式:LAHF/SAHF功能:LAHF用于将标志寄存器的低8位送AH,即将标志寄存器FLAGS中的SF(符号标志)、ZF(零标志)、AF(半加进位标志)、PF(奇偶标志)和CF(进位标志)5个标志位分别传送到累加器AH的对应位

D7D0

D15

OFDFIFTF

D0SFZFAFPFCFAH图3-4LAHF指令操作示意图FLAGS(2)标志入栈出栈指令格式:PUSHF/POPF功能:PUSHF指令是将标志寄存器中的内容压入堆栈,指令的操作为[SP-1]←(FLAGSH),[SP-2]←(FLAGSL),(SP)←(SP)-2POPF指令是将栈顶的字单元内容弹出到标志寄存器中,同时SP←(SP)+2返回4.输入输出指令格式:INDEST,SRCOUTDEST,SRC功能:专门用于累加器和I/O端口之间执行数据传送例3-20输入输出指令INAL,28H;从端口28H输入一个字节到ALOUT15,AL;从AL输出一个字节到端口15MOVDX,0362H;先将端口地址送入DXINAX,DX;从端口0362H输入一个字到AX返回3.2.2算术运算指令1.加法指令2.减法指令3.乘法指令4.除法指令返回(1)不带进位加法指令格式:ADDDEST,SRC功能:将源操作数与目的操作数相加,结果送入原存放目的操作数的地方。该指令对标志位有影响。例3-21不带进位加法指令ADDCL,20H;(CL)←(CL)+20HADDAX,SI;(AX)←(AX)+(SI)ADDDATA[BX],AL;((BX)+DATA)←((BX)+DATA)+(AL)ADDDX,[BX+SI];(DX)←(DX)+((BX)+(SI))(2)带进位加法指令格式:ADCDEST,SRC功能:将源操作数和目的操作数相加,同时加上进位标志的现行值CF,结果送入原存放目的操作数的地方例3-22带进位加法指令ADCAX,SI;(AX)←(AX)+(SI)+CFADCBX,3000H;(BX)←(BX)+3000H+CFADCAX,DAT[SI];(AX)←(AX)+(SI+DAT)+CF(3)加1指令格式:INCDEST功能:将目的操作数中的内容加1,然后送回该操作数。目的操作数可以是寄存器或存储器。该指令一般用在循环程序中修改指针和循环次数例3-23加1指令INCBX;(BX)←(BX)+1INCBYTEPTR[DI+100H];将(DI)+100H所指的字节单元内容加1(4)BCD码加法十进制调整指令①未组合BCD码的加法调整指令格式:AAA功能:将AL的内容调整为一位非组合型的十进制数例3-24两个未组合BCD码的加法运算,设(AH)=0MOVAL,08;(AL)←08(AL)=00001000ADDAL,09;(AL)←08+09(AL)=00010001=11HAAA;AF=1,(AH)←(AH)+01,AL←(AL+6),AL高4位为0,(AL)=00000111,结果(AX)=0107AF=1CF=1②组合BCD码的加法调整指令格式:DAA功能:将AL的内容调整为两位组合型的二进制数。调整方法与AAA指令类似,不同的是DAA指令要分别考虑AL的高4位和低4位。如果AL的低4位大于9或AF=1,则AL的内容加6,并将AF置1;如果AL的高4位大于9或CF=1,则AL的内容加60H,且将CF置1。例3-25两个组合BCD码的加法运算MOVAL,37;(AL)←37MOVBL,35;(BL)←35ADDAL,BL;(AL)=6CH,AF=0,CF=0DAA;因为AL中的低4位大于9,所以(AL)←(AL)+06,结果(AL)=72,AF=1,CF=0返回(1)不带借位的减法指令格式:SUBDEST,SRC功能:将目的操作数减去源操作数,结果送入目的操作数。例3-26不带借位的减法指令SUBAX,3000H;(AX)←(AX)-3000HSUBBX,[SI+100H];(BX)←(BX)-[SI+100H](2)带借位的减法指令格式:SBBDEST,SRC功能:将目的操作数减去源操作数,还要减去CF的值,结果送入目的操作数例3-27带借位的减法指令SBBAX,BX;(AX)←(AX)-(BX)-CFSBBWORDPTR[SI],1068H;(SI)←(SI)-1068H-CF(3)减1指令格式:DECDEST功能:将目的操作数的内容减1,然后送回目的操作数。例3-28减1指令DECBL;(BL)←(BL)-1DECBYTEPTR[DI+2];[DI+2]←[DI+2]-1(4)求补指令格式:NEGDEST功能:对目的操作数取补码,即用零减去此操作数,结果送回此操作数中。例3-29设(AX)=020H,(BX)2212HNEGAX;(AX)←0-(AX),结果(AX)=0FEHNEGBX;(BX)←0-(BX),结果(BX)=DDEEH(5)比较指令格式:CMPDEST,SRC功能:将目的操作数减去源操作数,结果不送回目的操作数,二操作数原值不变,只是影响状态标志位。其余同SUB指令。这条指令后边一般跟条件转移指令,以判断二操作数是否满足某种关系。根据比较结果对标志位的影响来实现程序的分支。(6)BCD码减法十进制调整指令①

未组合BCD码的减法调整指令格式:AAS功能:与AAA指令类似是将AL的内容调整为一位非组合型的十进制数例3-30两个未组合BCD码的减法运算MOVAX,0608H;AX←0608HSUBAL,09H;AL←0FFHAAS;AL←09H,AH←05H②组合BCD码的减法调整指令格式:DAS功能:与DAA指令类似,是将AL的内容转换成两位组合型的十进制数例3-31:两个组合BCD码的减法运算MOVAL,73H;AL←73HSUBAL,27H;AL←4CHDAS;AL←46H返回(1)无符号数乘法指令格式:MULSRC功能:字节相乘时,AL与源操作数相乘,乘积为16位送入AX中;字相乘时,AX与源操作数相乘,乘积为32位,高16位送DX,低16位送AX。对标志位影响:若乘积的高半部分(字节相乘时为AH,字相乘时为DX)不为零,则CF=1,OF=1;否则CF=0,OF=0。其它标志位为任意值。例3-32无符号数乘法指令MULDL;AX←AX*DLMULCX;DX:AX←AX*CXMULBYTEPTR[SI+8];AX←AL*[SI+8](2)有符号数乘法指令格式:IMULSRC功能:与MUL的功能相同,只是要求两乘数都必须为有符号数。例3-33两个有符号数的乘法MOVAL,FEH;AL←FEH,FEH看作有符号数-2MOVCL,11H;CL←11H,11H看作有符号数17IMULCL;AX←FFDEH,执行02H*11H,将乘积结果取补码得FFDEH=-34(3)非组合BCD码乘法调整指令格式:AAM功能:用于将非组合BCD码乘法的结果(在AL中)转换成两个非组合型BCD码(AH和AL中)例3-34两个非组合BCD码的乘法运算。MOVAL,,06H;AL←06HMOVBL,07H;BL←07HMULBL;AX←002AHAAM;AX←0402H返回(1)无符号数除法指令格式:DIVSRC功能:a.字节除法:将AX/SRC的商送入AL,将AX/SRC的余数送入AHb.字除法:将DX:AX/SRC的商送入AX,将DX:AX/SRC的余数送入DX例3-35无符号数除法指令DIVCL;AX中的16位数除以CL中的8位数,商送AL,余数送AHDIVCX;DX和AX中的32位数除以CX中的16位数,商送AX,余数送DX(2)有符号数除法指令格式:IDIVSRC功能:与DIV指令相比只有两点不同:a.两个操作数均为有符号数。b.如果被除数不是除数的两倍长度,对被除数要用专门的指令进行符号扩展,以产生双倍长度表示的被除数。(3)非组合BCD码除法调整指令格式:AAD功能:AAD指令常用于DIV指令之前,将AX中的两位非组合BCD码变为二进制数例3-36两个非组合BCD码的除法运算。MOVAX,0605H;AX←0605HMOVBL,07H;BL←07HAAD;AX←0041HDIVBL;商值AL←09,余数AH←02H(4)有符号扩展指令格式:CBWCWD功能:CBW为字节扩展指令,将AL中有符号数的符号位扩展到AH中例3-37MOVAL,12H;AL←12HCBW;AX←0012H,AH=00HMOVAX,BBA3HCWD;DX←FFFFH,AX←BBA3H返回3.2.3逻辑运算与移位指令1.逻辑运算指令2.移位指令3.循环移位指令返回1.逻辑运算指令例3-38ANDAL,0FH;AL中的内容和OFH相与,结果在AL中ANDAX,BX;AX和BX中的内容相与,结果在AX中ANDDX,[BX+SI];ORAX,00F0H;AX和00F0相或,结果在AX中XORAL,0FH;AL和0FH相异或,结果在AL中XORAX,AX;AX的内容本身进行异或,结果AX清零例3-39TESTAX,8000H;如果AX的最高位为1,则ZF=0,否则ZF=1TESTAL,01H;如果AL的最低位为1,则ZF=0,否则ZF=1例3-40NOTAL;AL中内容求反码,结果在AL中NOTBX;BX中内容求反码,结果在BX中NOTWORDPTR[1000H];1000H和1001H2个单元中的内容求反码,再送回这2个单元中例3-41ANDAL,0FH;AL中的高4位请零ORAL,0FH;AL中的低4位置1XORAL,0FH;AL中的低4位求反TESTAL,0FH;检查AL中的低4位是否全为零返回2.移位指令例3-42将AL寄存器中的数据左移1位,BL寄存器中的数据右移4位

MOVAL,52H;AL←52HMOVBL,63H;BL←63HMOVCL,04H;CL←04HSHLAL,1;AL←A4HSHRBL,CL;BL←0CH最高位最低位CF0最高位最低位CF0最高位最低位CF0最高位最低位CFa)算术左移指令SALd)逻辑右移指令SHRb)逻辑左移指令SHLc)算术右移指令SAR返回3.循环移位指令例3-43将AX的最高位移入DX的最低位RCLAX,1;将AX的最高位移位CFRCLDX,1;将CF移入DX的最低位例3-44将AX=00A2H,BX=00B4H,装配在一起形成AX=A2B4HMOVCL,8;(CL)←移位数8ROLAX,CL;AX循环左移8位,(AX)=A200HADDAX,BXc)不带CF的循环右移指令ROR最高位最低位CF最高位最低位CF最高位最低位CF0最高位最低位CFa)不带CF的循环左移指令ROLb)带CF的循环左移指令RCLd)带CF的循环右移指令RCR返回3.2.4串操作指令1.基本串操作指令2.重复前缀指令返回1.基本串操作指令(1)串传送指令MOVSB;字节传送,ES:[DI]←DS:[SI],SI←SI±1,DI←[DI]±1MOVSW;字传送,ES:[DI]←DS:[SI],SI←[SI]±2,DI←[DI]±2(2)取串指令LODSB

;字节传送,AL←DS:[SI],SI←[SI]±1LODSW;字传送,AX←DS:[SI],SI←[SI]±2(3)存串指令STOSB

;字节传送,ES:[DI]←AL,DI←[DI]±1STOSW;字传送,ES:[DI]←AX,DI←[DI]±2.(4)串比较指令CMPSB

;字节传送ES:[SI]-DS:[DI],SI←[SI]±1,DI←[DI]±1CMPSW;字传送,ES:[SI]-DS:[DI],SI←[SI]±2,DI←[DI]±25)串搜索指令SCASB;字节传送,AL-ES:[DI],DI←[DI]±1.SCASW;字传送,AX-ES:[DI],DI←[DI]±22.重复前缀指令格式:REP

;无条件重复前缀指令

REPE/REPZ;条件重复前缀指令

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,则重复执行结束LODS指令之前不能添加重复前缀例题例3-45将首地址为SRC的源字符串传送到DEST为首地址的内存区,字符串的长度为N个字节。CLD;DF=0,增量方向LEASI,SRC;DS:SI←字符串首地址LEADI,ES:DEST;ES:DI←目标地址MOVCX,N;字符串长度REPMOVSB;重复字符串传送例3-46比较两个字符串是否有相同的元素,它们的首地址和目标地址分别为SRC和DEST,字符串的长度为N个字节。CLD;DF=0,增量方向LEASI,SRC;DS:SI←字符串首地址LEADI,ES:DEST;ES:DI←目标地址MOVCX,N;字符串长度REPNECMPSB;重复比较字符串JNZNOT_FOUNT;无相同的元素,转NOT_FOUNT,否则继续执行下条指令例题例3-47在首地址为ES:DEST的字符串中检查是否有字符’M’,字符串的长度为N个字节。CLD;DF=0,增量方向LEADI,ES:DEST;ES:DI←目标地址MOVCX,N;字符串长度MOVAL,’M’;AL←搜索字符REPNESCASB;重复搜索字符串是否有字符’M’例3-48将首地址为DS:SRC的字节数据串中非0元素送到首地址为ES:DEST的内存区中。字符串长度为N。CLD;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控制转移指令1.无条件转移指令2.过程调用及返回指令3.条件转移指令4.循环控制指令5.中断指令返回1.无条件转移指令(1)段内直接转移JMP1200H;IP←1200H,直接转移到1200H去执行指令JMPSHORTLOOP;IP←(IP)+8位偏移量,段内短转移,转向符号地址LOOP处JMPNEARPTRL2;IP←(IP)+16位偏移量,段内近转移,转向符号地址L2处(2)段内间接转移JMPCX;IP←(CX)JMP[AX+SI];IP←[AX+SI]JMPWORDPTR[SI];IP←(SI)所指定的存储器字单元之中的16位数据(3)段间直接转移JMPFARPTRNEXT;CS:IP←新的段基址和新的偏移地址(4)段间间接转移JMPDWORDPTR[DI];(IP)←(DS:DI),(CS)←(DS:DI+2)2.过程调用及返回指令(1)调用指令①段内直接调用CALL;SP←(SP)-2,SS:[SP]←IP;IP←(IP)+16位偏移量②段内间接调用CALLBX;SP←(SP)-2,SS:[SP]←IP;IP←BX偏移量③段间直接调用CALLFARPTRSUB2;SP←(SP)-2,SS:[SP]←CS;SP←(SP)-2SS:[SP]←IP,IP←SUB2偏移地址,CS←SUB2段地址④段间间接调用CALLFARPTR[SI];SP←(SP)-2,SS:[SP]←CS;SP←(SP)-2SS:[SP]←IP,IP←[SI,CS←[SI+2]2.过程调用及返回指令(2)返回指令①

无参数段内返回RET;IP←SS:[SP],SP←(SP)+2②有参数段内返回RETn;IP←SS:[SP],SP←(SP)+2,SP←(SP)+n③无参数段间返回RET;IP←SS:[SP],SP←(SP)+2,

CS←SS:[SP],SP←(SP)+2④有参数段间返回RETn;IP←SS:[SP],SP←(SP)+2,

CS←SS:[SP],SP←(SP)+2,SP←(SP)+n3.条件转移指令指令转移条件说明JCDESTCF=1有进位/借位JNCDESTCF=0无进位/借位JE/JZDESTZF=1相等/等于零JNE/JNZDESTZF=0不相等/不等于零JSDESTSF=1是负数JNSDESTSF=0是正数JODESTOF=1有溢出JNODESTOF=0无溢出JP/JPEDESTPF=1有偶数个“1”JNP/JPODESTPF=0有奇数个“1”指令转移条件含义JG/JNLEDESTSF=OFANDZF=0有符号数A>BJGE/JNLDESTSF=OFORZF=1有符号数A≥BJL/JNGEDESTSF≠OFANDZF=0有符号数A<BJLE/JNGDESTSF≠OFORZF=1有符号数A≤B指令转移条件含义JG/JNLEDESTSF=OFANDZF=0有符号数A>BJGE/JNLDESTSF=OFORZF=1有符号数A≥BJL/JNGEDESTSF≠OFANDZF=0有符号数A<BJLE/JNGDESTSF≠OFORZF=1有符号数A≤B例题例3-53根据单个标志位的状态判断后转移的指令ADDAX,BXJCTOO_BIG;若加法有进位转至TOO_BIG处理SUBAL,BLJZZERO;若减法结果为0,转至ZERO处理例3-54比较无符号数FEH和05H的大小,执行下面的指令后,将转移到ABC处继续执行指令。MOVAL,0FEHCMPAL,05HJAABC;若(AL)>05H,则转向ABC4.循环控制指令格式:LOOPDEST;(CX)≠0,则循环LOOPE/LOOPZDEST;ZF=1且(CX≠0),则循环LOOPNE/LOOPNZDEST;ZF=0且(CX)≠0,则循环JCXZDEST;(CX)=0,则循环例3-54在以DATA为首地址的内存数据段中,存放有200个16位有符号数,试找出其中最大和最小的有符号数,并分别放在MAX和MIN为首的内存单元中START:LEASI,DATA;(SI)←数据块首地址MOVCX,200;(CX)←数据块长度CLD;清方向标志DF

LODSB;(AX)←一个16位有符号数MOVMAX,AX;将该数送MAXMOVMIN,AX;将该数送MINDECCX;(CX)←(CX)-1NEXT:LODSW;取下一个16位有符号数

CMPAX,MAX;与MAX单元内容进行比较

JGLARGER;若大于则转LARGER

CMPAX,MIN;否则再与MIN单元内容进行比较

JLSMALL;若小于MIN的内容则转SMALL

JMPGOON;否则就转至GOONLARGER:MOVMAX,AX;(MAX)←(AX)JMPGOONSMALL:MOVMIN,AX;(MIN)←(AX)GOON:LOOPNEXT;(CX)-1,若CX≠0,则转NEXTHLT5.中断指令(1)中断指令格式:INTn功能:用于产生软件中断,以调用中断类型号为n的中断服务程序n为一个8位立即数,取值范围为0~255。(2)溢出中断指令格式:INTO功能:用来判断有符号数加减运算是否溢出。一般把INTO指令安排在有符号数加、减运算指令的后面,一旦查出OF=1。则转到溢出中断处理程序。INTO指令是n=4的INT指令。其中断向量为0010H。(3)中断返回指令格式:IRET功能:将堆栈中的断点地址弹出赋给IP和CS,以实现中断返回;将标志寄存器的值弹出,恢复中断前的状态。返回3.2.6处理器控制指令1.标志操作指令CLC

;CF←0,进位标志位置0(Clearcarry)STC;CF←1,进位标志位置1(Setcarry)CMC;CF=进位标志取反(complementCarry)CLD;DF←0方向标志位置0(cleardirection)STD;DF←1方向标志位置1(setdirection)CLI;IF←0中断允许标志位置0(clearinterrupt)STI;IF←1中断允许标志位置1(setinterrupt)外部同步指令(1)暂停指令HLT(2)等待指令WAIT(3)交权指令ESC(4)封锁指令LOCK(5)空操作指令NOP返回3.380X86与Pentium扩充和增加的指令3.3.180286扩充和增加的指令3.3.280386扩充和增加的指令3.3.380486新增加的指令3.3.4Pentium新增加的指令返回3.3.180286扩充和增加的指令1.80286扩充功能的指令(1)堆栈操作指令PUSH

SRC

(2)有符号数乘法指令IMULDEST,SRCIMULDEST,SRC1,

温馨提示

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

评论

0/150

提交评论