微机原理第3章2_第1页
微机原理第3章2_第2页
微机原理第3章2_第3页
微机原理第3章2_第4页
微机原理第3章2_第5页
已阅读5页,还剩88页未读 继续免费阅读

下载本文档

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

文档简介

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

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

3、则就不能进行数据传送。能进行数据传送。 编写相应的程序段。编写相应的程序段。9“与”指令应用例开开 始始取待输出数的取待输出数的偏移地址偏移地址读入状态字读入状态字测试测试bit1位状态位状态Bit1=1?取输入口地址取输入口地址取输出口地址取输出口地址 输出一个字输出一个字NY10“与”指令应用例 LEA SI,DATA MOV DX,3F8HWATT:IN AL,DX AND AL,02H JZ WATT ;ZF=1转移转移 MOV DX,38FH MOV AX,SI OUT DX,AX112.“或”运算指令n格式:格式: nOR OPRD1,OPRD2n操作:操作: n两操作数相两操作数

4、相“或或”,结果送目标地址,结果送目标地址12“或”指令的应用n实现两操作数相实现两操作数相“或或”的运算的运算nOR AX,DIn使某些位不变,某些位置使某些位不变,某些位置“1”nOR CL,0FHn在不改变操作数的情况下使在不改变操作数的情况下使OF=CF=0nOR AX,AX13“或”指令的应用例 为了保证数据通信的可靠性,为了保证数据通信的可靠性,往往需要对传送的往往需要对传送的ASCIIASCII码数据进行码数据进行校验。校验的方法之一就是使用奇偶校验。校验的方法之一就是使用奇偶校验,校验,偶校验偶校验是使用传送的是使用传送的ASCIIASCII码码中中1 1的个数为偶数,奇校验则

5、使的个数为偶数,奇校验则使1 1的个数为的个数为奇数。奇偶校验位放在奇数。奇偶校验位放在ASCIIASCII码的最高位码的最高位上。上。14“或”指令的应用例 OR AL,AL JPE GOON OR AL,80H GOON:.PF=1转移转移奇偶标志位奇偶标志位,1表示表示1的的个位为偶数个位为偶数15“或”指令的应用将一个二进将一个二进制数制数9变为字变为字符符9如何实现如何实现?163.“非”运算指令n格式:格式:nNOT OPRDNOT OPRDn操作:操作:n操作数按位取反再送回原地址操作数按位取反再送回原地址n注:注:n指令中的操作数不能是立即数指令中的操作数不能是立即数n指令的执

6、行对标志位无影响指令的执行对标志位无影响n例:例:NOT BYTE PTRBXNOT BYTE PTRBX174.“异或”运算指令n格式:格式: nXOR OPRD1,OPRD2n操作:操作:n两操作数相两操作数相“异或异或”,结果送目标地址,结果送目标地址n例:例: XOR BL,80H XOR AX,AX两操作数自身相异或,结果为零两操作数自身相异或,结果为零185.“测试”指令n格式:格式: nTEST OPRD1,OPRD2n操作:操作: n执行执行“与与”运算,但运算的结果不送回目运算,但运算的结果不送回目标地址。标地址。n应用:应用:n常用于测试某些位的状态常用于测试某些位的状态1

7、9例:n从地址为从地址为3F8H的端口中读入一个字节数,当的端口中读入一个字节数,当该数的该数的bit1, bit3, bit5位同时为位同时为1时时,可从,可从38FH端口将端口将DATA为首地址的一个字输出,为首地址的一个字输出,否则就不能进行数据传送。否则就不能进行数据传送。 编写相应的程序段。编写相应的程序段。20源程序代码: 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

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

9、号数有符号数无符号数无符号数移动一位后,若移动一位后,若CF与最高不相等,则与最高不相等,则OF=1;否则否则OF=024逻辑右移n格式:格式: SHR OPRD,I SHR OPRD,CL0CF无符号数无符号数的右移的右移移动一位后,若次高位与最高位不相等,则移动一位后,若次高位与最高位不相等,则OF=1;否则否则OF=025逻辑右移例: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次次26算术右移n格式:格式: SAR

10、 OPRD,I SAR OPRD,CL有符号数有符号数的右移的右移CF27非循环移位指令的应用n左移可实现乘法运算左移可实现乘法运算n右移可实现除法运算右移可实现除法运算 282. 循环移位指令n不带进位位的循环移位不带进位位的循环移位n带进位位的循环移位带进位位的循环移位左移左移 ROL右移右移 ROR左移左移 RCL右移右移 RCR指令格式、对操作数的要求与非循环移位指令相同指令格式、对操作数的要求与非循环移位指令相同29不带进位位的循环移位CFCF30带进位位的循环移位CFCF31循环移位指令的应用n用于对某些位状态的测试;用于对某些位状态的测试;n高位部分和低位部分的交换;高位部分和低

11、位部分的交换;n与非循环移位指令一起组成与非循环移位指令一起组成32位或更长字位或更长字长数的移位。长数的移位。32程序例 LEA SI,num1 LEA DI,num2 MOV CX,4BBB:MOV AL,SI MOV BL,AL AND AL,0FH OR AL,30H MOV DI,AL INC DI MOV AL,BLPUSH CXMOV CL,4程序程序功能?功能?33程序功能n将将num1num1开始存放的四开始存放的四个压缩个压缩BCDBCD码转换为码转换为ASCIIASCII码存放在码存放在num2num2开始的单元中去。开始的单元中去。12H34H56H78Hnum1num

12、234例:n计算计算2658+3619=2658+3619=? 结果存放在结果存放在SUMSUM单元单元n说明:说明:n被加数和加数的每被加数和加数的每一位都以一位都以ASCIIASCII码形码形式存放在内存中,式存放在内存中,低位在前,高位在低位在前,高位在后。后。36H32H39H31HSTRING1STRING238H35H36H33H数数据据段段SUM.35代码1 LEA SI,STRING1 ;取偏移地址;取偏移地址 LEA DI,STRING2 LEA BX,SUM MOV CH,4 ;设循环次数;设循环次数 CLC ;使;使CF清零清零A:AND BYTE PTRSI,0FH ;

13、将;将ASCII转换为二进制数转换为二进制数 AND BYTE PTRDI,0FH MOV AL,SI ;两字节数求和;两字节数求和 ADC AL,DI36代码1(续)MOV DL,AL AND AL,0FHOR AL,30HMOV BX,ALINC BXMOV AL,DLMOV CL,4INC SIINC DIINC BXDEC CH JNZ AHLT37代码2 LEA SI,STRING1 LEA DI,STRING2 LEA BX,SUM MOV CX,4 CLCNEXT:MOV AL,SI ADC AL,DI AAA MOV BX,ALINC SIINC DIINC BXDEC CXJ

14、NZ NEXTHLT38串操作指令39串操作指令说明n针对数据块或字符串的操作;针对数据块或字符串的操作;n可实现存储器到存储器的数据传送;可实现存储器到存储器的数据传送;n待操作的数据串称为源串,目标地址称为待操作的数据串称为源串,目标地址称为目标串。目标串。40串操作指令的特点n源串一般存放在数据段,偏移地址由源串一般存放在数据段,偏移地址由SI指定。允许段指定。允许段重设;重设;n目标串必须在附加段,偏移地址由目标串必须在附加段,偏移地址由DI指定;指定;n指令自动修改地址指针,修改方向由指令自动修改地址指针,修改方向由DF决定。决定。 DF=0 DF=1n数据块长度值由数据块长度值由C

15、X指定指定n可增加自动重复前缀以实现自动修改可增加自动重复前缀以实现自动修改CX内容。内容。增地址方向;增地址方向;减地址方向;减地址方向;41重复前缀n无条件重复无条件重复nREPn条件重复条件重复nREPE 相等重复相等重复nREPZ 为零重复为零重复nREPNE 不相等重复不相等重复nREPNZ 不为零重复不为零重复CX0 ZF=1CX0 ZF=0CX0 重复重复42串操作指令流程取源串地址取源串地址取目标串地址取目标串地址设串长度设串长度传送一个字节或字传送一个字节或字修改地址指针修改地址指针修改串长度值修改串长度值传送完否?传送完否?NY设操作方向设操作方向43串操作指令n串传送串传

16、送 MOVSn串比较串比较 CMPSn串扫描串扫描 SCASn串装入串装入 LODSn串送存串送存 STOS441. 串传送指令n格式:格式: MOVS OPRD1,OPRD2 MOVSB MOVSWn串传送指令常与无条件重复前缀连用串传送指令常与无条件重复前缀连用45串传送指令n对比用对比用MOV指令和指令和MOVS指令实现将指令实现将200个字节数据从内存的一个区域送到个字节数据从内存的一个区域送到另一个区域的程序段。另一个区域的程序段。46串传送指令例n用串传送指令实现用串传送指令实现200个字节数据的传送:个字节数据的传送: LEA SI,MEM1 LEA DI,MEM2 MOV CX

17、,200 CLD REP MOVSB HLTP104472. 串比较指令n格式:格式: CMPS OPRD1,OPRD2 CMPSB CMPSWn串比较指令常与条件重复前缀连用,指令的执串比较指令常与条件重复前缀连用,指令的执 行不改变操作数,仅影响标志位。行不改变操作数,仅影响标志位。n前缀的操作对标志位不影响前缀的操作对标志位不影响48串比较指令例测试测试200个字节数据是否传送正确,并找出其中个字节数据是否传送正确,并找出其中第一个不相等字符地址送第一个不相等字符地址送BX,不相等字符送,不相等字符送AL:LEA SI,MEM1LEA DI,MEM2MOV CX,200CLD REPE

18、CMPSB TEST CX,00FFH JZ STOP DEC SI MOV AL,SI MOV BX,SISTOP:HLT 493. 串扫描指令n格式:格式: SCAS OPRD SCASB SCASWn执行与执行与CMPS指令相似的操作,只是这里的源指令相似的操作,只是这里的源 操作数是操作数是AX或或AL目目 标标操作数操作数50串扫描指令的应用n常用于在指定存储区域中寻找某个关键字。常用于在指定存储区域中寻找某个关键字。514.串装入指令n格式:格式: LODS OPRD LODSB LODSWn操作:操作:n对字节:对字节: ALALn对对 字:字: AXAX源操作数源操作数DS:S

19、IDS:SIDS:SIDS:SI524. 串装入指令n用于将内存某个区域的数据串依次装入累加用于将内存某个区域的数据串依次装入累加器,以便显示或输出到接口。器,以便显示或输出到接口。nLODS指令一般不加重复前缀。指令一般不加重复前缀。535. 串存储指令n格式:格式: STOS OPRD STOSB STOSWn操作:操作:n对字节:对字节: ALALn对对 字:字: AXAX目目 标标操作数操作数ES:DIES:DI54串存储指令例 内存某个区域清零n设计思想:设计思想: 区域首地址送区域首地址送ES:DI串长度送串长度送CX置方向标志置方向标志DF0送累加器送累加器AL执行串送存指令执行

20、串送存指令p12955程序控制指令n转移指令转移指令n循环控制循环控制n过程调用过程调用n中断控制中断控制56一、转移指令无条件无条件转移指令转移指令 无条件转移到目标地址,执行新的指令无条件转移到目标地址,执行新的指令有条件转移指令有条件转移指令 在具备一定条件的情况下转移到目标地址在具备一定条件的情况下转移到目标地址通过修改指令的通过修改指令的偏移地址偏移地址或或段地址及偏移地址段地址及偏移地址实现程序的转移实现程序的转移571. 无条件转移指令n格式:格式: JMP OPRD目标地址目标地址与与JMP在同在同一代码段一代码段与与JMP不在同不在同一代码段一代码段原则上可实现在整个内存空间

21、的转移原则上可实现在整个内存空间的转移58无条件段内转移n转移的转移的目标地址目标地址在当前代码段内,段地址不改变。在当前代码段内,段地址不改变。n即:即:目标地址目标地址是是16位偏移地址。位偏移地址。指令中直接给出指令中直接给出目标地址目标地址由指令中的寄存器或由指令中的寄存器或存储器操作数指出目存储器操作数指出目标地址标地址段内直接转移段内直接转移段内间接段内间接转移转移59段内直接转移n段内直接转移段内直接转移n转移的目标地址由指令直接给出转移的目标地址由指令直接给出n格式:格式:nJMP Label近地址标号近地址标号60段内直接转移示图JMPLabel代代码码段段位移量位移量下一条

22、要执行指令的偏移地址下一条要执行指令的偏移地址=当前当前IP+位移量位移量61段内间接转移n段内间接转移段内间接转移n转移的目标地址存放在某个转移的目标地址存放在某个16位寄存器或存储器位寄存器或存储器 的某两个单元中的某两个单元中n例:例:nJMP BXn若:若:BX=1200Hn则:转移的目标地址则:转移的目标地址=1200HJMP代代码码段段1200HMOV62段内间接转移例nJMP WORD PTRBX 设:设:BX=1200HJMP代代码码段段数数据据段段BX=1200XXHXXHIP指令码指令码63无条件段间转移n转移的转移的目标地址目标地址不在当前代码段内。不在当前代码段内。n目

23、标地址目标地址为为32位,包括段地址和偏移地址。位,包括段地址和偏移地址。指令中直接给出指令中直接给出目标地址目标地址由指令中的由指令中的32位存储器位存储器操作数指出目标地址操作数指出目标地址段间直接转移段间直接转移段间间接转移段间间接转移64段间直接转移n段间直接转移段间直接转移n转移的目标地址由指令直接给出转移的目标地址由指令直接给出n格式:格式:nJMP FAR Label远地址标号远地址标号65段间直接转移示图JMPLabel代代码码段段1Label与与JMP之间的位移量之间的位移量代代码码段段2XXHXXHXXHXXHIPCS66段间间接转移n段间间接寻址段间间接寻址n转移的目标地

24、址由指令中的转移的目标地址由指令中的32位操作数给出位操作数给出n 例:例:nJMP DWORD PTRBXXXHXXHXXHXXHBXIPCSJMP指令码指令码代代码码段段1代代码码段段2数数据据段段672. 条件转移指令n在满足一定条件下,程序转移到目标地在满足一定条件下,程序转移到目标地址继续执行址继续执行n条件转移指令均为段内短转移,即转移条件转移指令均为段内短转移,即转移 范围为:范围为: -128-+127p13268条件转移指令的应用n几种条件转移指令的应用几种条件转移指令的应用69转移指令例n统计内存数据段中以统计内存数据段中以TABLE为首地址的为首地址的100个个8位符号数

25、中正数、负数和零元素位符号数中正数、负数和零元素的个数。的个数。70转移指令例(流程图)将存放各元素个将存放各元素个数的单元清零数的单元清零取首地址取首地址设串长度设串长度取一个字节数取一个字节数正数个数加正数个数加1零元素加零元素加1为负?为负?为零?为零?负数个数加负数个数加1NYNYp13771二、循环控制指令n循环范围:循环范围:n以当前以当前IP为中心的为中心的-128+127范围内循环。范围内循环。n循环次数由循环次数由CX寄存器指定。寄存器指定。n循环指令:循环指令:LOOP *LOOPZ *LOOPNZ无条件循环指令无条件循环指令条件循环指令条件循环指令72无条件循环指令n格式

26、:格式: LOOP LABELn循环条件:循环条件: CX 0n操作:操作: DEC CX JNZ 符号地址符号地址73条件循环指令n格式:格式: LOOPZ LABEL LOOPE LABELn循环条件:循环条件: CX 0 ZF=1n格式:格式: LOOPNZ LABEL LOOPNE LABELn循环条件:循环条件: CX 0 ZF=074三、过程调用和返回n用于调用一个子过程;用于调用一个子过程;n子过程由程序员预先设计子过程由程序员预先设计 并装入内存并装入内存 n子过程执行结束后要返回子过程执行结束后要返回 原调用处原调用处调用程序调用程序断点断点入口入口地址地址入口地址入口地址断

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

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

29、:6000HCS =3344HIP =792. 段间调用n子过程与原调用程序不在同一代码段子过程与原调用程序不在同一代码段n先将断点的先将断点的CS压栈,再压入压栈,再压入IP。调用前需保护断点的段基地址和偏移地址调用前需保护断点的段基地址和偏移地址80段间调用例n格式:格式: CALL FAR PROCn格式例:格式例:nCALL FAR TIMREnCALL DWORD PTRSIXXHXXHCALL代代码码段段数数据据段段SIXXHXXHCSIP813. 返回指令n功能:功能:n从堆栈中弹出断点地址,返回原程序从堆栈中弹出断点地址,返回原程序n格式:格式: RETRETnRETRET指令

30、一般位于子程序的最后。指令一般位于子程序的最后。82四、中断指令n中断中断n中断源中断源n中断的类型中断的类型n中断指令中断指令n引起引起CPU产生一次中断的指令产生一次中断的指令83中断与过程调用:n中断是随机事件或异常事件引起,调用则是事中断是随机事件或异常事件引起,调用则是事 先已在程序中安排好先已在程序中安排好 ; n响应中断请求不仅要保护断点地址,还要保护响应中断请求不仅要保护断点地址,还要保护 FLAGS内容;内容;n调用指令在指令中直接给出子程序入口地址,调用指令在指令中直接给出子程序入口地址, 中断指令只给出中断向量码,入口地址则在向中断指令只给出中断向量码,入口地址则在向 量码指向的内存单元中。量码指向的内存单元中。841. 中断指令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

提交评论