微机原理教案7-1.ppt

上传人:本田雅阁 文档编号:3477808 上传时间:2019-09-01 格式:PPT 页数:51 大小:328.07KB
返回 下载 相关 举报
微机原理教案7-1.ppt_第1页
第1页 / 共51页
微机原理教案7-1.ppt_第2页
第2页 / 共51页
微机原理教案7-1.ppt_第3页
第3页 / 共51页
微机原理教案7-1.ppt_第4页
第4页 / 共51页
微机原理教案7-1.ppt_第5页
第5页 / 共51页
点击查看更多>>
资源描述

《微机原理教案7-1.ppt》由会员分享,可在线阅读,更多相关《微机原理教案7-1.ppt(51页珍藏版)》请在三一文库上搜索。

1、第 六 讲,8086/8088的指令系统,指令系统概述,按照汇编指令格式划分,指令有三种: 双操作数指令:指令中指定两个操作数,其中一个是源操作数(SRC),另一个是目的操作数(DEST)。 单操作数指令:指令只需一个操作数。它既是源操作数( SRC ),也是目的操作数( DEST )。 无操作数指令:虽然指令本身未指明操作数在哪里,但是指令却隐含指明操作数的地方。,指令系统概述,学习每一条指令应该注意以下几点: 指令的格式和执行的操作 允许的寻址方式 与标志位的关系,指令系统概述,按照汇编指令功能划分,8086的指令可以分成六大类: 数据传送指令 算术运算指令 位运算指令 串操作指令 控制转

2、移指令 处理器控制指令,数据传送指令,指令类型,指 令,指令功能,通用数据传送,目标地址传送,标志位传送,I/O数据传送,MOV d, s PUSH s POP d XCHG d, s XLAT,字节或字传送 字压入堆栈 字弹出堆栈 字节或字交换 字节翻译(代码转换),LEA d, s LDS d, s LES d, s,装入有效地址 装入地址指针(用DS) 装入地址指针(用ES),LAHF SAHF PUSHF POPF,将F低字节装入AH寄存器 将AH内容装入F低字节 将F的内容压入堆栈 从堆栈中弹出一个字装入F,IN 累加器,端口 OUT 端口,累加器,输入字节或字 输出字节或字,表一

3、数据传送指令列表,通用数据传送指令,有以下五条 MOV 把源操作数传送到目的操作数 PUSH 指针上移,源操作数进栈 POP 出栈到目的操作数,指针下移 XCHG 交换源,目的操作数 XLAT 代码转换,通用数据传送指令,MOV 指令 基本格式和功能 指令格式: MOV dest,src 其中 dest 表示目的操作数,src表示源操作数 执行的操作: (dest)(src) 与标志的关系: 与标志没有关系,不影响标志位。,通用数据传送指令,MOV 指令 数据传送通道,图1 MOV 指令数据传送通道,通用数据传送指令,MOV 指令 一些说明 说明: 立即数不能直接传给段寄存器;段寄存器之间也不

4、能进行直接传送。(这2种情况通常要通过通用寄存器间接进行) DEST和SRC两个操作数不能同时为存储器操作数;两个存储单元之间不能用一条MOV指令直接完成数据传送。存储器操作数可用任何一种存储器寻址方式。 DEST和SRC长度须相同,即同时为字或字节。,通用数据传送指令,MOV 指令 一些说明 说明 立即数只能出现在源操作数位置,不能作DEST CS只能作源操作数,不能作目的操作数。 传送实质上是复制,对源操作数无影响。 16位数据的传送遵循地址“高对高,低对低”的原则。这个原则不仅对MOV指令适用,对所有的传送皆适用。,通用数据传送指令,MOV 指令 例子 立即数r/m MOV CL, 05

5、H MOV AX, 1234H MOV ADDR, 12H MOV ADDR, 1234H,通用数据传送指令,MOV 指令 例子 reg reg MOV DH, AL MOV DS, AX r m MOV DL, DA_BYTE MOV DL, SI MOV AX, DA_WORD,通用数据传送指令,MOV 指令 例子 m m MOV DL, DA_BYTE1 MOV DA_BYTE2, DL m m(存储单元内容互换) MOV CL,DA_BYTE1 MOV DL,DA_BYTE2 MOV DA_BYTE1,DL MOV DA_BYTE2,CL,通用数据传送指令,MOV 指令 例子 指令辩误

6、:判断下列指令的正误并说明原因 MOV AL,CX MOV AL, CX MOV 3000H, BX MOV AL, 1200H MOV CS, BX MOV DS, 1200H MOV ES, DS,通用数据传送指令,MOV 指令 练习 题目1:已知当前BX=1200H,CS=1800H,IP=0500H,DS=3000H,则执行指令MOV BX+2000H,12ABH 后,12ABH放在哪两个存储单元(物理地址)?,答案:12ABH放在33200H和33201H存储单元中。其中12H放在33201H单元中,而0ABH放在33200单元中。,通用数据传送指令,MOV 指令 练习 题目2:将D

7、S段中2000H单元与3000H单元的内容互换,请写出指令序列。 解:,MOV AL,2000H MOV BL, 3000H MOV 2000H, BL MOV 3000H, AL,通用数据传送指令,PUSH 和 POP指令 基本格式和功能 指令格式: PUSH SRC POP DEST 执行的操作: PUSH 压入。源操作数进栈至栈顶。“先减再压” SP SP -2 SS:(SP),(SP)+1) (SRC) POP 弹出。栈顶出栈到目的操作数。“先弹再加” (DEST) SS:(SP),(SP)+1) SP SP +2,通用数据传送指令,PUSH 和 POP指令 基本格式和功能 与标志的关

8、系: 与各标志位无关,不影响标志位 寻址方式: PUSH mem / reg POP mem / reg 注意: 操作数一律为16位操作数。允许使用段寄存器,但POP操作数不允许为CS。可以使用除立即数以外的任何数据寻址方式。,通用数据传送指令,PUSH 和 POP指令 关于堆栈 堆栈是一段特殊组织的内存区域,其内容的存取主要由堆栈指针控制,规则是:“先进后出”或者“后进先出”。,XX,32H,30012H,30013H,30011H,30010H,3000FH,3000EH,30000H,3000H,SS,000FH,SP,6CH,45H,0AH,0013H,SP,堆栈段,通用数据传送指令,

9、PUSH 和 POP指令 关于堆栈 例:将4456H压入堆栈。,XX,30012H,30013H,30011H,30010H,3000FH,3000EH,30000H,3000H,SS,56H,堆栈段,44H,“先减再压”,通用数据传送指令,PUSH 和 POP指令 关于堆栈 例:从堆栈弹出两个字节送AX。,XX,30012H,30013H,30011H,30010H,3000FH,3000EH,30000H,3000H,SS,56H,堆栈段,78H,12H,34H,34H,AX,12H,AH,AL,“先弹再加”,通用数据传送指令,PUSH 和 POP指令 用途 堆栈常有两个用途:暂存和传送。

10、 暂存: PUSH AX PUSH BX POP BX POP AX 传送: PUSH AX PUSH BX POP AX POP BX,XX,5A06H,AX,1200H,BX,sp,通用数据传送指令,PUSH 和 POP指令 练习 题目:已知SS=2000H,AX=1600H,SP=0202H,CX=3456H,当执行以下两条指令后: PUSH AX PUSH CX 问:这时SS,AX,CX,SP的内容?存储器中20200H单元的内容为多少?,答案:SS=2000H,AX=1600H,CX=3456H ,SP=01FEH;(20200H)=00H,01FEH,01FFH,0200H,020

11、1H,0202H,XX,通用数据传送指令,XCHG指令 基本格式和功能 指令格式: XCHG DEST, SRC 执行的操作:源操作数与目的操作数内容互换 (DEST) (SRC) 与标志的关系: 与各标志位互不影响,通用数据传送指令,XCHG指令 基本格式和功能 寻址方式: XCHG mem/reg, mem/reg 注意:两操作数均不允许为立即数和段寄存器,不能同为存储器操作数;可以是字或字节交换。,图3 XCHG指令的数据交换通路,通用数据传送指令,XCHG指令 例子 例:两个存储单元之间进行数据交换。 (应用三条指令实现),MOV AL,DABYTE1 XCHG AL,DABYTE2

12、XCHG AL,DABYTE1,通用数据传送指令,XLAT指令 基本格式和功能 指令格式: XLAT 或 XLAT AL, BX 执行的操作: 其功能是从转换表中找出一个字节的内容,用其取代AL寄存器的内容。 转换表由用户设计,最长为256个字节,换码时,应将代码表首地址保存在BX中, AL中保存待查字节序号(即代码表中字符序号),换码后,A L取得对应的码值。,通用数据传送指令,XLAT指令 例子 例:假设用户设计转换表TABLE如下图所示,如需要查找表中第8个单元的内容,则可以使用指令序列:,MOV AX,SEG TABLE MOV DS,AX MOV BX,OFFSET TABLE MO

13、V AL,07H XLAT,TABLE,+1,+2,+3,+4,+5,+6,+7,+8,7EH,30H,6DH,79H,33H,5BH,1FH,70H,7FH,执行后AL=70H,通用数据传送指令,课堂练习 1、请将存储器中DS段内三个存储单元的内容轮换。(设3个存储单元的偏移地址分别是1020H,1040H,1060H) 2、将CX与DX的内容互换,可以有多少种方法?,通用数据传送指令,参考答案 1、 MOV AL, 1020H XCHG AL, 1040H XCHG AL,1060H MOV 1020H, AL 2、至少有三种: 用MOV指令: 用堆栈指令: 用XCHG指令:,MOV AX

14、, CX MOV CX, DX MOV DX, AX,PUSH CX PUSH DX POP CX POP DX,XCHG CX, DX,目标地址传送指令,共3条 LEA 取有效地址 LDS 从双字中取偏移地址和数据段的段地址 LES 从双字中取偏移地址和附加段的段地址,目标地址传送指令,LEA指令 基本格式和功能 指令格式: LEA DEST, SRC 执行的操作: 指令功能:源操作数的有效地址EA送给目的操作数。 DESTSRC的有效地址EA 与标志的关系: 指令对标志无影响。,目标地址传送指令,LEA指令 基本格式和功能 寻址方式: LEA reg, mem 说明: SRC必须是存储器操

15、作数。 DEST一定是一个16位通用寄存器,而不能是8位的寄存器或段寄存器。 编程时,程序员不必了解数据或指令的有效地址,但有时这些地址会在程序其它部分用到, 这时可以使用LEA 指令。,目标地址传送指令,LEA指令 例子 例:如BX=00CDH,SI=00A6H,存储单元的内容为78ABH,则指令 MOV AX,BXSI 执行后,AX78ABH;而 LEA AX,BXSI 执行后,AX00CDH00A6H=0173H。,目标地址传送指令,LDS和LES指令 基本格式和功能 指令格式: LDS DEST, SRC LES DEST, SRC 执行的操作: 功能:将SRC中的双字内容依次送入到D

16、EST及DS(LDS指令)或ES(LES指令)中。 指令中SRC为一双字指针,高位字送指定的段寄存器,低位字送指定的寄存器。,目标地址传送指令,LDS和LES指令 基本格式和功能 与标志的关系: 指令对标志无影响。 寻址方式: LDS/ LES reg, mem 说明: SRC处保存的一般是某个逻辑地址(SEG:OFFSET),事先由用户准备好。 DEST必须是任一通用寄存器(16位);SRC一定是存储器操作数。 本指令用于同时建立段地址和段内偏移地址。,目标地址传送指令,LDS和LES指令 例子 例:设当前DS2000H,DI2400H,存储单元2340AH处的内容如下图所示。则指令 LDS

17、 SI,DI100AH 执行后,DS与SI的值分别为多少?,80H,01H,30H,22H,2340AH,答案:DS2230H, SI0180H,标志位传送指令,共有4条: LAHF 标志送AH指令 SAHF AH送标志指令 PUSHF 标志进栈指令 POPF 标志出栈指令 这些指令用于保存和恢复PSW,标志位传送指令,LAHF 与 SAHF指令 基本格式和功能 指令格式: LAHF SAHF 功能: LAHF:AH FlagsL SAHF:FlagsL AH,标志位传送指令,LAHF 与 SAHF指令 基本格式和功能 说明: LAHF指令对F本身无影响; SAHF指令对F高8位无影响,对F低

18、8位的影响要看AH的内容。 复习:F标志寄存器各位位置,OF,DF,IF,TF,SF,ZF,AF,PF,CF,15,0,8,7,标志位传送指令,LAHF 与 SAHF指令 例子 例:欲将F中的进位标志和奇偶标志都设置为1,请写出指令序列。,答案: MOV AH,05H SAHF,标志位传送指令,PUSHF 与 POPF指令 基本格式和功能 指令格式: PUSHF POPF 功能: PUSHF:stack Flags (F进栈) POPF :Flags stack (F出栈),标志位传送指令,PUSHF 与 POPF指令 基本格式和功能 说明: PUSHF指令对F本身无影响。 POPF指令对F的

19、影响由栈顶内容决定。 Flags中各标志位的值只有少数几个能通过别的指令去设置,其余的只能通过上述4条指令去设置。,标志位传送指令,PUSHF 与 POPF指令 例子 例1:欲将F的内容传送到AX中。请写出指令序列。,答案:PUSHF POP AX,标志位传送指令,PUSHF 与 POPF指令 例子 例2:欲设置F寄存器的内容为1234H。请写出指令序列。,答案: PUSH 1234H POPF,正确答案: MOV AX,1234H PUSH AX POPF,指令有误,I/O数据传送指令,IN 和 OUT指令 基本格式和功能 指令格式: 长格式(直接寻址): IN AL,端口地址 IN AX,

20、 端口地址 OUT 端口地址,AL OUT 端口地址,AX 注意: 长格式中直接采用端口地址,但地址必须是8位的,也就是00FFH号端口才可以使用长格式。,I/O数据传送指令,IN 和 OUT指令 例子 合法的I/O指令: IN AL,70H IN AX,70H OUT 71H,AL OUT 71H,AX,I/O数据传送指令,IN 和 OUT指令 基本格式和功能 短格式(间接寻址) IN AL, DX IN AX, DX OUT DX, AL OUT DX, AX 短格式中的端口地址保存在DX中,由于DX是十六位寄存器,所以这种寻址方式可对0 65535个端口进行寻址。,I/O数据传送指令,I

21、N 和 OUT指令 基本格式和功能 执行的操作: 16位端口 IN : (AX) (port) OUT : (port) (AX) 8位端口 IN : (AL) (port) OUT : (port) (AL),I/O数据传送指令,IN 和 OUT指令 说明 要注意区分I/O端口的数据与地址的宽度(位数)。所谓16位端口指的是数据宽度是16位的端口,8位端口指其数据宽度是8位,它们的地址可以是8位或16位的。 因此I/O指令可能有如下几种情况:(以IN指令为例) 8位数据8位地址: IN AL, 61H 8位数据16位地址: IN AL, DX 16位数据8位地址: IN AX, 61H 16位数据16位地址: IN AX, DX,I/O数据传送指令,IN 和 OUT指令 例子 例:编写指令:将2024H端口中一个字的内容存入堆栈。,答案: MOV DX, 2024H IN AX, DX PUSH AX,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1