1 / 48

Home

内容简介. 习题解答. 重点 / 难点. 4. 指令系统. 4.1 指令格式与寻址方式. 4.2 8086/8088CPU 的指令系统. Home. 4. 指令系统. 内容简介. 本章以 8086 微处理器为例介绍微型计算机的指令系统,包括指令格式、寻址方式和各类指令功能。. Home. 4. 指令系统. 重点与难点. 操作码、操作数的基本概念 8086 的 6 种基本寻址方式及有效地址的计算 各类指令的汇编格式、功能、对标志位的影响和注意事项. Home. 1. 4.1 指令格式与寻址方式. 1. 指令格式.

tamra
Télécharger la présentation

Home

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 内容简介 习题解答 重点/难点 4.指令系统 4.1 指令格式与寻址方式 4.2 8086/8088CPU的指令系统 Home

  2. 4.指令系统 内容简介 本章以8086微处理器为例介绍微型计算机的指令系统,包括指令格式、寻址方式和各类指令功能。 Home

  3. 4.指令系统 重点与难点 • 操作码、操作数的基本概念 • 8086的6种基本寻址方式及有效地址的计算 • 各类指令的汇编格式、功能、对标志位的影响和注意事项 Home

  4. 1 4.1 指令格式与寻址方式 1.指令格式 指令格式是指令的编码格式,其体现了指令系统的概貌,说明指令系统的机器目标代码是如何构成的。 指令的构成: Next Home

  5. 2 4.1 指令格式与寻址方式 2.寻址方式 • 段内直接寻址 • 段内间接寻址 • 段间直接寻址 • 段间间接寻址 转移地址寻址方式 数 据 寻 址 方 式 • 立即数寻址 • 寄存器寻址 • 存储器寻址 • I/O端口寻址 Back Next Home

  6. 3 1.数据寻址方式 1.立即数寻址 例如,MOV  AX,2000H     ;将2000H送入AX 点击演示! Back Next Home

  7. 4 1.数据寻址方式 2.寄存器寻址 例如:MOV  SI,CX 点击演示! Back Next Home

  8. 5 1.数据寻址方式 3.存储器寻址——直接寻址 例如:MOV AX,[2000H]  ;设(DS)=3000H。 点击演示! Back Next Home

  9. 6 1.数据寻址方式 3.存储器寻址——寄存器间接寻址 例如:MOV  AX,[BX]   ;PA=(DS)×16+(BX) 点击演示! Back Next Home

  10. 7 1.数据寻址方式 3.存储器寻址——寄存器相对寻址 例如,MOV  AX,COUNT[DI]  ;操作数PA=(DS)×16+(DI)+COUNT,COUNT代表一个位移量常数 点击演示! Back Next Home

  11. 8 1.数据寻址方式 3.存储器寻址——基址变址寻址 例如,MOVAX,MASK[BX][SI] 点击演示! Back Next Home

  12. 9 1.数据寻址方式 • (4)I/O端口寻址 • 直接端口寻址 • 可寻址的端口号的范围为0 ~255。 • 例如:IN AL , n • 间接端口寻址 • 可寻址的端口号的范围为0 ~ 65535。先将16位I/O端口地址(0000H ~ FFFFH)存放在规定的DX寄存器中,即通过DX对端口间接寻址。 • 例如:MOV DX , 350 • OUT DX , AL Back Next Home

  13. 10 2 转移地址寻址方式 1.段内直接转移寻址 转移地址是一个8位或16位的相对地址偏移量disp,在指令中直接给出,用标号(为存放指令的存储单元地址所起的名字,即符号地址)表示。 例如:JMP LT0 ; LT0是标号 2.段内间接转移寻址 转移地址是16位的寄存器的内容或存储器中两个连续单元的内容 。 例如:JMP BX JMPWORD PTR [BX] Back Next Home

  14. 11 2 转移地址寻址方式 3.段间直接转移寻址 指令码中直接给出目标地址的16位段基址和16位段内偏移地址 。 例如:JMP FAR PTR P1 4.段间间接转移寻址 目标地址存放在4个连续存储单元。 例如:JMP DWORD PTR [BX + 020AH] Back Next Home

  15. 1 4.2 8086/8088指令系统 8086/8088CPU的指令可分为六大类 l数据传送类指令(Data transfer instructions) l算术运算类指令(Arithmetic instructions) l位操作类指令(Bit manipulation instructions) l串操作类指令(String instructions) l控制转移类指令(Program transfer instructions) l处理器控制类指令(Processor control instructions) Next Home

  16. 2 数据传送指令 • 可实现 存储器 寄存器 I/O • 数据传送指令又可分为如下四种: • 通用传送 • 目标地址传送 • 标志传送 • 输入输出 Back Next Home

  17. 1.通用传送指令 (1)MOV dest,src; dest←src 传送的是字节还是字取决于指令中涉及的寄 存器是8位还是16位。 具体来说可实现: ① MOV mem/reg1,mem/reg2 指令中两操作数中至少有一个为寄存器 例: MOV CL,DL MOV AX,BX MOV [SI],CX MOV CL,[BX+5]

  18. ② MOV reg,data ;立即数送寄存器 ③ MOV mem,data ;立即数送存储单元 ④ MOV acc,mem ;存储单元送累加器 ⑤ MOV mem,acc ;累加器送存储单元 ⑥ MOV segreg,mem/reg ;存储单元/寄存器送 段寄存器 ⑦ MOV mem/reg,segreg ;段寄存器送存储单 元/寄存器

  19. MOV指令使用规则: 1) IP不能作目的寄存器 2) 不允许mem←mem 3) 不允许segreg←segreg 4) 立即数不允许作为目的操作数 5) 不允许segreg←立即数 6) 源操作数与目的操作数类型要一致

  20. 几个不能传送的解决办法:用AX作桥梁 • 存储器←存储器: MOV AX,MEM1 MOV MEM2,AX • 段寄存器←段寄存器: MOV AX,DS MOV ES,AX • 段寄存器←立即数: MOV AX,DATA MOV DS,AX

  21. 应用举例:将1000H开始的100个存储单元 • 全部填充为ASCII码2AH(*)。 • 程序段如下: • MOV DI,1000H • MOV CX,64H • MOV AL,2AH • AGAIN:MOV [DI],AL • INC DI • DEC CX • JNZ AGAIN • HLT

  22. 上程序段存放在代码段中,設(CS)=109EH,则各条指令存放地址如下:上程序段存放在代码段中,設(CS)=109EH,则各条指令存放地址如下: CS : IP 指令 109E : 0100 MOV DI,1000H 109E : 0103 MOV CX,64H 109E : 0106 MOV AL,2AH 109E : 0108 MOV [DI],AL 109E : 010A INC DI 109E : 010B DEC CX 109E : 010C JNZ 0108 109E : 010E HLT 109E : 0110

  23. 写入2AH(*)后,数据段中相应存储单元的内容改变如下:写入2AH(*)后,数据段中相应存储单元的内容改变如下: DS:1000 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A DS:1010 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A DS:1020 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A DS:1030 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A DS:1040 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A DS:1050 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A DS:1060 2A 2A 2A 2A

  24. (2) 堆栈操作指令 什么是堆栈? 按“后进先出(LIFO)”方式工作的存储区域。堆栈以字为单位进行压入弹出操作。 为什么要设置堆栈? 为什么要按 “后进先出”方式工作? 参见下图

  25. 主程序 主程序 执行子 程序1 转子程序1 转子程序 执行子程序 2 执行子程序 转子程序2 压栈 压栈 IP’ IP IP IP’(下) IP(下) IP(下) 弹出 返回子程序1 弹出 继续执行 主程序 继续执行 主程序 继续执行 子程序1 返回主程序 返回主程序 (a) (b) 子程序调用示意图 (a) 主程序调子程序; (b) 子程序嵌套示意图

  26. 规定由SS指示堆栈段的段基址,堆栈指针SP始终指向堆栈的顶部,SP的初值规定了所用堆栈区的大小。堆栈的最高地址叫栈底。 SS 进栈方向 堆栈段 栈顶 SP 退栈方向 栈底

  27. ① 压栈指令 PUSH src ; src为16位操作数 例:PUSH AX ;将AX内容压栈 执行操作:(SP)-1←高字节AH (SP)-2←低字节AL (SP)←(SP)- 2

  28. 设(AX)=1020H,执行示意图如图 2-8 存储区 (SS段) 存储区 (SS段) 低地址 低地址 (SP)-2 20 (AL) (SP) (SP)-1 10 (AH) (SP) 进栈方向 执行前 (AX)=1020 执行后 高地址 高地址 PUSH AX指令执行示意图

  29. 压栈指令的格式为: PUSH reg PUSH mem/reg PUSH segreg 例如: PUSH AX PUSH [BX] PUSH DS 注意进栈方向是高地址向低地址发展。

  30. ② 弹出指令 POP dest 例:POP BX ;将栈顶内容弹至BX 执行操作:(BL)←(SP) (BH)←(SP)+1 (SP)←(SP)+2

  31. POP BX 的执行示意图如下图所示 存储区 (SS段) 存储区 (SS段) 低地址 低地址 20 (SP) 10 (SP)+1 (SP) (SP)+2 出栈方向 20 10 执行后 (BX)=1020 BX 执行前 高地址 高地址 POP BX指令执行示意图

  32. 堆栈指令使用时应注意几点: ①堆栈操作总是按字进行 ②不能从栈顶弹出一个字给CS ③堆栈指针为SS:SP,SP永远指向栈顶 ④SP自动进行增减量(-2,+2)

  33. 格式:XCHG reg,mem/reg 功能:交换两操作数的内容。 要求:两操作数中必须有一个在寄存器中; 操作数不能为段寄存器和立即数; 源和目地操作数类型要一致。 举例: XCHG AX,BX XCHG [2000],CL (3)交换指令XCHG

  34. (4)查表指令XLAT 执行的操作:AL←[(BX)+(AL)] 又叫查表转换指令,它可根据表项序号查出表中对应代码的内容。执行时先将表的首地址(偏移地址)送到BX中,表项序号存于AL中。 例如:内存数据段有一张16进制数的ASCII码表,设首地址为2000H,如欲查出表中第11个代码(代码序号从0开始)即十六进制数B的ASCII码。ASCII表在DS段中,并假设(DS)=4000H。见下页图。 ‘ ’

  35. 存储器 42000H+0 30 ‘0’ 31 ‘1’ 32 ‘2’ ... 39 ‘9’ 41 ‘A’ 42000H+0BH 42 ‘B’ ... 45 ‘E’ 46 ‘F’ ... 十六进制数ASCII码表

  36. 则可用如下几条指令实现: MOV BX,2000H;(BX)←表首地址 MOV AL,0BH;(AL)←序号 XALT; 查表转换 执行后得到:(AL)= 42H = ’ B’ 注意:转换表长度最大为256个表项(字节)。

  37. (5)字节-字转换指令 格式:CBW ;把AL的符号位复制到AH CWD ;把AX的符号位复制到DX 用途:用于有符号数的除法。 例如:(AL) = A7H,则执行CBW后,AH的内 容为FFH。

  38. 2. 输入输出(I/O)指令 只限于用累加器AL或AX来传送信息。 功能: (累加器)←→I/O端口 (1)输入指令IN 格式: IN acc,PORT ;PORT端口号0~255 IN acc,DX ;DX表示的端口范围达64K 例:IN AL,80H ;(AL)←(80H端口) IN AL,DX ;(AL)←((DX))

  39. 例:OUT 68H,AX ;(69H,68H)←(AX) OUT DX,AL ;((DX))←(AL) 在使用间接寻址的IN/OUT指令时,要事先用传送指令把I/O端口号设置到DX寄存器,如: MOV DX,220H IN AL,DX ;将220H端口内容读入AL (2) 输出指令OUT格式:OUT port,acc OUT DX,acc

  40. 3. 地址传送指令 共有三条: 格式:LEA reg,mem ; 将指定存储器的16位偏移 地址送指定寄存器 LDS reg, mem32; DS:reg←(mem开始的四 个内存单元) LES reg, mem32; 同上,但DS改为ES 要求源操作数必须是一个内存操作数,目的操作数必须是一个16位的通用寄存器。

  41. 设:(SI)=1000H 则执行该指令后,(BX)=1010H 注意以下两条指令差别: LEA BX,BUFFER MOV BX,BUFFER 前者表示将符号地址为BUFFER的存储单元的偏侈地址取到BX中;后者表示将BUFFER存储单元中的内容取到BX中. 例:LEA BX,[SI+10H]

  42. 下面两条指令等效: LEA BX,BUFFER MOV BX, OFFSET BUFFER 其中OFFSET BUFFER表示存储器单元BUFFER的偏移地址。 二者都可用于取存储器单元的偏移地址,但LEA指令可以取动态的地址,OFFSET只能取静态的地址。

  43. 4.标志传送指令 共有四条: (1)读标志指令LAHF LAHF把标志寄存器低8位中的5个标志位传送到AH中的指定位,如下图所示: AH CF PF SF FLAG ZF AF TF IF DF OF LAHF指令的功能

  44. (2)设置标志指令SAHF SAHF的功能与LAHF的功能正好相反,用图来示意,只要将上图中5个箭头方向反一下即可。 AH FLAG SF DF AF OF TF PF CF ZF IF SAHF指令的功能

  45. 执行的操作:(SP)-1←标志寄存器高8位 (SP)-2←标志寄存器低8位 (SP)←(SP)-2 (4)从栈顶弹出标志寄存器指令POPF 执行的操作:标志寄存器低8位←(SP) 标志寄存器高8位←(SP)+1 (SP)←(SP)+2 PUSHF和POPF指令用于保护和恢复标志寄存器内容。 (3)把标志寄存器推入栈顶指令PUSHF

  46. 例如: PUSH AX PUSH CX PUSHF ;保护标志寄存器内容 ;这段程序要用到AX,CX以及标志位 POPF ;恢复标志寄存器内容 POP CX POP AX . . .

  47. 数据传送指令中,除SAHF和POPF这两条指令外,其余所有指令均不影响标志位。数据传送指令中,除SAHF和POPF这两条指令外,其余所有指令均不影响标志位。

  48. 4.指令系统 • 小 结 • 通过本章的学习: • 明确各种寻址方式的区别和特点; • 掌握有效地址和物理地址的计算方法; • 掌握各类指令的功能、对标志位的影响和使用上的一些特殊限制 ; • 能够编写小汇编程序,初步掌握汇编程序的编写和调试方法。 Back Home

More Related