第2微机原理与接口技术课件清华大学

上传人:工**** 文档编号:585086123 上传时间:2024-09-01 格式:PPT 页数:93 大小:1.39MB
返回 下载 相关 举报
第2微机原理与接口技术课件清华大学_第1页
第1页 / 共93页
第2微机原理与接口技术课件清华大学_第2页
第2页 / 共93页
第2微机原理与接口技术课件清华大学_第3页
第3页 / 共93页
第2微机原理与接口技术课件清华大学_第4页
第4页 / 共93页
第2微机原理与接口技术课件清华大学_第5页
第5页 / 共93页
点击查看更多>>
资源描述

《第2微机原理与接口技术课件清华大学》由会员分享,可在线阅读,更多相关《第2微机原理与接口技术课件清华大学(93页珍藏版)》请在金锄头文库上搜索。

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

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

3、就不能进行数据传送。能进行数据传送。 编写相应的程序段。编写相应的程序段。8“与”指令应用例开开 始始取待输出数的取待输出数的偏移地址偏移地址读入状态字读入状态字测试测试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两操作数相两操作数相“

4、或或”,结果送目标地址,结果送目标地址11“或”指令的应用n实现两操作数相实现两操作数相“或或”的运算的运算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操作数按位取反再送回原地址操作数按位取反

5、再送回原地址n注:注:n指令中的操作数不能是立即数指令中的操作数不能是立即数n指令的执行对标志位无影响指令的执行对标志位无影响n例:例:NOT BYTE PTRBXNOT BYTE PTRBX154.“异或”运算指令n格式:格式: nXOR OPRD1,OPRD2n操作:操作:n两操作数相两操作数相“异或异或”,结果送目标地址,结果送目标地址n例:例: XOR BL,80H XOR AX,AX两操作数自身相异或,结果两操作数自身相异或,结果165.“测试”指令n格式:格式: nTEST OPRD1,OPRD2n操作:操作: n执行执行“与与”运算,但运算的结果不送回目运算,但运算的结果不送回目

6、标地址。标地址。n应用:应用:n常用于测试某些位的状态常用于测试某些位的状态17例:n从地址为从地址为3F8H的端口中读入一个字节数,当的端口中读入一个字节数,当该数的该数的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

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

8、逻辑左移指令:逻辑左移指令: SHL OPRD,1 SHL OPRD,CL有符号数有符号数无符号数无符号数移动一位后,若移动一位后,若CF与最高不相等,则与最高不相等,则OF=1;否则否则OF=022逻辑右移n格式:格式: SHR OPRD,I SHR OPRD,CL0CF无符号数无符号数的右移的右移移动一位后,若次高位与最高位不相等,则移动一位后,若次高位与最高位不相等,则OF=1;否则否则OF=023逻辑右移例: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

9、 ALCF0 0移动移动1次次移动移动2次次24算术右移n格式:格式: SAR OPRD,I SAR OPRD,CL有符号数有符号数的右移的右移CF25非循环移位指令的应用n左移可实现乘法运算左移可实现乘法运算n右移可实现除法运算右移可实现除法运算 262. 循环移位指令n不带进位位的循环移位不带进位位的循环移位n带进位位的循环移位带进位位的循环移位左移左移 ROL右移右移 ROR左移左移 RCL右移右移 RCR指令格式、对操作数的要求与非循环移位指令相同指令格式、对操作数的要求与非循环移位指令相同27不带进位位的循环移位CFCF28带进位位的循环移位CFCF29循环移位指令的应用n用于对某些

10、位状态的测试;用于对某些位状态的测试;n高位部分和低位部分的交换;高位部分和低位部分的交换;n与非循环移位指令一起组成与非循环移位指令一起组成32位或更长字位或更长字长数的移位。长数的移位。30程序例 MOV SI,1000H MOV DI,3000H 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,4SHR AL,CLSHR AL,CLOR AL,30HOR AL,30HMOV DI,ALMOV DI,ALINC DIINC DIINC SIINC SIP

11、OP CXPOP CXDEC CXDEC CXJNZ BBBJNZ BBBHLTHLT程序程序功能?功能?31程序功能n将将10001000H H开始存放的开始存放的四个压缩四个压缩BCDBCD码转换码转换为为ASCIIASCII码存放在码存放在30003000H H开始的单元中开始的单元中去。去。 12H34H56H78H 1000H3000H32例:n计算计算2658+3619=2658+3619=? 结果存放在结果存放在SUMSUM单元单元n说明:说明:n被加数和加数的每被加数和加数的每一位都以一位都以ASCIIASCII码形码形式存放在内存中,式存放在内存中,低位在前,高位在低位在前,

12、高位在后。后。36H32H39H31HSTRING1STRING238H35H36H33H数数据据段段SUM.33代码1 LEA SI,STRING1 ;取偏移地址;取偏移地址 LEA DI,STRING2 LEA BX,SUM MOV CH,4 ;设循环次数;设循环次数 CLC ;使;使CF清零清零A:AND BYTE PTRSI,0FH ;将;将ASCII转换为二进制数转换为二进制数 AND BYTE PTRDI,0FH MOV AL,SI ;两字节数求和;两字节数求和 ADC AL,DI34代码1(续)MOV DL,AL AND AL,0FHOR AL,30HMOV BX,ALINC B

13、XMOV AL,DLMOV CL,4SHR AL,CLSHR AL,CLOR AL,30HOR AL,30HMOV BX,ALMOV BX,ALINC SIINC DIINC BXDEC CH JNZ AHLT35代码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 CXJNZ NEXTHLT36串操作指令37串操作指令说明n针对数据块或字符串的操作;针对数据块或字符串的操作;n可实现存储器到存储器的数据传送;可实现

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

15、复前缀n无条件重复无条件重复nREPn条件重复条件重复nREPE 相等重复相等重复nREPZ 为零重复为零重复nREPNE 不相等重复不相等重复nREPNZ 不为零重复不为零重复CX0 ZF=1CX0 ZF=0CX0 重复重复40串操作指令流程取源串地址取源串地址取目标串地址取目标串地址设串长度设串长度传送一个字节或字传送一个字节或字修改地址指针修改地址指针修改串长度值修改串长度值传送完否?传送完否?NY设操作方向设操作方向41串操作指令n串传送串传送 MOVSn串比较串比较 CMPSn串扫描串扫描 SCASn串装入串装入 LODSn串送存串送存 STOS421. 串传送指令n格式:格式: M

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

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

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

19、式:格式: STOS OPRD STOSB STOSWn操作:操作:n对字节:对字节: ALALn对对 字:字: AXAX目目 标标操作数操作数ES:DIES:DI52串存储指令例 内存某个区域清零n设计思想:设计思想: 区域首地址送区域首地址送ES:DI串长度送串长度送CX置方向标志置方向标志DF0送累加器送累加器AL执行串送存指令执行串送存指令p13253程序控制指令n转移指令转移指令n循环控制循环控制n过程调用过程调用n中断控制中断控制54一、转移指令无条件无条件转移指令转移指令 无条件转移到目标地址,执行新的指令无条件转移到目标地址,执行新的指令有条件转移指令有条件转移指令 在具备一定

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

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

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

23、接转移n段内直接转移段内直接转移n转移的目标地址由指令直接给出转移的目标地址由指令直接给出n格式:格式:nJMP FAR Label远地址标号远地址标号63段间直接转移示图JMPLabel 代代码码段段1Label与与JMP之间的位移量之间的位移量代代码码段段2XXHXXHXXHXXHIPCS64段间间接转移n段内间接寻址段内间接寻址n转移的目标地址由指令中的转移的目标地址由指令中的32位操作数给出位操作数给出n 例:例:nJMP DWORD PTRBXXXHXXHXXHXXHBXIPCSJMP 指令码指令码代代码码段段1代代码码段段2数数据据段段652. 条件转移指令n在满足一定条件下,程序

24、转移到目标地址在满足一定条件下,程序转移到目标地址继续执行继续执行n条件转移指令均为段内短转移,即转移条件转移指令均为段内短转移,即转移 范围为:范围为: -128-+127p13666条件转移指令的应用n几种条件转移指令的应用几种条件转移指令的应用67转移指令例n统计内存数据段中以统计内存数据段中以TABLE为首地址的为首地址的100个个8位符号数中正数、负数和零元数位符号数中正数、负数和零元数的个数。的个数。68转移指令例(流程图)将存放各元素个将存放各元素个数的单元清零数的单元清零取首地址取首地址设串长度设串长度取一个字节数取一个字节数正数个数加正数个数加1零元素加零元素加1为负?为负?

25、为零?为零?负数个数加负数个数加1NYNYp14469二、循环控制指令n循环范围:循环范围:n以当前以当前IP为中心的为中心的-128+127范围内循环。范围内循环。n循环次数由循环次数由CX寄存器指定。寄存器指定。n循环指令:循环指令:LOOP *LOOPZ *LOOPNZ无条件循环指令无条件循环指令条件循环指令条件循环指令70无条件循环指令n格式:格式: LOOP LABELn循环条件:循环条件: CX 0n操作:操作: DEC CX JNZ 符号地址符号地址71条件循环指令n格式:格式: LOOPZ LABEL LOOPE LABELn循环条件:循环条件: CX 0 ZF=1n格式:格式

26、: LOOPNZ LABEL LOOPNE LABELn循环条件:循环条件: CX 0 ZF=072三、过程调用和返回n用于调用一个子过程;用于调用一个子过程;n子过程由程序员预先设计子过程由程序员预先设计 并装入内存并装入内存 n子过程执行结束后要返回子过程执行结束后要返回 原调用处原调用处调用程序调用程序断点断点入口入口地址地址入口地址入口地址断点地址断点地址子程序子程序73调用指令的执行过程n保护断点;保护断点;n将调用指令的下一条指令的地址(断点)压入堆栈将调用指令的下一条指令的地址(断点)压入堆栈n获取子过程的入口地址;获取子过程的入口地址;n子过程第子过程第1条指令的偏移地址条指令

27、的偏移地址n执行子过程,含相应参数的保存及恢复;执行子过程,含相应参数的保存及恢复;n恢复断点,返回原程序。恢复断点,返回原程序。n将断点偏移地址由堆栈弹出将断点偏移地址由堆栈弹出74过程调用段内调用段内调用段间调用段间调用段内直接调用段内直接调用段内间接调用段内间接调用段间直接调用段间直接调用段间间接调用段间间接调用751. 段内调用n被调用程序与调用程序在同一代码段被调用程序与调用程序在同一代码段n调用前只需保护断点的偏移地址调用前只需保护断点的偏移地址n格式:格式: CALL NEAR PROCn执行过程:执行过程:近过程名近过程名代码代码段段1调用程序调用程序被调用程序被调用程序代码代

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

29、地址78段间调用例n格式:格式: CALL FAR PROCn格式例:格式例:nCALL FAR TIMREnCALL DWORD PTRSIXXHXXHCALL代代码码段段数数据据段段 SIXXHXXHCSIP793. 返回指令n功能:功能:n从堆栈中弹出断点地址,返回原程序从堆栈中弹出断点地址,返回原程序n格式:格式: RETRETnRETRET指令一般位于子程序的最后。指令一般位于子程序的最后。80四、中断指令n中断中断n中断源中断源n中断的类型中断的类型n中断指令中断指令n引起引起CPU产生一次中断的指令产生一次中断的指令81中断与过程调用:n中断是随机事件或异常事件引起,调用则是事中

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

31、口存放中断服务子程序入口地址的单元的偏移地址地址的单元的偏移地址代代码码段段数数据据段段 该单元在数据段,段地址该单元在数据段,段地址=DS 83中断指令的执行过程n将将FLAGS压入堆栈;压入堆栈;n将将INT指令的下一条指令的指令的下一条指令的CS、IP压栈;压栈;n由由n4得到存放得到存放中断向量的地址;中断向量的地址;n将中断向量(中断服务程序入口地址)送将中断向量(中断服务程序入口地址)送CS和和IP寄存器;寄存器;n转入中断服务程序。转入中断服务程序。84中断指令的执行过程n4 22H11H00H67HIPCS68122HMOV代代码码段段数数据据段段 堆堆栈栈段段SPFLAGSH

32、FLAGSLIPHCSLCSHIPL SPSPSP85中断指令例执行程序段:执行程序段: CS IP 6200H:0110H INT 21H6200H:0112H MOV AX,BX 12H01H00H62HSP=1200FLAGSLFLAGSHSP=11FA执行执行INT指令后指令后堆堆栈栈段段86中断指令例n执行执行INT 21H指令后指令后 IP=21H4 CS=(21H4)+20084H 23H11H00H20HIP CS数数据据段段 代代码码段段XX21123H 中断服中断服务子程序子程序872. 溢出中断指令n格式:格式: INTO n若若OF=1,OF=1,则启动一个类型为则启动

33、一个类型为4 4的中断过程的中断过程, ,给出给出一个出错标志一个出错标志, ,如果如果OF=0,OF=0,不做任何操作。不做任何操作。nINTOINTO指令通常安排在有符号数加减运算指令之指令通常安排在有符号数加减运算指令之后。后。相当于相当于INT 4883. 中断返回指令n格式:格式: IRETn中断服务程序的最后一条指令,负责中断服务程序的最后一条指令,负责恢复断点恢复断点恢复标志寄存器内容恢复标志寄存器内容89六、处理器控制指令对标志位的操作对标志位的操作与外部设备的同步与外部设备的同步说明见说明见p143表表90本章课外自学内容:nBCDBCD码调整指令码调整指令n远地址指针指令远地址指针指令LDSLDS,LESLESn条件循环指令条件循环指令LOOPZLOOPZ,LOOPNZLOOPNZnPentiumPentium新增指令新增指令91结束语:掌握:掌握:n指令的格式及意义;指令的格式及意义;n指令对操作数的要求及对标志位的影响;指令对操作数的要求及对标志位的影响;n指令的应用。指令的应用。92第3章作业n作业请从服务器上下载作业请从服务器上下载n本章书后全部题目均可作为思考题本章书后全部题目均可作为思考题93

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 资格认证/考试 > 自考

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号