微机原理与接口技术课件:第3章_3.38086 8088指令系统

上传人:桔**** 文档编号:569844525 上传时间:2024-07-31 格式:PPT 页数:42 大小:172.50KB
返回 下载 相关 举报
微机原理与接口技术课件:第3章_3.38086 8088指令系统_第1页
第1页 / 共42页
微机原理与接口技术课件:第3章_3.38086 8088指令系统_第2页
第2页 / 共42页
微机原理与接口技术课件:第3章_3.38086 8088指令系统_第3页
第3页 / 共42页
微机原理与接口技术课件:第3章_3.38086 8088指令系统_第4页
第4页 / 共42页
微机原理与接口技术课件:第3章_3.38086 8088指令系统_第5页
第5页 / 共42页
点击查看更多>>
资源描述

《微机原理与接口技术课件:第3章_3.38086 8088指令系统》由会员分享,可在线阅读,更多相关《微机原理与接口技术课件:第3章_3.38086 8088指令系统(42页珍藏版)》请在金锄头文库上搜索。

1、3.3 8086/80883.3 8086/8088指令系统指令系统可分成如下可分成如下6 6类:类:n 数据传送指令数据传送指令n 算术运算指令算术运算指令n 逻辑运算和移位指令逻辑运算和移位指令n 串操作指令串操作指令n 程序控制指令程序控制指令n 处理器控制指令处理器控制指令13.3.1 3.3.1 数据传送指令数据传送指令l 可实现 存储器存储器 寄存器 I/OI/O l 数据传送指令又可分为如下四种:n 通用传送n 目标地址传送n 标志传送n 输入输出21.1.通用传送指令通用传送指令(1)(1) MOV MOV destdest,srcsrc; destdestsrcsrc 传送的

2、是字节还是字取决于指令中涉及的寄存器是8位还是16位。 具体来说可实现: MOV mem/reg1MOV mem/reg1,mem/reg2mem/reg2 指令中两操作数中至少有一个为寄存器 例: MOVCL,DL MOVAX,BXMOVSI,CXMOVCL,BX+53 MOV reg,data ;立即数送寄存器立即数送寄存器 MOV mem,data ;立即数送存储单元立即数送存储单元 MOV acc,mem ;存储单元送累加器存储单元送累加器 MOV mem,acc ;累加器送存储单元累加器送存储单元 MOV segreg,mem/reg ;存储单元存储单元/ /寄存器送寄存器送 段寄存

3、器段寄存器 MOV mem/reg,segreg ;段寄存器送存储单段寄存器送存储单 元元/ /寄存器寄存器4MOVMOV指令使用规则:指令使用规则:1) IP不能作目的寄存器2) 不允许memmem3) 不允许segregsegreg4) 立即数不允许作为目的操作数5) 不允许segreg立即数6) 源操作数与目的操作数类型要一致5几个不能几个不能传传送的解决办法:送的解决办法:用用AXAX作桥梁作桥梁 l存储器存储器: MOV AX,MEM1 MOV MEM2,AXl段寄存器段寄存器: MOV AX,DS MOV ES,AXl段寄存器立即数: MOV AX,DATA MOV DS,AX6l

4、应用举例:将1000H开始的100个存储单元 全部填充为ASCII码2AH(*)。程序段如下: MOV DI,1000H MOV CX,64H MOV AL,2AHAGAIN:MOV DI,AL INC DI DEC CX JNZ AGAIN HLT7上程序段存放在代码段代码段中,設(CS)=109EH,则各条指令存放地址如下: CS : IP 指令109E : 0100 MOV DI,1000H109E : 0103 MOV CX,64H109E : 0106 MOV AL,2AH109E : 0108 MOV DI,AL109E : 010A INC DI109E : 010B DEC C

5、X109E : 010C JNZ 0108109E : 010E HLT109E : 01108 写入2AH(*)后,数据段中相应存储单元的内容改变如下:DS:1000DS:1000 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2ADS:1010DS:1010 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2ADS:1020DS:1020 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2ADS:1030DS:1030 2A 2A 2A 2A 2A 2A 2A 2

6、A 2A 2A 2A 2A 2A 2A 2A 2ADS:1040DS:1040 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2ADS:1050DS:1050 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2ADS:1060DS:1060 2A 2A 2A 2A9什么是堆栈? 按“后进先出(LIFO)”方式工作的存储区域。堆栈以字为单位以字为单位进行压入弹出操作。为什么要设置堆栈?为什么要按 “后进先出”方式工作?参见下图(2) (2) 堆栈操作指令堆栈操作指令10主程序IP继续执行主程序执行子程序转子程序

7、压栈弹出返回主程序主程序IPIP(下)继续执行主程序转子程序1返回主程序IP执行子程序 2转子程序2返回子程序1IP(下)执行子程序1继续执行子程序1(a)(b)子程序调用示意图(a) 主程序调子程序; (b) 子程序嵌套示意图压栈弹出IP(下)11规定由SS指示堆栈段的段基址,堆栈指针SP始终指向堆栈的顶部,SP的初值规定了所用堆栈区的大小。堆栈的最高地址叫栈底。 SPSS堆栈段堆栈段进栈方向退栈方向栈底栈底栈顶栈顶12 压栈指令 PUSH src ; src为16位操作数 例:PUSHAX;将AX内容压栈 执行操作:(SP)-1高字节AH (SP)-2低字节AL (SP)(SP)- 213

8、设(AX)=1020H,执行示意图如图低地址存储区(SS段)执行前(AX)=1020(SP)存储区(SS段)进栈方向执行后2010(AL)(AH)2-8PUSH AX指令执行示意图指令执行示意图(SP)-2(SP)高地址低地址高地址(SP)- -114压栈指令的格式为: PUSH reg PUSH mem/reg PUSH segreg例如: PUSH AX PUSH BX PUSH DS 注意进栈方向是高地址向低地址发展。15 弹出指令 POPdest例:POPBX;将栈顶内容弹至BX 执行操作:(BL)(SP) (BH)(SP)+1 (SP)(SP)+216POP BX 的执行示意图如下图

9、所示低地址存储区(SS段)出栈方向执行前2010POP BX指令执行示意图指令执行示意图(SP)存储区(SS段)执行后(BX)=1020(SP)(SP)+1(SP)+2BX2010高地址低地址高地址17堆栈指令使用时应注意几点:堆栈指令使用时应注意几点:堆栈操作总是按堆栈操作总是按字字进行进行不能从栈顶弹出一个字给不能从栈顶弹出一个字给CSCS堆栈指针为堆栈指针为SS:SPSS:SP,SPSP永远指向栈顶永远指向栈顶SPSP自动进行增减量(自动进行增减量(-2-2,+2+2)18格式:XCHG reg,mem/reg功能:交换两操作数的内容。 要求:两操作数中必须有一个在寄存器中; 操作数不能

10、为段寄存器和立即数; 源和目地操作数类型要一致。举例: XCHG AX,BX XCHG 2000,CL(3)(3)交换指令交换指令XCHGXCHG19(4)(4)查表指令查表指令XLATXLAT 执行的操作:AL(BX)+(AL) 又叫查表转换指令,它可根据表项序号查出表中对应代码的内容。执行时先将表的首地址(偏移地址)送到BX中,表项序号存于AL中。 例如:内存数据段有一张16进制数的ASCII码表,设首地址为2000H,如欲查出表中第11个代码(代码序号从0开始)即十六进制数B的ASCII码。ASCII表在DS段中,并假设(DS)=4000H。见下页图。20303132.394142.45

11、46.42000H+042000H+110129ABEF十六进制数十六进制数ASCIIASCII码表码表存储器21则可用如下几条指令实现则可用如下几条指令实现:MOV BX,2000H ;(BX)表首地址MOV AL,0BH ;(AL)序号XALT ; 查表转换执行后得到:(AL)= 42H = B注意:转换表长度最大为注意:转换表长度最大为256256个表项个表项( (字节字节) )。22(5)(5)字节字节- -字转换指令字转换指令格式:CBW ;把AL的符号位复制到AH CWD ;把AX的符号位复制到DX用途:用于有符号数的除法。例如:(AL) = A7H,则执行CBW后,AH的内 容为

12、FFH。232. 2. 输入输出输入输出(I/OI/O)指令指令只限于用累加器AL或AX来传送信息。功能: (累加器)I/O端口(1)输入指令IN格式: IN acc,PORT ;PORT端口号0255H IN acc,DX ;DX表示的端口范围达64K例:IN AL,80H ;(AL)(80H端口) IN AL,DX ;(AL)(DX)24例:OUT 68H,AX ;(69H,68H)(AX) OUT DX,AL ;(DX)(AL)在使用间接寻址的IN/OUT指令时,要事先用传送指令把I/O端口号设置到DX寄存器,如: MOV DX,220H IN AL,DX ;将220H端口内容读入AL(

13、2) (2) 输出指令输出指令OUTOUT格式:OUT port,acc OUT DX,acc253. 3. 地址传送指令地址传送指令共有三条:格式:LEA reg,mem ; 将指定存储器的16位偏移 地址送指定寄存器 LDS reg, mem32; DS:reg(mem开始的四 个内存单元) LES reg, mem32; 同上,但DS改为ES 要求源操作数必须是一个内存操作数,目的操作数必须是一个16位的通用寄存器。26设:(SI)=1000H则执行该指令后,(BX)=1010H注意以下两条指令差别: LEA BX,BUFFER MOV BX,BUFFER前者表示将符号地址为BUFFER

14、的存储单元的偏侈地址取到 BX中;后者表示将BUFFER存储单元中的内容取到 BX中.例:例:LEALEABXBX,SI+10HSI+10H27下面两条指令等效: LEA BX,BUFFER MOV BX, OFFSET BUFFER其中OFFSET BUFFER表示存储器单元BUFFER的偏移地址。二者都可用于取存储器单元的偏移地址,但LEA指令可以取动态的地址,OFFSET只能取静态的地址。284.标志传送指令共有四条:(1)(1)读标志指令读标志指令LAHF LAHF把标志寄存器低8位中的5个标志位传送到AH中的指定位,如下图所示:OF DF IF TF SF ZFAFPFCFAHLAH

15、F指令的功能FLAG29(2)(2)设置标志指令设置标志指令SAHF SAHF的功能与LAHF的功能正好相反,用图来示意,只要将上图中5个箭头方向反一下即可。OF DF IF TF SF ZFAFPFCFAHSAHF指令的功能FLAG30 执行的操作:(SP)-1标志寄存器高8位 (SP)-2标志寄存器低8位 (SP)(SP)-2(4)(4)从栈顶弹出标志寄存器指令从栈顶弹出标志寄存器指令POPF 执行的操作:标志寄存器低8位(SP) 标志寄存器高8位(SP)+1 (SP)(SP)+2PUSHF和POPF指令用于保护和恢复标志寄存器内容。(3)(3)把标志寄存器推入栈顶指令把标志寄存器推入栈顶

16、指令PUSHF31例如:例如: PUSHAX PUSHCX PUSHF ;保护标志寄存器内容 ;这段程序要用到AX,CX以及标志位 POPF ;恢复标志寄存器内容 POPCX POPAX. . .32数据传送指令中,除SAHF和POPF这两条指令外,其余所有指令均不影响标志位。333.3.2 3.3.2 算术运算指令算术运算指令 涉及两种类型数据两种类型数据: 无符号数和有符号数。对加减法指令,无符号和有符号数可采用同一套指令,但应注意:l 参加的操作数必须都是无符号数或都是有符号数。l 需使用不同的标志位来检查无符号数和有符号数的运算结果是否溢出。34两个两个8 8位数相加时有位数相加时有4

17、 4种情况种情况:无符号数和有符号数均不溢出无符号数和有符号数均不溢出二进制相加 无符号数加 有符号数加 0000 1000 8 +8+0001 1110 + 30 + (+30) 0010 0110 38 +38 结果38 CF=0 OF=035 无符号数溢出无符号数溢出 0000 1000 8 +8+1111 1101 +253 +(-3)10000 0101 261 +5 结果5 CF=1 OF=0 有符号数溢出有符号数溢出 0000 1000 8 +8+0111 1101 +125 +(+125) 1000 0101 133 +133结果-123 CF=0 OF=1(补码表示)36 无

18、符号数和有符号数均溢出无符号数和有符号数均溢出 1000 1000 136 -120+1111 0111 +247 +(-9)10111 1111 383 -129 结果127 CF=1 OF=1上面四种情况说明,CF标志可用来表示无符号数的溢出,OF标志可用来表示有符号数的溢出。有符号数的溢出是一种出错状态,在运算过程中应当避免。37共有5条:(1) (1) 不带进位的加法指令不带进位的加法指令ADDADD 格式: ADD acc,data ADD mem/reg,data ADD mem/reg1,mem/reg2例:ADDAL,30H ADDAX,BX+20H ADDCX,SI ADDD

19、I,200HADD指令对标志位(指状态标志)都有影响。1.1.加法指令加法指令38(2) (2) 带进位位的加法指令带进位位的加法指令ADCADC ADC指令在形式上和功能上都有与ADD类似,只是相加时还要包括进位标志CF的内容,例如: ADC AL,68H ;AL(AL)+68H+(CF) ADC AX,CX ;AX(AX)+(CX)+(CF) ADC BX,DI ;BX(BX)+DI+1DI +(CF)39例:有两个4字节的无符号数相加: 2C56F8AC+309E47BE=? 设被加数、加数分别存放在BUFFER1及BUFFER2开始的两个存储区内,结果放回BUFFER1存储区,如下页图

20、所示。 因CPU只能进行8位或16位的加法运算,为此可将加法分4次进行。ADCADC指令主要用于多字节加法运算中指令主要用于多字节加法运算中4056H2CHBEH47HBUFFER1BUFFER2ACHF8H9EH30H被加数加数数据段多字节加法多字节加法示意图示意图 .41程序段如下: MOV CX,4 ;置循环次数 MOV SI,0 ;置SI初值为零 CLC ;清进位标志CFLL: MOV AL,BUFFER2SI ADC BUFFER1SI,AL ;带进位加 INC SI ;(SI)+1 DEC CX ;(CX)-1 JNZ LL ;若(CX)0,则转LL思考:若最高位有进位,如何改?思考:若最高位有进位,如何改?42

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

最新文档


当前位置:首页 > 高等教育 > 研究生课件

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