《最新微机课件第3章2PPT课件.ppt》由会员分享,可在线阅读,更多相关《最新微机课件第3章2PPT课件.ppt(92页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、微机课件第3章2逻辑运算和移位指令2“与”指令应用例 LEA SI,DATA MOV DX,3F8HWATT:IN AL,DX AND AL,02H JZ WATT ;ZF=1转移转移 MOV DX,38FH MOV AX,SI OUT DX,AX92.“或”运算指令n格式:格式:nOR OPRD1,OPRD2n操作:操作:n两操作数相两操作数相“或或”,结果送目标地址,结果送目标地址10“或”指令的应用n实现两操作数实现两操作数 相相“或或”的的 运算运算nOR AX,DIn使某些位不变,某些位置使某些位不变,某些位置“1”nOR CL,0FHn在不改变操作数的在不改变操作数的 情况下使情况
2、下使OF=CF=0nOR AX,AX11“或”指令的应用例 OR AL,AL JPE GOON OR AL,80H GOON:.PF=1转移转移12“或”指令的应用将一个二进将一个二进制数制数9变为字变为字符符9如何实现如何实现?133.“非”运算指令n格式:格式:nNOT OPRDNOT OPRDn操作:操作:n操作数按位取反再送回原地址操作数按位取反再送回原地址n注:注:n指令中的操作数不能是立即数指令中的操作数不能是立即数n指令的执行对标志位无影响指令的执行对标志位无影响n例:例:NOT BYTE PTRBXNOT BYTE PTRBX144.“异或”运算指令n格式:格式:nXOR OP
3、RD1,OPRD2n操作:操作:n两操作数相两操作数相“异或异或”,结果送目标地址,结果送目标地址n例:例:XOR BL,80H XOR AX,AX155.“测试”指令n格式:格式:nTEST OPRD1,OPRD2n操作:操作:n执行执行“与与”运算,但运算的结果不送回目运算,但运算的结果不送回目标地址。标地址。n应用:应用:n常用于测试某些位的状态常用于测试某些位的状态16例:n从地址为从地址为3F8H的的 端口中读入一个字节数,端口中读入一个字节数,当当该数的该数的 bit1,bit3,bit5位同时为位同时为1时时,可从可从38FH端口将端口将DATA为首地址的一个字输出,为首地址的一
4、个字输出,否则就不能进行数否则就不能进行数 据传送。据传送。编写相应的编写相应的 程序段。程序段。17源程序代码:LEA SI,DATA MOV DX,3F8HWATT:IN AL,DX MOV DX,38FH MOV AX,SI OUT DX,AXANDAL,2AHCMPAL,2AHJNZWATTTESTAL,02HJZWATT;ZF=1转移转移TESTAL,08HJZWATTTESTAL,20HJZWATTANDAL,2AHXORAL,2AHJNZWATT18二、移位指令 非循环移位指令非循环移位指令 循环移位指令循环移位指令注:注:n移动一位时由指令直接给出;移动一位时由指令直接给出;n
5、移动两位及以上,则移位次数由移动两位及以上,则移位次数由CL指定。指定。191.非循环移位指令n逻辑左移逻辑左移n算术左移算术左移n逻辑右移逻辑右移n算术右移算术右移20算术左移和逻辑左移n算术左移指算术左移指 令:令:SAL OPRD,1 SAL OPRD,CLn逻辑左移指逻辑左移指 令:令:SHL OPRD,1 SHL OPRD,CL有符号数有符号数无符号数无符号数21逻辑右移n格式:格式:SHR OPRD,1 SHR OPRD,CL0CF无符号数无符号数的右移的右移22逻辑右移例:nMOV AL,68HnMOV CL,2nSHR AL,CL0CF011010AL00000110100AL
6、CF0000011010ALCF00移动移动1次次移动移动2次次23算术右移n格式:格式:SAR OPRD,1 SAR OPRD,CL有符号数有符号数的右移的右移CF24非循环移位指令的应用n左移可实现乘法运算左移可实现乘法运算n右移可实现除法运算右移可实现除法运算 教材教材教材教材p121p121例例例例252.循环移位指令n不带进位位的循环移位不带进位位的循环移位n带进位位的循环移位带进位位的循环移位左移左移 ROL右移右移 ROR左移左移 RCL右移右移 RCR指令格式、对操作数的要求与非循环移位指令相同指令格式、对操作数的要求与非循环移位指令相同26不带进位位的循环移位CFCF27带进
7、位位的循环移位CFCF28循环移位指令的应用n用于对某些位状态的测试;用于对某些位状态的测试;n高位部分和低位部分的交换;高位部分和低位部分的交换;n与非循环移位指令一起组成与非循环移位指令一起组成32位或更长字位或更长字长数的移位。长数的移位。P124例例3-34P124例例3-3529程序功能n将将10001000H H开开始始存存放放的的4 4个个压压缩缩BCDBCD码码转转换换为为 ASCIIASCII码码 存存 放放 在在30003000H H开开始始的的单单元元中中去。去。12H34H56H78H 1000H3000H30程序例 MOV SI,1000H MOV DI,3000H
8、MOV CX,4Next:MOV AL,SI MOV BL,AL AND AL,0FH OR AL,30H MOV DI,AL INC DI MOV AL,BLPUSH CXMOV CL,4SHR AL,CLSHR AL,CLOR AL,30HOR AL,30HMOV DI,ALMOV DI,ALINC DIINC DIINC SIINC SIPOP CXPOP CXDEC CXDEC CXJNZ NextJNZ NextHLTHLT31串操作指令32串操作指令说明n针对数据块或字符串的操作;针对数据块或字符串的操作;n可实现存储器到存储器的数据传送;可实现存储器到存储器的数据传送;n待操作的
9、数据串称为源串,目标地址称为待操作的数据串称为源串,目标地址称为目标串。目标串。33串操作指令的特点n源串一般存放在数据段,偏移地址由源串一般存放在数据段,偏移地址由SI指定。允许段指定。允许段重设;重设;n目标串必须在附加段,偏移地址由目标串必须在附加段,偏移地址由DI指定;指定;n指令自动修改地址指针,修改方向由指令自动修改地址指针,修改方向由DF决定。决定。DF=0 DF=1n数据块长度值由数据块长度值由CX指定指定n可增加自动重复前缀以实现自动修改可增加自动重复前缀以实现自动修改CX内容。内容。增地址方向;增地址方向;减地址方向;减地址方向;34重复前缀n无条件重复无条件重复nREPn
10、条件重复条件重复nREPE 相等重复相等重复nREPZ 为零重复为零重复nREPNE 不相等重复不相等重复nREPNZ 不为零重复不为零重复CX0 ZF=1CX0 ZF=0CX0 重复重复35串操作指令n串传送串传送 MOVSn串比较串比较 CMPSn串扫描串扫描 SCASn串装入串装入 LODSn串送存串送存 STOS36串操作指令流程(以传送操作为例)取源串地址取源串地址取目标串地址取目标串地址设串长度设串长度传送一个字节或字传送一个字节或字修改地址指针修改地址指针修改串长度值修改串长度值传送完否?传送完否?NY设操作方向设操作方向371.串传送指令n格式:格式:MOVS OPRD1,OP
11、RD2 MOVSB MOVSWn串传送指令常与无条件重复前缀连用串传送指令常与无条件重复前缀连用38串传送指令n对比用对比用MOV指令和指令和MOVS指令实现将指令实现将200个字节数据从内存的一个区域送到个字节数据从内存的一个区域送到另一个区域的程序段。另一个区域的程序段。P104例例3-1239串传送指令例n用串传送指令实现用串传送指令实现200个字节数据的传送:个字节数据的传送:LEA SI,MEM1 LEA DI,MEM2 MOV CX,200 CLD REP MOVSB HLT402.串比较指令n格式:格式:CMPS OPRD1,OPRD2 CMPSB CMPSWn串比较指令常与条件
12、重复前缀连用,指令的执串比较指令常与条件重复前缀连用,指令的执 行不改变操作数,仅影响标志位。行不改变操作数,仅影响标志位。n前缀的操作对标志位不影响前缀的操作对标志位不影响41串比较指令例测试测试200个字节数据是否传送正确:个字节数据是否传送正确:LEASI,MEM1LEADI,MEM2MOVCX,200CLDREPECMPSBTEST CX,00FFHJZSTOPDECSIMOVAL,SIMOVBX,SISTOP:HLT423.串扫描指令n格式:格式:SCAS OPRD SCASB SCASWn执行与执行与CMPS指令相似的操作,只是这里的源指令相似的操作,只是这里的源 操作数是操作数是
13、AX或或AL目目 标标操作数操作数43串扫描指令的应用n常用于在指定存储区域中寻找某个关键字。常用于在指定存储区域中寻找某个关键字。教材教材p127例例444.串装入指令n格式:格式:LODS OPRD LODSB LODSWn操作:操作:n对字节:对字节:n对对 字:字:源操作数源操作数DS:SIDS:SIDS:SIDS:SIALALAXAX454.串装入指令n用于将内存某个区域的数据串依次装入累加用于将内存某个区域的数据串依次装入累加 器,以便显示或输出到接口。器,以便显示或输出到接口。nLODS指令一般不加重复前缀。指令一般不加重复前缀。465.串存储指令n格式:格式:STOS OPRD
14、 STOSB STOSWn操作:操作:n对字节:对字节:ALALn对对 字:字:AXAX目目 标标操作数操作数ES:DIES:DI47串存储指令的应用n常用于将内存某个区域置同样的值常用于将内存某个区域置同样的值n此时:此时:n将待送存的数据放入将待送存的数据放入AL(字节数)或(字节数)或AX(字数据);(字数据);n确定操作方向(增地址确定操作方向(增地址/减地址)和区域大小(串减地址)和区域大小(串长度值);长度值);n使用串存储指令使用串存储指令+无条件重复前缀,实现数据传送。无条件重复前缀,实现数据传送。48串存储指令例n将内存某单元清零将内存某单元清零nP129例例3-4049串操
15、作指令应用注意事项n需要定义附加段需要定义附加段n目标操作数必须在附加段目标操作数必须在附加段n需要设置数据的操作方向需要设置数据的操作方向n确定确定DF的状态的状态n源串和目标串指针分别为源串和目标串指针分别为SI和和DIn串长度值必须由串长度值必须由CX给出给出n注意重复前缀的使用方法注意重复前缀的使用方法n传送类指令前加无条件重复前缀传送类指令前加无条件重复前缀n串比较类指令前加条件重复前缀,但前缀不影响串比较类指令前加条件重复前缀,但前缀不影响ZF状态状态50程序控制指令n转移指令转移指令n循环控制循环控制n过程调用过程调用n中断控制中断控制51程序的执行方向n程序控制类指令的本质是:
16、程序控制类指令的本质是:n控制程序的执行方向控制程序的执行方向n决定程序执行方向的因素:决定程序执行方向的因素:nCS,IPn控制程序执行方向的方法:控制程序执行方向的方法:n修改修改CS 和和IP,则程序转向另一个代码段执行;,则程序转向另一个代码段执行;n仅修改仅修改IP,则程序将改变当前的执行顺序,转向本,则程序将改变当前的执行顺序,转向本代码段内其它某处执行。代码段内其它某处执行。52一、转移指令无条件无条件转移指令转移指令 无条件转移到目标地址,执行新的指令无条件转移到目标地址,执行新的指令有条件转移指令有条件转移指令 在具备一定条件的情况下转移到目标地址在具备一定条件的情况下转移到
17、目标地址通过修改指令的通过修改指令的偏移地址偏移地址或或段地址及偏移地址段地址及偏移地址实现程序的转移实现程序的转移531.无条件转移指令n格式:格式:JMP OPRD目标地址目标地址与与JMP在同在同一代码段一代码段与与JMP不在同不在同一代码段一代码段原则上可实现在整个内存空间的转移原则上可实现在整个内存空间的转移54无条件段内转移n转移的转移的目标地址目标地址在当前代码段内,段地址不在当前代码段内,段地址不 改改变。变。n即:即:目标地址目标地址是是16位偏移地址。位偏移地址。指令中直接给出指令中直接给出目标地址目标地址由指令中的寄存器或由指令中的寄存器或存储器操作数指出目存储器操作数指
18、出目标地址标地址段内直接转移段内直接转移段内间接段内间接转移转移55段内直接转移n转移的目标地址由指令直接给出转移的目标地址由指令直接给出n格式:格式:nJMP Label近地址标号近地址标号56段内直接转移示图JMPLabel 代代码码段段位移量位移量下一条要执行指令的偏移地址下一条要执行指令的偏移地址=当前当前IP+位移量位移量JMPLabel57段内间接转移n段内间接转移段内间接转移n转移的目标地址存放在某个转移的目标地址存放在某个16位寄存器或存储器位寄存器或存储器 的某两个单元中的某两个单元中n例:例:nJMP BXn若:若:BX=1200Hn则:转移的目标地址则:转移的目标地址=1
19、200HJMP 代代码码段段1200HMOV58段内间接转移例nJMP WORD PTRBX 设:设:BX=1200HJMP 代代码码段段数数据据段段BX=1200 XXHXXHIP指令码指令码59无条件段间转移n转移的转移的目标地址目标地址不在当前代码段内。不在当前代码段内。n目标地址目标地址为为32位,包括段地址和偏移地址。位,包括段地址和偏移地址。指令中直接给出指令中直接给出目标地址目标地址由指令中的由指令中的32位存储器位存储器操作数指出目标地址操作数指出目标地址段间直接转移段间直接转移段间间接转移段间间接转移60段间直接转移n段内直接转移段内直接转移n转移的目标地址由指令直接给出转移
20、的目标地址由指令直接给出n格式:格式:nJMP FAR Label远地址标号远地址标号61段间直接转移示图JMPLabel 代代码码段段1Label与与JMP之间的位移量之间的位移量代代码码段段2XXHXXHXXHXXHIPCS62段间间接转移n段内间接寻址段内间接寻址n转移的目标地址由指令中的转移的目标地址由指令中的32位操作数给出位操作数给出n 例:例:nJMP DWORD PTRBXXXHXXHXXHXXHBXIPCSJMP 指令码指令码代代码码段段1代代码码段段2数数据据段段63无条件转移指令例(1)2000:0100 MOV AX,1200H(2)2000:0103 JMP NEXT
21、 (3)2000:0120 NEXT:MOV BX,1200H(4)JMP BX (5)2000:1200 64无条件转移指令例nMOV SI,1122HnMOV WORD PTRSI,0120HnADD SI,2nMOV WORD PTRSI,0122HJMP DWORD PTRSI-2JMP WORD PTRSIJMP1122H 代代码码段段数数据据段段01H22H20H01HIPCSIP652.条件转移指令n在满足一定条件下,程序转移到目标地址在满足一定条件下,程序转移到目标地址继续执行继续执行n条件转移指令均为段内短转移,即转移条件转移指令均为段内短转移,即转移 范围为:范围为:-12
22、8-+127p13266条件转移指令的应用n几种条件转移指令的应用几种条件转移指令的应用nJC/JNCn判断判断CF的状态。常用于比大小的状态。常用于比大小nJZ/JNZn判断判断ZF的状态。常用于循环体的结束判断的状态。常用于循环体的结束判断nJO/JNOn判断判断OF的状态。常用于有符号数溢出的判断的状态。常用于有符号数溢出的判断nJP/JPEn判断判断PF的状态。用于判断运算结果低的状态。用于判断运算结果低8位中位中1的个数是否为偶数的个数是否为偶数nJA/JAE/JB/JBEn判断判断CF或或CF+ZF的状态。常用于无符号数的大小比较的状态。常用于无符号数的大小比较67转移指令例n统计
23、内存数据段中以统计内存数据段中以TABLE为首地址的为首地址的100个个8位符号数中正数、负数和零元数位符号数中正数、负数和零元数的个数。的个数。68转移指令例(流程图)将存放各元素个将存放各元素个数的单元清零数的单元清零取首地址取首地址设串长度设串长度取一个字节数取一个字节数正数个数加正数个数加1零元素加零元素加1为负?为负?为零?为零?负数个数加负数个数加1NYNY69二、循环控制指令n循环范围:循环范围:n以当前以当前IP为中心的为中心的-128+127范围内循环。范围内循环。n循环次数由循环次数由CX寄存器指定。寄存器指定。n循环指令:循环指令:LOOP *LOOPZ *LOOPNZ无
24、条件循环指令无条件循环指令条件循环指令条件循环指令70无条件循环指令n格式:格式:LOOP LABELn循环条件:循环条件:CX 0n操作:操作:DEC CX JNZ 符号地址符号地址71三、过程调用和返回n用于调用一个子过程;用于调用一个子过程;n子过程由程序员预先设计子过程由程序员预先设计 并装入内存并装入内存 n子过程执行结束后要返回子过程执行结束后要返回 原调用处原调用处调用程序调用程序断点断点入口入口地址地址子程序子程序72调用指令的执行过程n保护断点;保护断点;n将调用指令的下一条指令的地址(断点)压入堆栈将调用指令的下一条指令的地址(断点)压入堆栈n获取子过程的入口地址;获取子过
25、程的入口地址;n子过程第子过程第1条指令的偏移地址条指令的偏移地址n执行子过程,含相应参数的保存及恢复;执行子过程,含相应参数的保存及恢复;n恢复断点,返回原程序。恢复断点,返回原程序。n将断点偏移地址由堆栈弹出将断点偏移地址由堆栈弹出73过程调用段内调用段内调用段间调用段间调用段内直接调用段内直接调用段内间接调用段内间接调用段间直接调用段间直接调用段间间接调用段间间接调用741.段内调用n被调用程序与调用程序在同一代码段被调用程序与调用程序在同一代码段n调用前只需保护断点的偏移地址调用前只需保护断点的偏移地址n格式:格式:CALL NEAR PROCn执行过程:执行过程:近过程名近过程名代码
26、代码段段1调用程序调用程序被调用程序被调用程序代码代码段段1n将断点的偏移地址压入堆栈将断点的偏移地址压入堆栈n根据过程名找子程序入口根据过程名找子程序入口75段内调用例(1)CALL TIMRE(2)CALL WORD PTRSI直接调用直接调用间接调用间接调用44H33HCALL代代码码段段数数据据段段 设:设:SI=1200HCS=6000H1200H执行第(执行第(2)条指令后:)条指令后:6000HCS=3344HIP=762.段间调用n子过程与原调用程序不在同一代码段子过程与原调用程序不在同一代码段n先将断点的先将断点的CS压栈,再压入压栈,再压入IP。调用前需保护断点的段基地址和
27、偏移地址调用前需保护断点的段基地址和偏移地址77段间调用例n格式:格式:CALL FAR PROCn格式例:格式例:nCALL FAR TIMREnCALL DWORD PTRSIXXHXXHCALL代代码码段段数数据据段段 SIXXHXXHCSIP783.返回指令n功能:功能:n从堆栈中弹出断点地址,返回原程序从堆栈中弹出断点地址,返回原程序n格式:格式:RETRETnRETRET指令一般位于子程序的最后。指令一般位于子程序的最后。79四、中断指令n中断中断n中断源中断源n中断的类型中断的类型n中断指令中断指令n引起引起CPU产生一次中断的指令产生一次中断的指令80中断与过程调用:n中断是随
28、机事件或异常事件引起,调用则是事中断是随机事件或异常事件引起,调用则是事 先已在程序中安排好先已在程序中安排好;n响应中断请求不仅要保护断点地址,还要保护响应中断请求不仅要保护断点地址,还要保护 FLAGS内容;内容;n调用指令在指令中直接给出子程序入口地址,调用指令在指令中直接给出子程序入口地址,中断指令只给出中断向量码,入口地址则在向中断指令只给出中断向量码,入口地址则在向 量码指向的内存单元中。量码指向的内存单元中。811.中断指令n格式:格式:INT nn说明:说明:n4中断类型码中断类型码n=0 255n 4XXHXXHXXHXXH入口的段地址入口的段地址入口的偏移地址入口的偏移地址
29、存放中断服务子程序入口存放中断服务子程序入口地址的单元的偏移地址地址的单元的偏移地址代代码码段段数数据据段段 该单元在数据段,段地址该单元在数据段,段地址=DS 82中断指令的执行过程n将将FLAGS压入堆栈;压入堆栈;n将将INT指令的下一条指令的指令的下一条指令的CS、IP压栈;压栈;n由由n4得到存放得到存放中断向量的地址;中断向量的地址;n将中断向量(中断服务程序入口地址)送将中断向量(中断服务程序入口地址)送CS和和IP寄存器;寄存器;n转入中断服务程序。转入中断服务程序。83中断指令的执行过程n422H11H00H67HIPCS68122HMOV代代码码段段数数据据段段 堆堆栈栈段
30、段SPFLAGSHFLAGSLIPHCSLCSHIPL SPSPSP84中断指令例执行程序段:执行程序段:CS IP 6200H:0110H INT 21H6200H:0112H MOV AX,BX 12H01H00H62HSP=1200FLAGSLFLAGSHSP=11FA执行执行INT指令后指令后堆堆栈栈段段85中断指令例n执行执行INT 21H指令后指令后 IP=21H4 CS=(21H4)+20084H23H11H00H20HIPCS数数据据段段 代代码码段段XX21123H中断服中断服务子程序子程序862.溢出中断指令n格式:格式:INTO n若若OF=1,OF=1,则启动一个类型为
31、则启动一个类型为4 4的中断过程的中断过程,给出给出一个出错标志一个出错标志,如果如果OF=0,OF=0,不做任何操作。不做任何操作。nINTOINTO指令通常安排在有符号数加减运算指令之指令通常安排在有符号数加减运算指令之后。后。相当于相当于INT 4873.中断返回指令n格式:格式:IRETn中断服务程序的最后一条指令,负责中断服务程序的最后一条指令,负责恢复断点恢复断点恢复标志寄存器内容恢复标志寄存器内容88六、处理器控制指令对标志位的操作对标志位的操作与外部设备的同步与外部设备的同步说明见说明见p139表表89本章课外自学内容:nBCDBCD码调整指令码调整指令n远地址指针指令远地址指针指令LDSLDS,LESLESn条件循环指令条件循环指令LOOPZLOOPZ,LOOPNZLOOPNZnPentiumPentium新增指令新增指令90结束语:掌握:掌握:n指令的格式及意义;指令的格式及意义;n指令对操作数的要求及对标志位的影响;指令对操作数的要求及对标志位的影响;n指令的应用。指令的应用。91结束语结束语谢谢大家聆听!谢谢大家聆听!92
限制150内