微机原理-第2章-4指令(逻辑串条件等)课件_第1页
微机原理-第2章-4指令(逻辑串条件等)课件_第2页
微机原理-第2章-4指令(逻辑串条件等)课件_第3页
微机原理-第2章-4指令(逻辑串条件等)课件_第4页
微机原理-第2章-4指令(逻辑串条件等)课件_第5页
已阅读5页,还剩123页未读 继续免费阅读

下载本文档

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

文档简介

3、逻辑运算与移位指令⑴逻辑与/或/异或/测试指令⑵逻辑非指令⑶算术/逻辑左移指令⑷算术/逻辑右移指令⑸循环移位指令⑹双精度左移/右移指令第二章指令系统整数指令逻辑/移位提要13、逻辑运算与移位指令第二章指令系统整数指令逻辑/移位第二章指令系统整数指令逻辑/移位逻辑运算_1⑴逻辑与/或/异或/测试指令AND/OR/XOR/TEST指令格式:AND/OR/XOR/TESTDST,SRCreg,reg/mem/immmem,reg/immOFDFIFTFSFZFAFPFCF0---XX-U-X-0注意:操作数DST、SRC的宽度必须相等。

四条指令对标志位的影响相同:功能:AND/OR/XOR分别对DST和SRC按位进行逻辑

与/或/异或操作,结果存入DST中。即:DST(DST)与/或/异或(SRC)

TEST只对DST和SRC按位进行逻辑与操作,不存结果。2第二章指令系统整数指令逻辑/移位逻辑运算_1⑴逻辑例1:将ASCII码转换为未组合BCD码。MOVAL,‘6’;6的ASCII码送AL,(AL)=36H

ANDAL,0FH;用0屏蔽高4位,用1保留低4位第二章指令系统整数指令逻辑/移位逻辑运算_2例5:TESTAL,80H;仅测试(AL)的最高位JZBUSY;最高位为0,则转向BUSY例4:XORCX,CX;这条指令结果如何?例3:对寄存器的某些位求反,某些位保持不变。MOVCL,0F0H

XORAL,CL;用1对高4位求反,用0保留低4位例2:将未组合BCD码转换为ASCII码。MOVAL,9;(AL)=09H

ORAL,30H;用1强行置位,(AL)=39H3例1:将ASCII码转换为未组合BCD码。第二章指令系统⑵逻辑非指令NOT指令格式:NOTDSTregmem功能:对DST中每一位都求反(0变1,1变0)。不影响标志位。举例:NOTBX;设执行前(BX)=5555H;则执行后(BX)=AAAAH第二章指令系统整数指令逻辑/移位逻辑运算_34⑵逻辑非指令NOT第二章指令系统整数指令逻辑/移位⑶算术/逻辑左移指令SAL/SHL指令格式:SAL/SHLDST,移位次数reg/mem,imm8/CL第二章指令系统整数指令逻辑/移位左移_1CFMSB操作数LSB0功能:都是将DST的内容向左移位,移动次数由imm8/CL决定。每左移一位,将最高有效位MSB移进CF,在最低有效位LSB补0。5⑶算术/逻辑左移指令SAL/SHL第二章指令系统整数说明:

①影响标志位:OF、SF、ZF、PF、CF。②规定80386以上移位次数不超过31;8086用立即数时只能是1,用CL时最多可移位255次。③移位次数为1时,若移位后进位标志CF与结果的最高位相等,则OF=0,否则OF=1。第二章指令系统整数指令逻辑/移位左移_2举例:将AX中的无符号数乘8。MOVAX,12HMOVCL,3

SALAX,CL;左移三次,相当于;AX(AX)×8=90H6说明:第二章指令系统整数指令逻辑/移位左移_2举例:⑷算术/逻辑右移指令SAR/SHR指令格式:SAR/SHRDST,移位次数reg/mem,imm8/CL功能:SAR是算术右移指令,对有符号数右移;

SHR是逻辑右移指令,对无符号数右移。都是将DST的内容向右移位,移动次数由imm8/CL决定。第二章指令系统整数指令逻辑/移位右移_1CFMSB操作数LSB算术右移(SAR)(最高位符号位扩展)逻辑右移(SHR)0CFMSB操作数LSB7⑷算术/逻辑右移指令SAR/SHR第二章指令系统说明:1、影响标志位:OF、SF、ZF、PF、CF。2、移位次数的规定与SAL/SHL相同。3、移位次数为1时,对SAR指令,将OF置0;对SHR指令,将OF置成与原DST最高有效位MSB相同的值。右移指令常用于实现除以2n的操作第二章指令系统整数指令逻辑/移位右移_2例如:将AX中的有符号数除以16(=24)。MOVAX,-1024;(AX)=FC00HMOVCL,4

SARAX,CL;(AX)=FFC0H=-648说明:1、影响标志位:OF、SF、ZF、PF、CF。第二章⑸循环移位指令ROL/ROR/RCL/RCR指令格式:

ROL/ROR/RCL/RCRDST,移位次数reg/mem,imm8/CL第二章指令系统整数指令逻辑/移位循环移位_1说明:移位次数由imm8/CL决定。四条指令影响标志位:OF、SF、ZF、PF、CF。RCL和RCR则是将标志位CF与DST连接在一起进行循环左移和循环右移。功能:ROL和ROR分别为左环移和右环移指令,对DST进行循环左移和循环右移。9⑸循环移位指令ROL/ROR/RCL/RCR第二章指令第二章指令系统整数指令逻辑/移位循环移位_2CFMSB操作数DSTLSB循环左移ROLCFMSB操作数DSTLSB循环右移RORCFMSB操作数DSTLSB带进位循环左移RCLCFMSB操作数DSTLSB带进位循环右移RCR10第二章指令系统整数指令逻辑/移位循环移位_2CF第二章指令系统整数指令逻辑/移位循环移位_3举例:编写程序段,将寄存器AL中的内容顺序颠倒,即将AL7~AL0变为AL0~AL7。CFMSBALLSBCFMSBBLLSBROLRCR

MOVBL,AL;BL(AL)MOVCL,8;循环次数为8AGAIN:ROLBL,1;(BL)依次左移,最高位进入CF

RCRAL,1;(AL)依次右移,CF填充最高位LOOPAGAIN11第二章指令系统整数指令逻辑/移位循环移位_3举例:编⑹双精度左移/右移指令SHLD/SHRD指令格式:SHLD/SHRDDST,SRC,移位次数reg16/mem16,reg16,imm8/CLreg32/mem32,reg32,imm8/CL第二章指令系统整数指令逻辑/移位双精度移位310SHLD:CFDST(目的)SRC(源)310310SHRD:CFSRC(源)DST(目的)310功能:将DST和SRC连成双精度值(32位或64位)向左或右移,移动次数由imm8/CL决定。SRC内容逐位移入DST,且自己保持不变。CF中的值为DST移出的最后一位。影响标志位:SF、ZF、PF、CF。这是80386新增指令。12⑹双精度左移/右移指令SHLD/SHRD第二章指令系统⑴串传送指令⑵串装入指令⑶串存储指令⑷串扫描指令⑸串比较指令⑹串输入指令⑺串输出指令⑻重复前缀第二章指令系统整数指令串操作提要4、串操作指令13⑴串传送指令第二章指令系统整数指令串操作提要4、串串操作的有关约定:①DS:(E)SI为源串,ES:(E)DI为目的串,指令中不必指明操作数。②源串的DS可用段前缀改变,但目的串的ES不能超越。③源串指针(E)SI和目的串指针(E)DI在每次操作后,将根据DF的值来自动增量(DF=0)或自动减量(DF=1),以指向下一项,增/减量大小由操作数宽度决定。④通常串操作指令前可加重复前缀,此时必须用(E)CX作次数计数器,操作一次,(E)CX值减1,直至减为0,结束。⑤只有串扫描、串比较指令影响标志位。第二章指令系统整数指令串操作约定14串操作的有关约定:第二章指令系统整数指令串操作约定1⑴串传送指令MOVS/MOVSB/MOVSW/MOVSD指令格式:MOVS目的串,源串;由串数据的宽度决定mem,mem;字节/字/双字串操作MOVSB;字节串传送MOVSW;字串传送MOVSD;双字串传送第二章指令系统整数指令串操作串传送_1操作:[ES:(E)DI]([DS:(E)SI]);传送(E)SI((E)SI)±1/2/4;修改源指针

(E)DI((E)DI)±1/2/4;修改目的指针功能:将DS:[(E)SI]指定的源串中的一个字节/字/双字传送到ES:[(E)DI]指定的目的串,并自动修改指针。可加重复前缀。15⑴串传送指令MOVS/MOVSB/MOVSW/MOVSD第二章指令系统整数指令串操作串传送_2举例:将数据段中自FIRST开始的100个字符数据复制到附加段以SECOND开始的数据区中,用基本传送指令实现。程序段如下:LEASI,FIRST;置源串有效地址LEADI,SECOND;置目的串有效地址MOVCX,100;设置计数初值CLD;DF=0,增量模式DONE:MOVSB;

LOOPDONE;等效于:REPMOVSB16第二章指令系统整数指令串操作串传送_2举例:将数据段第二章指令系统整数指令串操作串传送_3串传送举例示意图数据段(源串)DS:SIFIRSTES:DISECOND‘A’‘B’‘C’‘D’‘E’······附加段(目的串)存储器17第二章指令系统整数指令串操作串传送_3串传送举例示意⑵串装入指令LODS/LODSB/LODSW/LODSD指令格式:LODS源串;由串数据的宽度决定mem;字节/字/双字串操作LODSB/LODSW/LODSD;无显式操作数,分别对应字节/字/双字装入第二章指令系统整数指令串操作串装入操作:AL/AX/EAX([DS:(E)SI]);装入一个数据(E)SI((E)SI)±1/2/4;修改源指针功能:将DS:[(E)SI]指定的源串中的一个字节/字/双字装入累加器中,并自动修改指针。该指令前一般不加重复前缀。18⑵串装入指令LODS/LODSB/LODSW/LODSD⑶串存储指令STOS/STOSB/STOSW/STOSD指令格式:STOS目的串;由串数据的宽度决定mem;字节/字/双字串操作STOSB/STOSW/STOSD;无显式操作数,分别对应字节/字/双字存储第二章指令系统整数指令串操作串存储这两条指令合用可实现MOVSW的功能吗?请问:LODSWSTOSW操作:[ES:(E)DI](AL/AX/EAX);存储数据(E)DI((E)DI)±1/2/4;修改目的指针功能:将累加器的内容存储到ES:[(E)DI]指定的目的串中,自动修改指针。该指令前可加重复前缀。19⑶串存储指令STOS/STOSB/STOSW/STOSD⑷串扫描指令SCAS/SCASB/SCASW/SCASD指令格式:SCAS目的串;由串数据的宽度决定mem;字节/字/双字串操作SCASB/SCASW/SCASD;无显式操作数,分别对应字节/字/双字串扫描第二章指令系统整数指令串操作串扫描_1该指令用于查找串数据中的关键字很方便。这条指令前常加重复前缀,后跟条件转移指令。功能:用累加器中的内容减去ES:[(E)DI]指定的目的串元素的内容,仅改变标志位,不改变二者的内容,并自动修改指针。其实质是在扫描串中寻找与累加器中的内容相同者,有则将标志ZF置1。20⑷串扫描指令SCAS/SCASB/SCASW/SCASD举例:通过加重复前缀,在一个字符串中搜索关键字‘*’。程序段如下:LEAEDI,STRING;EDI指向字符串首元素MOVECX,LENGTH;串长度送ECXCLD;DF清零,增量操作MOVAL,‘*’

REPNESCASB;不相等则重复扫描JEMATCH;ZF=1,找到…;ZF=0,ECX=0,没有找到第二章指令系统整数指令串操作串扫描_221举例:通过加重复前缀,在一个字符串中搜索第二章指令系统整⑸串比较指令CMPS/CMPSB/CMPSW/CMPSD指令格式:

CMPS目的串,源串;由串数据的宽度决定mem,mem;字节/字/双字串操作CMPSB/CMPSW/CMPSD;无显式操作数,分别对应字节/字/双字串比较第二章指令系统整数指令串操作串比较_1功能:将DS:[(E)SI]指定的源串元素的内容减去

ES:[(E)DI]指定的目的串元素的内容,仅改变标志位,不改变两个元素的值,并自动修改指针。该指令前常加重复前缀,后跟条件转移指令来判别两串是否匹配。22⑸串比较指令CMPS/CMPSB/CMPSW/CMPSD举例:比较两个长度为500的字节字符串是否相同,若不同,找出出现不同时的位置,并记入相应单元。第二章指令系统整数指令串操作串比较_2程序段如下:LEASI,FIRST;SI指向源串起始单元FIRSTLEADI,SECOND;DI指向目的串起始单元SECONDMOVCX,500;设置计数器为500

CLD;标志DF清零,增量模式

REPECMPSB;重复比较(DS:[SI])-(ES:[DI])JNEFOUND;不相同(ZF=0),转FOUNDSAME:RET;相同,返回FOUND:DECSI;退回一字节MOVPOINT,SI;将不相同位置保存JMPSAME23举例:比较两个长度为500的字节字符串是否相同,若不第二章⑹串输入指令INSB/INSW/INSD指令格式:INSB;输入字节串INSW;输入字串INSD;输入双字串功能:从DX寄存器指定的端口输入一个字节/字/双字元素传送到ES:[(E)DI]所指定的存储单元,并自动修改目的指针,可加重复前缀。第二章指令系统整数指令串操作串输入注意:不需经过累加器AL/AX/EAX。举例:LEADI,DEST;DEST存储区在ES段MOVDX,301HMOVCX,8REPINSB;从端口301H输入8字节串24⑹串输入指令INSB/INSW/INSD第二章指令系统⑺串输出指令OUTSB/OUTSW/OUTSD

指令格式:OUTSB;输出字节串OUTSW;输出字串OUTSD;输出双字串

功能:将DS:[(E)SI]指定的存储单元中的字节、字或双字串元素输出到由DX寄存器指定的端口,并自动修改源指针,可加重复前缀。第二章指令系统整数指令串操作串输出举例:LEAESI,SOURCEMOVDX,300HMOVCX,8REPOUTSB25⑺串输出指令OUTSB/OUTSW/OUTSD第二章指第二章指令系统整数指令串操作重复前缀_1⑻重复前缀REP/REPE/REPZ/REPNE/REPNZ格式:加在串操作指令之前,不可单独使用。先进行条件判别,再执行串操作,之后CX减1。MOVSLODS

REPSTOSINSOUTS配合工作的前缀REP重复操作直到(CX)=0为止,不影响标志位CMPSSCASREPE/REPZ

相等/为0时重复,即:(CX)≠0且ZF=1时重复。REPNE/REPNZ

不等/不为0时重复,即:(CX)≠0且ZF=0时重复。REPE/REPZ或REPNE/REPNZ26第二章指令系统整数指令串操作重复前缀_1⑻重复前缀使用串操作指令的一般步骤:第二章指令系统整数指令串操作重复前缀_2CLD;

④建立方向标志;MOVCX,length;

③把数据串长度放入CX寄存器作为重复操作计数值;LEADI,tab2;②把将要存放数据串的附加段首址(或反向操作时的末地址)放入DI寄存器中;LEASI,tab1;

①把存放在数据段中的源串首址(如反向操作则应是末址)放入SI寄存器;REPMOVSB;⑤执行重复串操作。27使用串操作指令的一般步骤:第二章指令系统整数指令串操作第二章习题4教材P118至P122:2.15(2)2.22(1)(5)(7)(8)2.252.372.43(1)28第二章习题4教材P118至P122:285、控制转移指令

这类指令用于改变程序执行顺序(对应程序的转移寻址),其实质就是改变CS:(E)IP的内容。第二章指令系统整数指令控制转移提要主要包括以下内容:

⑴无条件转移指令⑵条件转移指令⑶循环控制指令⑷过程调用/返回指令⑸中断和中断返回指令其中只有中断指令影响标志位。295、控制转移指令第二章指令系统整数指令控制转移提要主程序转移示意图:第二章指令系统整数指令控制转移示意图代码段1CS:IP(1000H:400H)10400H指令1···10420H···存储器指令2指令i代码段2指令1······指令2指令iCS:IP(2000H:100H)20100H段间转移段内转移30程序转移示意图:第二章指令系统整数指令控制转移示意图⑴无条件转移指令JMP指令格式:JMP目标操作数lable;直接转移reg16/32;段内间接转移mem16/32;段内或段间间接转移第二章指令系统整数指令控制转移无条件_1功能:无条件地控制程序转移到目标操作数指定的目标地址,即将目标地址装入(E)IP或CS:(E)IP。短标号段内直接短转移

8位近标号段内直接转移

(E)IP远标号段间直接转移

CS:(E)IP直接寻址leble指令中间接寻址寄存器/存储器段内间接转移

(E)IP存储器段间间接转移

CS:(E)IP31⑴无条件转移指令JMP第二章指令系统整数指令控制转①段内直接短转移(SHORT)指令格式:JMPSHORT目标标号

目标标号专用于指向指令单元,SHORT是JMP特有的短转移运算符,指明此处的目标操作数是一个8位补码的位移量。第二章指令系统整数指令控制转移无条件_2执行:

(E)IP((E)IP)+DISP8-128DISP8

+127(有符号数,补码)

DISP8是当前(E)IP与下一条指令入口之间的距离,CS内容保持不变。注意:容易因使用不当超出范围而出错。32①段内直接短转移(SHORT)第二章指令系统整数指令举例:

JMPSHORTHELLO…

HELLO:MOVAL,3第二章指令系统整数指令控制转移无条件_3JMP指令10100HE810101H0810102H......1010AHB01010BH03MOV指令代码段当前(IP)+0810010AHHELLO

33举例:JMPSHORTHELLO第二章指令系第二章指令系统整数指令控制转移无条件_4②段内直接转移(又称相对转移)指令格式:JMP目标标号;近(NEAR)标号16位寻址时,是一个16位补码的位移量;32位寻址时,是一个32位补码的位移量。执行:16位时,IP(IP)+DISP1632位时,EIP(EIP)+DISP32CS内容保持不变。例如:JMPPROGRAMJMP指令02013HE9H

12H34H…05428H存储器代码段当前IP02016H

+

3412H新IP05428H位移量34第二章指令系统整数指令控制转移无条件_4②段内直接第二章指令系统整数指令控制转移无条件_5③段间直接转移指令格式:JMPFARPTR目标标号;远(FAR)标号指令中直接给出目标标号所指向的入口地址的段选择符(或段值)和偏移地址。执行:段选择符(或段值)CS

偏移地址(E)IP例如:JMPFARPTRLABLE35第二章指令系统整数指令控制转移无条件_5③段间直接举例:段间直接转移C1SEGMENT…

JMPFARPTRA1…C1ENDS…C2SEGMENT…A1:MOVAL,3…C2ENDS第二章指令系统整数指令控制转移无条件_6JMP指令C1代码段新IP新CS20000HMOV指令EAH50H02H00H20HB0H03H······(A1:)20250HC2代码段···存储器36举例:段间直接转移第二章指令系统整数指令控制转移第二章指令系统整数指令控制转移无条件_7④段内间接转移指令格式:JMPreg/mem

指令中指定的16位/32位寄存器或存储器单元中存放着转移目标的16位/32位段内偏移量EA。执行时:用EA代替当前(E)IP,CS不变。例如:JMPBX;16位段内间接转移JMPEDX;32位段内间接转移JMPWORDPTR[BX];16位段内间接转移JMPDWORDPTR[EAX];32位段内间接转移37第二章指令系统整数指令控制转移无条件_7④段内间接第二章指令系统整数指令控制转移无条件_8⑤段间间接转移指令格式:JMPmem指令中指定的存储器单元中存放着转移目标的段值(或段选择符)和16位(或32位)偏移量。执行时:段值:16位偏移量CS:IP或段选择符:32位偏移量CS:EIP例如:JMPDWORDPTR[BX];16位段间间接转移JMPFWORDPTR[EAX];32位段间间接转移38第二章指令系统整数指令控制转移无条件_8⑤段间间接举例:Pentium工作在实地址方式时,(IP)=3D8FH,(CS)=1000H,(DS)=091DH,(BX)=0024H,[09226]=00F6H,[09228]=1E40H。

JMPDWORDPTR32H[BX]执行过程如图:第二章指令系统整数指令控制转移无条件_9指令代码段新IP00F6H新CS1E40H09226H偏移量操作码操作码32H00HF6H00H40H1EH······(DS)×16091D0HBX0024H+0032H09226H数据段···存储器段基址位移量39举例:Pentium工作在实地址方式时,(IP)=3D8FH⑵条件转移指令Jcc指令格式:Jcclable;段内短转移或段内直接转移功能:根据标志位状态组成的转移条件cc,决定程序的执行流向。第二章指令系统整数指令控制转移条件_1是否label顺序执行Jcclabelcc成立吗?cc条件成立时指令执行:16位寻址:IP(IP)+DISP8/DISP1632位寻址:EIP(EIP)+DISP8/DISP3240⑵条件转移指令Jcc功能:根据标志位状态组成的转移说明:①对于8086,条件转移只有短转移,转移距离为:-128~+127;②对于80386/80486/Pentium,推广为段内转移,转移距离分别为:16位寻址:-32768~3276732位寻址:-231~231-1③这类指令通常紧跟在算术/逻辑指令之后。④条件转移指令共有19条,可分为无符号数条件转移指令和有符号数条件转移指令两类。第二章指令系统整数指令控制转移条件_241说明:第二章指令系统整数指令控制转移条件_241第二章指令系统整数指令控制转移条件_3无符号数条件转移指令(10条)指令助记符转移条件含义JCCF=1有进位转移(与JB/JNAE重叠)JNCCF=0无进位转移(与JAE/JNB重叠)JP/JPEPF=1奇偶位为1转移JNP/JPOPF=0奇偶位为0转移JA/JNBECF=ZF=0高于/不低于等于转移JAE/JNBCF=0高于等于/不低于转移JB/JNAECF=1低于/不高于等于转移JBE/JNACF=1或ZF=1低于等于/不高于转移JE/JZZF=1等于/为零转移JNE/JNZZF=0不等于/非零转移42第二章指令系统整数指令控制转移条件_3无符号数条件转第二章指令系统整数指令控制转移条件_4有符号数条件转移指令(9条)指令助记符转移条件含义JOOF=1溢出转移JNOOF=0无溢出转移JSSF=1为负数转移JNSSF=0为正数转移JG/JNLEZF=0且SF=OF大于/不小于等于转移JGE/JNLSF=OF大于等于/不小于转移JL/JNGESF≠OF小于/不大于等于转移JLE/JNGZF=1或SF≠OF小于等于/不大于转移JCXZ(CX)=0CX寄存器为零转移43第二章指令系统整数指令控制转移条件_4有符号数条件转第二章指令系统整数指令控制转移条件_5举例:AX、BX和CX为有符号数,找出三者中最大的数,结果存于AX中。程序段如下:CMPAX,CX;两数比较JGEBIGGER;若(AX)≥(CX),则转移XCHGAX,CX;否则,两数交换BIGGER:CMPAX,BXJNLEXIT;若(AX)≥(BX),则转移XCHGAX,BX;否则,两数交换EXIT:HLT;此时,AX中为最大数44第二章指令系统整数指令控制转移条件_5举例:AX、B第二章指令系统整数指令控制转移循环_1⑶循环控制指令LOOP指令格式:LOOP短标号;LOOPE/LOOPZ短标号;-128~+127LOOPNE/LOOPNZ短标号;功能:用(E)CX作为循环递减计数器,执行时,先将(E)CX减1,再判断条件,决定是否转移。执行转移:(E)IP((E)IP)+DISP8助记符条件满足条件时的操作LOOP(E)CX≠0转移即循环LOOPE/LOOPZ(E)CX≠0且ZF=1转移即循环LOOPNE/LOOPNZ(E)CX≠0且ZF=0转移即循环45第二章指令系统整数指令控制转移循环_1⑶循环控制指第二章指令系统整数指令控制转移循环_2举例:用循环控制指令实现延时。MOVECX,000F0000H;置初值NEXT:NOP;空操作,产生延时LOOPNEXT;执行F0000H次46第二章指令系统整数指令控制转移循环_2举例:用循环控⑷调用/返回指令CALL/RET调用/返回是一种可保护/恢复现场的控制转移指令,用于主程序调用子程序(即过程PROCEDURE)。这两条指令应配对使用。第二章指令系统整数指令控制转移调用/返回_1CALL与JMP指令相似,可实现段内的直接或间接调用、段间的直接或间接调用。两者最大区别是:JMP转移后不用返回;CALL转移后还要返回原处,必须保护断点的现场。指令格式:

CALL目标操作数RET(imm)proc/lablereg/mem功能:CALL用于调用子程序(激活一个过程);

RET用于从被调用子程序返回调用程序。47⑷调用/返回指令CALL/RET第二章指令系统整数指①段内直接调用与返回(以下用16位方式说明)当前CS不变,只需对当前IP进行入栈/出栈操作。

CALLproc/lable;SP(SP)-2,SP(IP)IP(IP)+DISP16

RET;IP(SP),SP(SP)+2其中DISP16为位移量,在指令中给出。第二章指令系统整数指令控制转移调用/返回_2…②段内间接调用与返回当前CS不变,只需对当前IP进行入栈/出栈操作。CALLreg/mem;SP(SP)-2,SP(IP)

IPEA(在reg或mem中)

RET;IP(SP),SP(SP)+2…48①段内直接调用与返回(以下用16位方式说明)第二章指令系③段间直接调用与返回需对当前CS和IP进行入栈/出栈操作:CALLproc/lable;SP(SP)-2,SP(CS)SP(SP)-2,SP(IP);IPEA(指令中),CS段值(指令中)RET;IP(SP),SP(SP)+2CS(SP),SP(SP)+2第二章指令系统整数指令控制转移调用/返回_3…④段间间接调用需对当前的CS和IP进行入栈/出栈操作:

CALLmem;SP(SP)-2,SP(CS)SP(SP)-2,SP(IP);IPEA(mem中),CS段值(mem+2中)

RET;IP(SP),SP(SP)+2CS(SP),SP(SP)+2…49③段间直接调用与返回第二章指令系统整数指令控制转移⑤带参数的过程调用与返回(可传递参数)调用前先压参数入栈;进入子程序后,可从堆栈中取出参数进行处理;返回时,用带立即数的返回指令,先恢复现场,然后释放堆栈中已用参数所占单元。第二章指令系统整数指令控制转移调用/返回_4SP0100HIP低IP高参数2低参数2高参数1低参数1高SP00FCHSP00FAH4字节IP(SP)段内RETimmSP(SP)+2SP(SP)+immIP(SP)SP(SP)+2段间RETimmCS(SP)SP(SP)+2SP(SP)+imm50⑤带参数的过程调用与返回(可传递参数)第二章指令系统整⑸中断和中断返回指令INT/INTO/IRET

中断是指CPU被随机发生的某事件或特意安排的指令暂停当前程序的运行,在保护好断点的现场(压栈)后,转去执行中断服务程序,中断返回时,恢复现场(弹栈),继续运行被暂停的程序。第二章指令系统整数指令控制转移中断_1指令格式:INTnINTOIRET功能:INTn是软中断指令,产生一个中断号为n的软中断。n为8位立即数,取值范围:0~255。执行:标志寄存器和断点地址(CS:(E)IP的值)压栈,将TF、IF清0(关闭单步中断和可屏蔽中断),中断向量送入CS:(E)IP,执行中断服务程序。51⑸中断和中断返回指令INT/INTO/IRET第二章指INTO溢出中断指令,INTn的特例,即:INTO=INT4。该指令一般紧跟算术运算指令之后,若算术指令执行后有溢出(OF=1)时,INTO将产生溢出中断;否则,INTO无任何操作。第二章指令系统整数指令控制转移中断_2IRET

中断返回指令,这是每个中断服务程序必须有的指令,通常是最后执行的一条指令。功能:恢复断点现场,执行过程为INTn的逆过程即:从堆栈中弹出保护现场的(E)IP、CS和标志寄存器值,重新执行被中断的程序。52INTO溢出中断指令,INTn的特例,即:第二章指令系6、位操作指令

386以上特有指令,包括位测试指令和位扫描指令。⑴位测试指令BT/BTS/BTR/BTC指令格式:

BT/BTS/BTR/BTCDST,SRCreg16/mem16reg/immreg32/mem32reg/imm功能:首先,对DST指定的操作数按SRC指定的位进行测试并将该位的值送入标志位CF;之后,BT无动作,BTS、BTR和BTC则将DST中的被测试位分别置1、清0或求反。

注意:只对一位进行操作。第二章指令系统整数指令位操作位测试_1536、位操作指令第二章指令系统整数指令位操作位测试_1例如:BTEAX,1;EAX的D1位CFBTREBX,16;EBX的D16位CF,然后D16位清零BTSAX,0;AX的D0位CF,然后D0位置1举例:测试端口300H的位3并复位MOVDX,300HSTU:INAX,DX;读入16位数据

BTRAX,3;测试并复位位3JCBIT3-SET;测试位为1转移JMPSTU;返回重读BIT3-SET:……;服务处理第二章指令系统整数指令位操作位测试_254例如:BTEAX,1;EAX的D1位CF第二章指⑵位扫描指令BSF/BSR指令格式:

BSF/BSRDST,SRCreg,reg/mem第二章指令系统整数指令位操作位扫描_1功能:BSF为向前位扫描指令,对SRC指定的16位或32位位串:

从低位(b0)高位(b15/b31)进行扫描,将扫描到的第一个“1”位的下标存入DST指定的寄存器中。若SRC为全0时,ZF置1,DST内容无意义;否则ZF清0。

BSR为向后位扫描指令,除了是从高位低位扫描外,其它与BSF一样。要求DST与SRC等长。55⑵位扫描指令BSF/BSR第二章指令系统整数指令位举例:判别某端口(28EH)发生的某个独立事件(置1表示发生)。MOVDX,28EHNOTHING:INAX,DX;读入16位数据

BSFCX,AX;扫描AX的内容JZNOTHING……;根据CX的数字作相应处理第二章指令系统整数指令位操作位扫描_256举例:判别某端口(28EH)发生的某个独立事件第二章指令系7、标志操作指令

标志寄存器(E)FLAGS中的标志位通常是由算术/逻辑运算的结果影响的,但也可以直接对它或它的某些位进行操作,通过改变其状态来控制程序的运行。主要有以下内容:

⑴标志寄存器读写指令

⑵标志寄存器入栈/出栈指令

⑶单个标志位操作指令第二章指令系统整数指令标志操作提要577、标志操作指令第二章指令系统整数指令标志操作提要5⑴标志寄存器读写指令LAHF/SAHF指令格式:LAHFSAHF功能:LAHF为读指令,用于将EFLAGS的低字节读出后装入AH寄存器;

SAHF为写指令,用于将AH的内容写入EFLAGS的低字节。

EFLAGS低字节的各位定义如下:第二章指令系统整数指令标志操作读写D7D6D5D4D3D2D1D0SFZF—AF—PF—CF58⑴标志寄存器读写指令LAHF/SAHF第二章指令系统⑵标志寄存器入栈/出栈指令指令格式:PUSHF/PUSHFDPOPF/POPFD功能:PUSHF/PUSHFD为标志寄存器入栈指令,分别将16位FLAGF和32位EFLAGS的内容压入堆栈。操作:PUSHF使(SP)-2后将FLAGF压栈。PUSHFD使(ESP)-4后将EFLAGF压栈。

POPF/POPFD为标志寄存器出栈指令,分别将栈顶的16位或32位数弹出到FLAGF或EFLAGS中。操作时为逆过程。第二章指令系统整数指令标志操作入栈/出栈59⑵标志寄存器入栈/出栈指令第二章指令系统整数指令标志第二章指令系统整数指令标志操作单个⑶单个标志位操作指令指令格式:均为无操作数指令。功能:仅对CF、DF、IF进行操作,共有7条指令。指令格式功能说明CLCCF0清进位标志STCCF1置进位标志CMCCF取反进位标志取反CLDDF0串操作指令的指针为增量STDDF1串操作指令的指针为减量CLIIF0禁止可屏蔽中断(关中断)STIIF1允许可屏蔽中断(开中断)单个标志位操作指令及功能60第二章指令系统整数指令标志操作单个⑶单个标志位操作第二章指令系统整数指令设置字节_18、根据条件设置字节指令SET指令格式:SETcc操作数reg8/mem8功能:

条件cc满足时,将操作数指定的字节设置为01H;条件cc不满足时,将操作数指定的字节设置为00H;这类指令有16条,是80386的新增指令。见下表:61第二章指令系统整数指令设置字节_18、根据条件设置字节第二章指令系统整数指令设置字节_2指令助记符设置条件指令条件说明SETC/SETB/SETNAECF=1有进位/低于/不高于等于SETNC/SETAE/SETNBCF=0无进位/高于或等于/不低于SETOOF=1溢出SETNOOF=0无溢出SETP/SETPEPF=1校验为偶SETNP/SETPOPF=0校验为奇SETSSF=1为负数SETNSSF=0为正数条件设置字节指令表62第二章指令系统整数指令设置字节_2指令助记符设置条件指指令助记符设置条件指令条件说明SETA/SETNBECF=ZF=0高于/不低于等于SETBE/SETNACF=1或ZF=1低于或等于/不高于SETE/SETZZF=1等于/为零SETNE/SETNZZF=0不等于/非零SETG/SETNLEZF=1且SF=OF大于/不小于等于SETGE/SETNLSF=OF大于或等于/不小于SETL/SETNGESF≠OF小于/不大于等于SETLE/SETNGZF=1或SF≠OF小于或等于/不大于第二章指令系统整数指令设置字节_3条件设置字节指令表(续)63指令助记符设置条件指令条件说明SETA/SETNBECF=Z第二章指令系统整数指令处理器控制9、处理器控制指令

这类指令主要包括:标志位操作指令(前面已介绍)、外同步指令、空操作指令。指令格式功能HLT使CPU停止程序执行,进入暂停状态,直到有复位信号和外中断请求时才退出暂停状态WAIT使CPU处于暂停状态,直到有外部中断请求时才退出,顺序执行下一条指令ESC交权给外部处理器。如:浮点处理器LOCK前缀LOCK可加在任何指令之前,用于产生总线封锁信号LOCK,禁止其它总线主设备访问总线NOP执行一次空操作,仅修改指令指针64第二章指令系统整数指令处理器控制9、处理器控制指令指令3、逻辑运算与移位指令⑴逻辑与/或/异或/测试指令⑵逻辑非指令⑶算术/逻辑左移指令⑷算术/逻辑右移指令⑸循环移位指令⑹双精度左移/右移指令第二章指令系统整数指令逻辑/移位提要653、逻辑运算与移位指令第二章指令系统整数指令逻辑/移位第二章指令系统整数指令逻辑/移位逻辑运算_1⑴逻辑与/或/异或/测试指令AND/OR/XOR/TEST指令格式:AND/OR/XOR/TESTDST,SRCreg,reg/mem/immmem,reg/immOFDFIFTFSFZFAFPFCF0---XX-U-X-0注意:操作数DST、SRC的宽度必须相等。

四条指令对标志位的影响相同:功能:AND/OR/XOR分别对DST和SRC按位进行逻辑

与/或/异或操作,结果存入DST中。即:DST(DST)与/或/异或(SRC)

TEST只对DST和SRC按位进行逻辑与操作,不存结果。66第二章指令系统整数指令逻辑/移位逻辑运算_1⑴逻辑例1:将ASCII码转换为未组合BCD码。MOVAL,‘6’;6的ASCII码送AL,(AL)=36H

ANDAL,0FH;用0屏蔽高4位,用1保留低4位第二章指令系统整数指令逻辑/移位逻辑运算_2例5:TESTAL,80H;仅测试(AL)的最高位JZBUSY;最高位为0,则转向BUSY例4:XORCX,CX;这条指令结果如何?例3:对寄存器的某些位求反,某些位保持不变。MOVCL,0F0H

XORAL,CL;用1对高4位求反,用0保留低4位例2:将未组合BCD码转换为ASCII码。MOVAL,9;(AL)=09H

ORAL,30H;用1强行置位,(AL)=39H67例1:将ASCII码转换为未组合BCD码。第二章指令系统⑵逻辑非指令NOT指令格式:NOTDSTregmem功能:对DST中每一位都求反(0变1,1变0)。不影响标志位。举例:NOTBX;设执行前(BX)=5555H;则执行后(BX)=AAAAH第二章指令系统整数指令逻辑/移位逻辑运算_368⑵逻辑非指令NOT第二章指令系统整数指令逻辑/移位⑶算术/逻辑左移指令SAL/SHL指令格式:SAL/SHLDST,移位次数reg/mem,imm8/CL第二章指令系统整数指令逻辑/移位左移_1CFMSB操作数LSB0功能:都是将DST的内容向左移位,移动次数由imm8/CL决定。每左移一位,将最高有效位MSB移进CF,在最低有效位LSB补0。69⑶算术/逻辑左移指令SAL/SHL第二章指令系统整数说明:

①影响标志位:OF、SF、ZF、PF、CF。②规定80386以上移位次数不超过31;8086用立即数时只能是1,用CL时最多可移位255次。③移位次数为1时,若移位后进位标志CF与结果的最高位相等,则OF=0,否则OF=1。第二章指令系统整数指令逻辑/移位左移_2举例:将AX中的无符号数乘8。MOVAX,12HMOVCL,3

SALAX,CL;左移三次,相当于;AX(AX)×8=90H70说明:第二章指令系统整数指令逻辑/移位左移_2举例:⑷算术/逻辑右移指令SAR/SHR指令格式:SAR/SHRDST,移位次数reg/mem,imm8/CL功能:SAR是算术右移指令,对有符号数右移;

SHR是逻辑右移指令,对无符号数右移。都是将DST的内容向右移位,移动次数由imm8/CL决定。第二章指令系统整数指令逻辑/移位右移_1CFMSB操作数LSB算术右移(SAR)(最高位符号位扩展)逻辑右移(SHR)0CFMSB操作数LSB71⑷算术/逻辑右移指令SAR/SHR第二章指令系统说明:1、影响标志位:OF、SF、ZF、PF、CF。2、移位次数的规定与SAL/SHL相同。3、移位次数为1时,对SAR指令,将OF置0;对SHR指令,将OF置成与原DST最高有效位MSB相同的值。右移指令常用于实现除以2n的操作第二章指令系统整数指令逻辑/移位右移_2例如:将AX中的有符号数除以16(=24)。MOVAX,-1024;(AX)=FC00HMOVCL,4

SARAX,CL;(AX)=FFC0H=-6472说明:1、影响标志位:OF、SF、ZF、PF、CF。第二章⑸循环移位指令ROL/ROR/RCL/RCR指令格式:

ROL/ROR/RCL/RCRDST,移位次数reg/mem,imm8/CL第二章指令系统整数指令逻辑/移位循环移位_1说明:移位次数由imm8/CL决定。四条指令影响标志位:OF、SF、ZF、PF、CF。RCL和RCR则是将标志位CF与DST连接在一起进行循环左移和循环右移。功能:ROL和ROR分别为左环移和右环移指令,对DST进行循环左移和循环右移。73⑸循环移位指令ROL/ROR/RCL/RCR第二章指令第二章指令系统整数指令逻辑/移位循环移位_2CFMSB操作数DSTLSB循环左移ROLCFMSB操作数DSTLSB循环右移RORCFMSB操作数DSTLSB带进位循环左移RCLCFMSB操作数DSTLSB带进位循环右移RCR74第二章指令系统整数指令逻辑/移位循环移位_2CF第二章指令系统整数指令逻辑/移位循环移位_3举例:编写程序段,将寄存器AL中的内容顺序颠倒,即将AL7~AL0变为AL0~AL7。CFMSBALLSBCFMSBBLLSBROLRCR

MOVBL,AL;BL(AL)MOVCL,8;循环次数为8AGAIN:ROLBL,1;(BL)依次左移,最高位进入CF

RCRAL,1;(AL)依次右移,CF填充最高位LOOPAGAIN75第二章指令系统整数指令逻辑/移位循环移位_3举例:编⑹双精度左移/右移指令SHLD/SHRD指令格式:SHLD/SHRDDST,SRC,移位次数reg16/mem16,reg16,imm8/CLreg32/mem32,reg32,imm8/CL第二章指令系统整数指令逻辑/移位双精度移位310SHLD:CFDST(目的)SRC(源)310310SHRD:CFSRC(源)DST(目的)310功能:将DST和SRC连成双精度值(32位或64位)向左或右移,移动次数由imm8/CL决定。SRC内容逐位移入DST,且自己保持不变。CF中的值为DST移出的最后一位。影响标志位:SF、ZF、PF、CF。这是80386新增指令。76⑹双精度左移/右移指令SHLD/SHRD第二章指令系统⑴串传送指令⑵串装入指令⑶串存储指令⑷串扫描指令⑸串比较指令⑹串输入指令⑺串输出指令⑻重复前缀第二章指令系统整数指令串操作提要4、串操作指令77⑴串传送指令第二章指令系统整数指令串操作提要4、串串操作的有关约定:①DS:(E)SI为源串,ES:(E)DI为目的串,指令中不必指明操作数。②源串的DS可用段前缀改变,但目的串的ES不能超越。③源串指针(E)SI和目的串指针(E)DI在每次操作后,将根据DF的值来自动增量(DF=0)或自动减量(DF=1),以指向下一项,增/减量大小由操作数宽度决定。④通常串操作指令前可加重复前缀,此时必须用(E)CX作次数计数器,操作一次,(E)CX值减1,直至减为0,结束。⑤只有串扫描、串比较指令影响标志位。第二章指令系统整数指令串操作约定78串操作的有关约定:第二章指令系统整数指令串操作约定1⑴串传送指令MOVS/MOVSB/MOVSW/MOVSD指令格式:MOVS目的串,源串;由串数据的宽度决定mem,mem;字节/字/双字串操作MOVSB;字节串传送MOVSW;字串传送MOVSD;双字串传送第二章指令系统整数指令串操作串传送_1操作:[ES:(E)DI]([DS:(E)SI]);传送(E)SI((E)SI)±1/2/4;修改源指针

(E)DI((E)DI)±1/2/4;修改目的指针功能:将DS:[(E)SI]指定的源串中的一个字节/字/双字传送到ES:[(E)DI]指定的目的串,并自动修改指针。可加重复前缀。79⑴串传送指令MOVS/MOVSB/MOVSW/MOVSD第二章指令系统整数指令串操作串传送_2举例:将数据段中自FIRST开始的100个字符数据复制到附加段以SECOND开始的数据区中,用基本传送指令实现。程序段如下:LEASI,FIRST;置源串有效地址LEADI,SECOND;置目的串有效地址MOVCX,100;设置计数初值CLD;DF=0,增量模式DONE:MOVSB;

LOOPDONE;等效于:REPMOVSB80第二章指令系统整数指令串操作串传送_2举例:将数据段第二章指令系统整数指令串操作串传送_3串传送举例示意图数据段(源串)DS:SIFIRSTES:DISECOND‘A’‘B’‘C’‘D’‘E’······附加段(目的串)存储器81第二章指令系统整数指令串操作串传送_3串传送举例示意⑵串装入指令LODS/LODSB/LODSW/LODSD指令格式:LODS源串;由串数据的宽度决定mem;字节/字/双字串操作LODSB/LODSW/LODSD;无显式操作数,分别对应字节/字/双字装入第二章指令系统整数指令串操作串装入操作:AL/AX/EAX([DS:(E)SI]);装入一个数据(E)SI((E)SI)±1/2/4;修改源指针功能:将DS:[(E)SI]指定的源串中的一个字节/字/双字装入累加器中,并自动修改指针。该指令前一般不加重复前缀。82⑵串装入指令LODS/LODSB/LODSW/LODSD⑶串存储指令STOS/STOSB/STOSW/STOSD指令格式:STOS目的串;由串数据的宽度决定mem;字节/字/双字串操作STOSB/STOSW/STOSD;无显式操作数,分别对应字节/字/双字存储第二章指令系统整数指令串操作串存储这两条指令合用可实现MOVSW的功能吗?请问:LODSWSTOSW操作:[ES:(E)DI](AL/AX/EAX);存储数据(E)DI((E)DI)±1/2/4;修改目的指针功能:将累加器的内容存储到ES:[(E)DI]指定的目的串中,自动修改指针。该指令前可加重复前缀。83⑶串存储指令STOS/STOSB/STOSW/STOSD⑷串扫描指令SCAS/SCASB/SCASW/SCASD指令格式:SCAS目的串;由串数据的宽度决定mem;字节/字/双字串操作SCASB/SCASW/SCASD;无显式操作数,分别对应字节/字/双字串扫描第二章指令系统整数指令串操作串扫描_1该指令用于查找串数据中的关键字很方便。这条指令前常加重复前缀,后跟条件转移指令。功能:用累加器中的内容减去ES:[(E)DI]指定的目的串元素的内容,仅改变标志位,不改变二者的内容,并自动修改指针。其实质是在扫描串中寻找与累加器中的内容相同者,有则将标志ZF置1。84⑷串扫描指令SCAS/SCASB/SCASW/SCASD举例:通过加重复前缀,在一个字符串中搜索关键字‘*’。程序段如下:LEAEDI,STRING;EDI指向字符串首元素MOVECX,LENGTH;串长度送ECXCLD;DF清零,增量操作MOVAL,‘*’

REPNESCASB

温馨提示

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

评论

0/150

提交评论