第3章指令系统2_第1页
第3章指令系统2_第2页
第3章指令系统2_第3页
第3章指令系统2_第4页
第3章指令系统2_第5页
已阅读5页,还剩86页未读 继续免费阅读

下载本文档

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

文档简介

1、18086指令系统指令系统(2)2逻辑运算和移位指令3指令类型n逻辑运算逻辑运算n与,或,非,异或与,或,非,异或n移位操作移位操作n非循环移位,循环移位非循环移位,循环移位4 一、逻辑运算n逻辑运算指令对逻辑运算指令对 操作数的操作数的 要求大多与要求大多与MOV指令指令 相同。相同。n“非非”运算指令运算指令 要求操作数要求操作数 不能是立即数;不能是立即数;n除除“非非”运算指令运算指令 外,其余指令的执行都会外,其余指令的执行都会使标志位使标志位OF=CF=051.“与”指令:n格式:格式: n AND OPRD1,OPRD2n操作:操作: n两操作数相两操作数相“与与”,结果送目标地

2、址。,结果送目标地址。6“与”指令的应用n实现两操作数按位相与的运算实现两操作数按位相与的运算nAND BL,SIn使目标操作数的某些位不变,某些位清零使目标操作数的某些位不变,某些位清零nAND AL,0FHn在操作数不变的在操作数不变的 情况下使情况下使CF和和OF清零清零nAND AX,AX7“与”指令应用例n从地址为从地址为3F8H 端口中读入一个字节数,端口中读入一个字节数,如果该数如果该数 bit1位为位为1,则可从,则可从38FH端口将端口将DATA为首地址的一个字输出,否则就不能为首地址的一个字输出,否则就不能进行数据传送。进行数据传送。 编写相应的程序段。编写相应的程序段。8

3、“与”指令应用例开开 始始取待输出数的取待输出数的偏移地址偏移地址读入状态字读入状态字测试测试bit1位状态位状态Bit1=1?取输入口地址取输入口地址取输出口地址取输出口地址 输出一个字输出一个字NY9“与”指令应用例 LEA SI,DATA MOV DX,3F8HWATT:IN AL,DX AND AL,02H JZ WATT ;ZF=1转移转移 MOV DX,38FH MOV AX,SI OUT DX,AX102.“或”运算指令n格式:格式: nOR OPRD1,OPRD2n操作:操作: n两操作数相两操作数相“或或”,结果送目标地址,结果送目标地址11“或”指令的应用n实现两操作数实现

4、两操作数 相相 “或或”的的 运算运算nOR AX,DIn使某些位不变,某些位置使某些位不变,某些位置“1”nOR CL,0FHn在不改变操作数的在不改变操作数的 情况下使情况下使OF=CF=0nOR AX,AX12“或”指令的应用例 OR AL,AL JPE GOON OR AL,80H GOON:.PF=1转移转移13“或”指令的应用将一个二进将一个二进制数制数9变为字变为字符符9如何实现如何实现?143.“非”运算指令n格式:格式:nNOT OPRDNOT OPRDn操作:操作:n操作数按位取反再送回原地址操作数按位取反再送回原地址n注:注:n指令中的操作数不能是立即数指令中的操作数不能

5、是立即数n指令的执行对标志位无影响指令的执行对标志位无影响n例:例:NOT BYTE PTRBXNOT BYTE PTRBX154.“异或”运算指令n格式:格式: nXOR OPRD1,OPRD2n操作:操作:n两操作数相两操作数相“异或异或”,结果送目标地址,结果送目标地址n例:例: XOR BL,80H XOR AX,AX165.“测试”指令n格式:格式: nTEST OPRD1,OPRD2n操作:操作: n执行执行“与与”运算,但运算的结果不送回目运算,但运算的结果不送回目标地址。标地址。n应用:应用:n常用于测试某些位的状态常用于测试某些位的状态17例:n从地址为从地址为3F8H的的

6、端口中读入一个字节数,当端口中读入一个字节数,当该数的该数的 bit1, bit3, bit5位同时为位同时为1时时,可,可从从38FH端口将端口将DATA为首地址的一个字输出,为首地址的一个字输出,否则就不能进行数否则就不能进行数 据传送。据传送。 编写相应的编写相应的 程序段。程序段。18源程序代码: LEA SI,DATA MOV DX,3F8HWATT:IN AL,DX MOV DX,38FH MOV AX,SI OUT DX,AXAND AL,2AHCMP AL,2AHJNZ WATTTEST AL,02HJZ WATT ;ZF=1转移转移TEST AL,08HJZ WATTTEST

7、 AL,20HJZ WATTAND AL,2AHXOR AL,2AHJNZ WATT19二、移位指令 非循环移位指令非循环移位指令 循环移位指令循环移位指令注:注:n 移动一位时由指令直接给出;移动一位时由指令直接给出;n 移动两位及以上,则移位次数由移动两位及以上,则移位次数由CL指定。指定。201. 非循环移位指令n逻辑左移逻辑左移n算术左移算术左移n逻辑右移逻辑右移n算术右移算术右移21算术左移和逻辑左移n算术左移指算术左移指 令:令: SAL OPRD,1 SAL OPRD,CLn逻辑左移指逻辑左移指 令:令: SHL OPRD,1 SHL OPRD,CL有符号数有符号数无符号数无符号

8、数22逻辑右移n格式:格式: SHR OPRD,1 SHR OPRD,CL0CF无符号数无符号数的右移的右移23逻辑右移例:nMOV AL,68HnMOV CL,2nSHR AL,CL0CF0 1 1 0 1 0 AL0 0 0 0 0 1 1 0 1 0 0ALCF0 00 0 0 1 1 0 1 0 ALCF0 0移动移动1次次移动移动2次次24算术右移n格式:格式: SAR OPRD,1 SAR OPRD,CL有符号数有符号数的右移的右移CF25非循环移位指令的应用n左移可实现乘法运算左移可实现乘法运算n右移可实现除法运算右移可实现除法运算 262. 循环移位指令n不带进位位的循环移位不

9、带进位位的循环移位n带进位位的循环移位带进位位的循环移位左移左移 ROL右移右移 ROR左移左移 RCL右移右移 RCR指令格式、对操作数的要求与非循环移位指令相同指令格式、对操作数的要求与非循环移位指令相同27不带进位位的循环移位CFCF28带进位位的循环移位CFCF29循环移位指令的应用n用于对某些位状态的测试;用于对某些位状态的测试;n高位部分和低位部分的交换;高位部分和低位部分的交换;n与非循环移位指令一起组成与非循环移位指令一起组成32位或更长字位或更长字长数的移位。长数的移位。P124例例3-34P124例例3-3530程序功能n将将10001000H H开始存放的开始存放的4 4

10、个压缩个压缩BCDBCD码转换码转换为为ASCIIASCII码存放在码存放在30003000H H开始的单元中开始的单元中去。去。12H34H56H78H1000H3000H31程序例 MOV SI,1000H MOV DI,3000H 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,432串操作指令33串操作指令说明n针对数据块或字符串的操作;针对数据块或字符串的操作;n可实现存储器到存储器的数据传送;可实现存储器到存储器的数据传送;n待操作的数据串称为

11、源串,目标地址称为待操作的数据串称为源串,目标地址称为目标串。目标串。34串操作指令的特点n源串一般存放在数据段,偏移地址由源串一般存放在数据段,偏移地址由SI指定。允许段指定。允许段重设;重设;n目标串必须在附加段,偏移地址由目标串必须在附加段,偏移地址由DI指定;指定;n指令自动修改地址指针,修改方向由指令自动修改地址指针,修改方向由DF决定。决定。 DF=0 DF=1n数据块长度值由数据块长度值由CX指定指定n可增加自动重复前缀以实现自动修改可增加自动重复前缀以实现自动修改CX内容。内容。增地址方向;增地址方向;减地址方向;减地址方向;35重复前缀n无条件重复无条件重复nREPn条件重复

12、条件重复nREPE 相等重复相等重复nREPZ 为零重复为零重复nREPNE 不相等重复不相等重复nREPNZ 不为零重复不为零重复CX0 ZF=1CX0 ZF=0CX0 重复重复36串操作指令n串传送串传送 MOVSn串比较串比较 CMPSn串扫描串扫描 SCASn串装入串装入 LODSn串送存串送存 STOS37串操作指令流程(以传送操作为例)取源串地址取源串地址取目标串地址取目标串地址设串长度设串长度传送一个字节或字传送一个字节或字修改地址指针修改地址指针修改串长度值修改串长度值传送完否?传送完否?NY设操作方向设操作方向381. 串传送指令n格式:格式: MOVS OPRD1,OPRD

13、2 MOVSB MOVSWn串传送指令常与无条件重复前缀连用串传送指令常与无条件重复前缀连用39串传送指令n对比用对比用MOV指令和指令和MOVS指令实现将指令实现将200个字节数据从内存的一个区域送到个字节数据从内存的一个区域送到另一个区域的程序段。另一个区域的程序段。P104例例3-1240串传送指令例n用串传送指令实现用串传送指令实现200个字节数据的传送:个字节数据的传送: LEA SI,MEM1 LEA DI,MEM2 MOV CX,200 CLD REP MOVSB HLT412. 串比较指令n格式:格式: CMPS OPRD1,OPRD2 CMPSB CMPSWn串比较指令常与条

14、件重复前缀连用,指令的执串比较指令常与条件重复前缀连用,指令的执 行不改变操作数,仅影响标志位。行不改变操作数,仅影响标志位。n前缀的操作对标志位不影响前缀的操作对标志位不影响42串比较指令例测试测试200个字节数据是否传送正确:个字节数据是否传送正确:LEA SI,MEM1LEA DI,MEM2MOV CX,200CLD REPE CMPSB TEST CX,00FFH JZ STOP DEC SI MOV AL,SI MOV BX,SISTOP:HLT 433. 串扫描指令n格式:格式: SCAS OPRD SCASB SCASWn执行与执行与CMPS指令相似的操作,只是这里的源指令相似的

15、操作,只是这里的源 操作数是操作数是AX或或AL目目 标标操作数操作数44串扫描指令的应用n常用于在指定存储区域中寻找某个关键字。常用于在指定存储区域中寻找某个关键字。 教材教材p127例例454. 串装入指令n格式:格式: LODS OPRD LODSB LODSWn操作:操作:n对字节:对字节:n对对 字:字:源操作数源操作数DS:SIDS:SIDS:SIDS:SIALALAXAX464. 串装入指令n用于将内存某个区域的数据串依次装入累加用于将内存某个区域的数据串依次装入累加 器,以便显示或输出到接口。器,以便显示或输出到接口。nLODS指令一般不加重复前缀。指令一般不加重复前缀。475

16、. 串存储指令n格式:格式: STOS OPRD STOSB STOSWn操作:操作:n对字节:对字节: ALALn对对 字:字: AXAX目目 标标操作数操作数ES:DIES:DI48串存储指令的应用n常用于将内存某个区域置同样的值常用于将内存某个区域置同样的值n此时:此时:n将待送存的数据放入将待送存的数据放入AL(字节数)或(字节数)或AX(字数(字数据);据);n确定操作方向(增地址确定操作方向(增地址/减地址)和区域大小(串减地址)和区域大小(串长度值);长度值);n使用串存储指令使用串存储指令+无条件重复前缀,实现数据传送。无条件重复前缀,实现数据传送。49串存储指令例n将内存某单

17、元清零将内存某单元清零nP129例例3-4050串操作指令应用注意事项n需要定义附加段需要定义附加段n目标操作数必须在附加段目标操作数必须在附加段n需要设置数据的操作方向需要设置数据的操作方向n确定确定DF的状态的状态n源串和目标串指针分别为源串和目标串指针分别为SI和和DIn串长度值必须由串长度值必须由CX给出给出n注意重复前缀的使用方法注意重复前缀的使用方法n传送类指令前加无条件重复前缀传送类指令前加无条件重复前缀n串比较类指令前加条件重复前缀,但前缀不影响串比较类指令前加条件重复前缀,但前缀不影响ZF状态状态51程序控制指令n转移指令转移指令n循环控制循环控制n过程调用过程调用n中断控制

18、中断控制52程序的执行方向n程序控制类指令的本质是:程序控制类指令的本质是:n控制程序的执行方向控制程序的执行方向n决定程序执行方向的因素:决定程序执行方向的因素:nCS,IPn控制程序执行方向的方法:控制程序执行方向的方法:n修改修改CS 和和IP ,则程序转向另一个代码段执行;,则程序转向另一个代码段执行;n仅修改仅修改IP,则程序将改变当前的执行顺序,转向本,则程序将改变当前的执行顺序,转向本代码段内其它某处执行。代码段内其它某处执行。53一、转移指令无条件无条件转移指令转移指令 无条件转移到目标地址,执行新的指令无条件转移到目标地址,执行新的指令有条件转移指令有条件转移指令 在具备一定

19、条件的情况下转移到目标地址在具备一定条件的情况下转移到目标地址通过修改指令的通过修改指令的偏移地址偏移地址或或段地址及偏移地址段地址及偏移地址实现程序的转移实现程序的转移541. 无条件转移指令n格式:格式: JMP OPRD目标地址目标地址与与JMP在同在同一代码段一代码段与与JMP不在同不在同一代码段一代码段原则上可实现在整个内存空间的转移原则上可实现在整个内存空间的转移55无条件段内转移n转移的转移的目标地址目标地址在当前代码段内,段地址不在当前代码段内,段地址不 改改变。变。n即:即:目标地址目标地址是是16位偏移地址。位偏移地址。指令中直接给出指令中直接给出目标地址目标地址由指令中的

20、寄存器或由指令中的寄存器或存储器操作数指出目存储器操作数指出目标地址标地址段内直接转移段内直接转移段内间接段内间接转移转移56段内直接转移n转移的目标地址由指令直接给出转移的目标地址由指令直接给出n格式:格式:nJMP Label近地址标号近地址标号57段内直接转移示图JMPLabel代代码码段段位移量位移量下一条要执行指令的偏移地址下一条要执行指令的偏移地址=当前当前IP+位移量位移量JMP Label58段内间接转移n段内间接转移段内间接转移n转移的目标地址存放在某个转移的目标地址存放在某个16位寄存器或存储器位寄存器或存储器 的某两个单元中的某两个单元中n例:例:nJMP BXn若:若:

21、BX=1200Hn则:转移的目标地址则:转移的目标地址=1200HJMP代代码码段段1200HMOV59段内间接转移例nJMP WORD PTRBX 设:设:BX=1200HJMP代代码码段段数数据据段段BX=1200XXHXXHIP指令码指令码60无条件段间转移n转移的转移的目标地址目标地址不在当前代码段内。不在当前代码段内。n目标地址目标地址为为32位,包括段地址和偏移地址。位,包括段地址和偏移地址。指令中直接给出指令中直接给出目标地址目标地址由指令中的由指令中的32位存储器位存储器操作数指出目标地址操作数指出目标地址段间直接转移段间直接转移段间间接转移段间间接转移61段间直接转移n段内直

22、接转移段内直接转移n转移的目标地址由指令直接给出转移的目标地址由指令直接给出n格式:格式:nJMP FAR Label远地址标号远地址标号62段间直接转移示图JMPLabel代代码码段段1Label与与JMP之间的位移量之间的位移量代代码码段段2XXHXXHXXHXXHIPCS63段间间接转移n段内间接寻址段内间接寻址n转移的目标地址由指令中的转移的目标地址由指令中的32位操作数给出位操作数给出n 例:例:nJMP DWORD PTRBXXXHXXHXXHXXHBXIPCSJMP指令码指令码代代码码段段1代代码码段段2数数据据段段64无条件转移指令例(1) 2000:0100 MOV AX,1

23、200H(2) 2000:0103 JMP NEXT (3) 2000:0120 NEXT: MOV BX,1200H (4) JMP BX (5) 2000:1200 65无条件转移指令例nMOV SI,1122HnMOV WORD PTRSI,0120HnADD SI,2nMOV WORD PTRSI,0122HJMP DWORD PTRSI-2JMP WORD PTRSIJMP1122H代代码码段段数数据据段段01H22H20H01HIPCSIP662. 条件转移指令n在满足一定条件下,程序转移到目标地在满足一定条件下,程序转移到目标地址继续执行址继续执行n条件转移指令均为段内短转移,即

24、转移条件转移指令均为段内短转移,即转移 范围为:范围为: -128-+127p13267条件转移指令的应用n几种条件转移指令的应用几种条件转移指令的应用nJC/JNCn判断判断CF的状态。常用于比大小的状态。常用于比大小nJZ/JNZn判断判断ZF的状态。常用于循环体的结束判断的状态。常用于循环体的结束判断nJO/JNOn判断判断OF的状态。常用于有符号数溢出的判断的状态。常用于有符号数溢出的判断nJP/JPEn判断判断PF的状态。用于判断运算结果低的状态。用于判断运算结果低8位中位中1的个数是否为偶数的个数是否为偶数nJA/JAE/JB/JBEn判断判断CF或或CF+ZF的状态。常用于无符号

25、数的大小比较的状态。常用于无符号数的大小比较68转移指令例n统计内存数据段中以统计内存数据段中以TABLE为首地址的为首地址的100个个8位符号数中正数、负数和零元数位符号数中正数、负数和零元数的个数。的个数。69转移指令例(流程图)将存放各元素个将存放各元素个数的单元清零数的单元清零取首地址取首地址设串长度设串长度取一个字节数取一个字节数正数个数加正数个数加1零元素加零元素加1为负?为负?为零?为零?负数个数加负数个数加1NYNY70二、循环控制指令n循环范围:循环范围:n以当前以当前IP为中心的为中心的-128+127范围内循环。范围内循环。n循环次数由循环次数由CX寄存器指定。寄存器指定

26、。n循环指令:循环指令:LOOP *LOOPZ *LOOPNZ无条件循环指令无条件循环指令条件循环指令条件循环指令71无条件循环指令n格式:格式: LOOP LABELn循环条件:循环条件: CX 0n操作:操作: DEC CX JNZ 符号地址符号地址72三、过程调用和返回n用于调用一个子过程;用于调用一个子过程;n子过程由程序员预先设计子过程由程序员预先设计 并装入内存并装入内存 n子过程执行结束后要返回子过程执行结束后要返回 原调用处原调用处调用程序调用程序断点断点入口入口地址地址子程序子程序73调用指令的执行过程n保护断点;保护断点;n将调用指令的下一条指令的地址(断点)压入堆栈将调用

27、指令的下一条指令的地址(断点)压入堆栈n获取子过程的入口地址;获取子过程的入口地址;n子过程第子过程第1条指令的偏移地址条指令的偏移地址n执行子过程,含相应参数的保存及恢复;执行子过程,含相应参数的保存及恢复;n恢复断点,返回原程序。恢复断点,返回原程序。n将断点偏移地址由堆栈弹出将断点偏移地址由堆栈弹出74过程调用段内调用段内调用段间调用段间调用段内直接调用段内直接调用段内间接调用段内间接调用段间直接调用段间直接调用段间间接调用段间间接调用751. 段内调用n被调用程序与调用程序在同一代码段被调用程序与调用程序在同一代码段n调用前只需保护断点的偏移地址调用前只需保护断点的偏移地址n格式:格式

28、: CALL NEAR PROCn执行过程:执行过程:近过程名近过程名代码代码段段1调用程序调用程序被调用程序被调用程序代码代码段段1n 将断点的偏移地址压入堆栈将断点的偏移地址压入堆栈n 根据过程名找子程序入口根据过程名找子程序入口76段内调用例(1)CALL TIMRE(2)CALL WORD PTRSI直接调用直接调用间接调用间接调用44H33HCALL代代码码段段数数据据段段设:设:SI=1200H CS=6000H1200H执行第(执行第(2)条指令后:)条指令后:6000HCS =3344HIP =772. 段间调用n子过程与原调用程序不在同一代码段子过程与原调用程序不在同一代码段

29、n先将断点的先将断点的CS压栈,再压入压栈,再压入IP。调用前需保护断点的段基地址和偏移地址调用前需保护断点的段基地址和偏移地址78段间调用例n格式:格式: CALL FAR PROCn格式例:格式例:nCALL FAR TIMREnCALL DWORD PTRSIXXHXXHCALL代代码码段段数数据据段段SIXXHXXHCSIP793. 返回指令n功能:功能:n从堆栈中弹出断点地址,返回原程序从堆栈中弹出断点地址,返回原程序n格式:格式: RETRETnRETRET指令一般位于子程序的最后。指令一般位于子程序的最后。80四、中断指令n中断中断n中断源中断源n中断的类型中断的类型n中断指令中

30、断指令n引起引起CPU产生一次中断的指令产生一次中断的指令81中断与过程调用:n中断是随机事件或异常事件引起,调用则是事中断是随机事件或异常事件引起,调用则是事 先已在程序中安排好先已在程序中安排好 ; n响应中断请求不仅要保护断点地址,还要保护响应中断请求不仅要保护断点地址,还要保护 FLAGS内容;内容;n调用指令在指令中直接给出子程序入口地址,调用指令在指令中直接给出子程序入口地址, 中断指令只给出中断向量码,入口地址则在向中断指令只给出中断向量码,入口地址则在向 量码指向的内存单元中。量码指向的内存单元中。821. 中断指令n格式:格式: INT nn说明:说明: n4中断类型码中断类型码n=0 255n 4 XXHXXHXXHXXH入口的段地址入口的段地址入口的偏移地址入口的偏移地址存放中断服务子程序入口存放中断服务子程序入口地址的单元的偏移地址地址的单元的偏移地址代代码码段段数数据据段段

温馨提示

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

评论

0/150

提交评论