1 / 153

第 3 章

第 3 章. 教学重点. 8088/8086 的寻址方式 8088/8086 的基本指令 传送指令 算术运算指令 逻辑运算和移位指令 串操作指令 控制转移指令. 操作码. 操作数. 指令的基本组成. 操作码 说明计算机要执行哪种操作,如传送、运算、移位、跳转等操作,它是指令中不可缺少的组成部分 操作数 指明参与操作的数是谁或存放在何处 寻找操作数的方法叫寻址方式 在转移调用指令中寻找新的转移地址也是寻址方式。. 指令由操作码和操作数两部分组成. §1 操作数的寻址方式. 指令系统设计了多种操作数的来源 寻找操作数的过程就是操作数的寻址

oren
Download Presentation

第 3 章

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. 第3章

  2. 教学重点 • 8088/8086的寻址方式 • 8088/8086的基本指令 • 传送指令 • 算术运算指令 • 逻辑运算和移位指令 • 串操作指令 • 控制转移指令

  3. 操作码 操作数 指令的基本组成 • 操作码说明计算机要执行哪种操作,如传送、运算、移位、跳转等操作,它是指令中不可缺少的组成部分 • 操作数 指明参与操作的数是谁或存放在何处 • 寻找操作数的方法叫寻址方式 • 在转移调用指令中寻找新的转移地址也是寻址方式。 指令由操作码和操作数两部分组成

  4. §1 操作数的寻址方式 • 指令系统设计了多种操作数的来源 • 寻找操作数的过程就是操作数的寻址 • 理解操作数的寻址方式是理解指令功能的前提 • 操作数采取哪一种寻址方式 • 一方面,会影响处理器执行指令的速度和效率 • 另一方面,对程序设计也很重要

  5. 一、 立即数寻址方式 • 指令中直接给出一个常数作为操作数,其紧跟在操作码之后存放在代码段中。立即数直接从指令队列中取得,不用总线周期,执行数度快。 • 这种操作数被称为立即数 • 可以是8位数值(00H~FFH) • 也可以是16位数值(0000H~FFFFH) • 立即数寻址方式常用来给寄存器和存储单元赋值,多以常量形式出现 • 注意:立即数只能是整数而且是常数。 MOV AX, 0102H ;AX←0102H 演示

  6. 二、 寄存器寻址方式 • 指令中指明某个寄存器其内容即为操作数,寄存器在CPU内,不用总线周期,执行速度快。 • 8位寄存器r8: AH、AL、BH、BL、CH、CL、DH、DL • 16位寄存器r16: AX、BX、CX、DX、SI、DI、BP、SP • 4个段寄存器seg: CS、DS、SS、ES MOV AX, BX ;AX←BX 演示

  7. 三、直接寻址方式 • 指令中直接给出操作数所在内存单元的有效地址 (EA即偏移地址) • 默认的段地址在DS段寄存器,若在其它段可使用段超越前缀改变。 • 用方括号包含有效地址,表达存储单元的内容 • 直接地址也可用标号代表,方括号可省略。 MOV AX, [2000H] ;AX←DS:[2000H] 演示 MOV AX, ES: [2000H] ;AX←ES:[2000H]

  8. 四、寄存器间接寻址方式 • 指令中给出的寄存器的内容包含操作数的有效地址。 • 间接寻址中使用的寄存器名要用方括号括起来 1、基址寻址 用BX或BP作间接寻址寄存器 如:MOV AX,[BX] ;隐含在DS段 MOV AX,[BP] ;隐含在SS段 MOV AX, [BX] ;AX←DS:[BX] 演示

  9. 2、变址寻址 用SI或DI作间接寻址寄存器 如:MOV CL, [SI] MOV AX, [DI] 单独使用SI或DI时,隐含在DS段中 在串操作时,SI隐含在DS段中,DI隐含在ES段中。 3、相对基址寻址 指令中给出基址寄存器及位移量,二者之和为操作数的有效地址。 位移量可以是8位或16位。 有效地址=BX/BP+8/16位位移量

  10. 4、相对变址寻址 指令中给出变址寄存器及位移量,二者之和为操作数的有效地址。 有效地址=SI/DI+8/16位位移量 • 段地址对应BX/SI/DI寄存器默认是DS,对应BP寄存器默认是SS;可用段超越前缀改变 MOV AX, [SI+06H] ;AX←DS:[SI+06H] 演示 MOV AX, 06H[SI] ;AX←DS:[SI+06H]

  11. 5、 基址变址寻址方式 • 有效地址由基址寄存器(BX或BP)的内容加上变址寄存器(SI或DI)的内容构成: 有效地址=BX/BP+SI/DI • 段地址对应BX基址寄存器默认是DS,对应BP基址寄存器默认是SS;可用段超越前缀改变 MOV AX, [BX+SI] ;AX←DS:[BX+SI] 演示 MOV AX, [BX][SI] ;AX←DS:[BX+SI]

  12. 6、 相对基址变址寻址方式 • 有效地址是基址寄存器(BX/BP)、变址寄存器(SI/DI)与一个8位或16位位移量之和: 有效地址=BX/BP+SI/DI+8/16位位移量 • 段地址对应BX基址寄存器默认是DS,对应BP基址寄存器默认是SS;可用段超越前缀改变 MOV AX, [BX+DI+6] ;AX←DS:[BX+DI+6] 演示 MOV AX, 6[BX+DI] MOV AX, 6[BX][DI]

  13. 各种寻址方式综合举例 • 设BX=1200H DI=10A0H 位移量=2BC0H DS=2400H 求各种寻址方式下的有效地址和物理地址。 ① 直接寻址 指令形式: MOV AX, [2BC0H] EA= 2BC0H 物理地址=24000H+2BC0H=26BC0H ② 基址寻址 指令形式: MOV AX, [BX] EA= 1200H 物理地址=24000H+1200H=25200H

  14. ③ 变址寻址 指令形式: MOV AX, [DI] EA= 10A0H 物理地址=24000H+10A0H=250A0H ④ 相对基址寻址 MOV AX, [BX+2BC0H] EA= 1200H+2BC0H=3DC0H 物理地址=24000H+3DC0H=27DC0H ⑤ 相对基址寻址 MOV AX, [DI+2BC0H] EA= 10A0H+2BC0H=3C60H 物理地址=24000H+3C60H=27C60H

  15. ⑥相对基址变址寻址 MOV AX, [BX+DI+2BC0H] EA= 1200H+10A0H+2BC0H=4E60H 物理地址=24000H+4E60H=28E60H

  16. 11 MOD REG REG R/M R/M 操作码 操作码 §2 8086的指令格式 一、指令格式 REG--寄存器 MOD--模式 R/M--寄存器或内存 单字节指令(隐含操作数) 操作码 单字节指令(寄存器模式) 操作码(R) 双字节指令(寄存器到寄存器模式) 不带位移量的寄存器和内存之间的传送

  17. MOD 11 MOD REG 操作码 操作码 R/M R/M R/M 操作码 位移低位 位移高位 操作码 数据低位 数据高位 操作码 位移低位 位移高位 数据低位 数据高位 REG--寄存器 MOD--模式 R/M--寄存器或内存 四字节指令 带位移量的寄存器和内存之间的传送(设位移量为16位) 立即数送寄存器(设立即数为16位) 六字节指令 立即数送内存(设位移量为16位)

  18. 在操作码中一般有3位 W、 D、 S • W=0 表示字节操作 W=1表示字操作 • D=0 REG是源操作数 D=1是目的操作数 • S是扩展位 (用于加、减和比较和W组合使用) • S=0 W=0 8位操作数 • S=0 W=1 16位操作数 • S=1 W=1 由8位扩展为16位操作数

  19. MOD REG R/M 寻址方式 计算存储器地址方法 寄存器名 • 单字节指令中可隐含指出寄存器名,此类指令少,但执行速度较快。 • 8086规定:双操作数指令中(除立即数和串操作指令),其中一个操作数必须在寄存器中,可缩短指令长度,另一个操作数可以在寄存器中也可以在内存单元中。 • 8086指令中第二个字节,给出两个操作数在什么地方,以及计算存储器地址的方法。

  20. MOD=11,表明第二个操作数也在寄存器中,则R/M指明其名称,与REG编码相同。MOD=11,表明第二个操作数也在寄存器中,则R/M指明其名称,与REG编码相同。

  21. MOD R/M

  22. 二、段寄存器的隐含访问 • 一般指令中不出现段寄存器名称,而用隐含关系指明。 • 如与隐含关系不同,运用前缀改变。 • ① [BX] 隐含于DS段 • ②[BP] 隐含于SS段 • ③ [SI]、[DI]单独使用隐含于DS段 • ④ 基址寄存器和变址寄存器同时出现,以基址寄存器隐含关系为准。

  23. [SP]隐含于SS段 • [SI]、[DI]用于串操作时,[SI]隐含于DS段, [DI]隐含于ES段。 • 使用前缀的形式 ADD AX, ES:[SI] 或 ES:ADD AX, [SI]

  24. 三、指令执行时间 • 一般用所需的时钟周期数表明 • 指令执行时间=基本执行时间+计算有效地址时间 • +为取操作数和存放结果而访问内存的时间

  25. §3 8086指令系统 • 8086指令系统很丰富,包含133条基本指令,功能强。 • 一般分为五类来介绍 • 传送指令 • 算术运算指令 • 逻辑运算和移位指令 • 串操作指令 • 控制转移指令

  26. 一、数据传送类指令 • 数据传送是计算机中最基本、最重要的一种操作,传送指令也是最常使用的一类指令 • 传送指令把数据从一个位置传送到另一个位置 • 除标志寄存器传送指令外,均不影响标志位 • 重点掌握 MOV XCHG PUSH POP XLAT LEA

  27. 1、通用数据传送指令 • 提供方便灵活的通用传送操作 • 有3条指令 MOV XCHG PUSH POP MOV XCHG PUSH

  28. ① 基本传送指令MOV(move) • 把一个字节或字的操作数从源地址传送至目的地址 MOV reg/mem,imm ;立即数送寄存器或主存 MOV reg/mem/seg,reg ;寄存器送(段)寄存器或主存 MOV reg/seg,mem ;主存送(段)寄存器 MOV reg/mem,seg ;段寄存器送寄存器或主存 演示

  29. 以字母开头的常数要有前导0 MOV指令举例--立即数传送 mov cl,4 ;cl←4,字节传送 mov dx,0ffh;dx←00ffh,字传送 mov si,200h;si←0200h,字传送 mov bvar,0ah;字节传送 ;假设bvar是一个字节变量,定义如下:bvar db 0 mov wvar,0bh;字传送 ;假设wvar是一个字变量,定义如下:wvar dw 0 • 明确指令是字节操作还是字操作

  30. MOV指令举例--寄存器传送 mov ah,al ;ah←al,字节传送 mov bvar,ch ;bvar←ch ,字节传送 mov ax,bx ;ax←bx,字传送 mov ds,ax ;ds←ax,字传送 mov [bx],al ;[bx]←al,字节传送 • 寄存器具有明确的字节和字类型

  31. MOV指令举例--存储器传送 mov al,[bx] ;al←ds:[bx] mov dx,[bp] ;dx←ss:[bp+0] mov dx,[bp+4] ;dx←ss:[bp+4] mov es,[si] ;es←ds:[si] • 不存在存储器向存储器的传送指令

  32. MOV指令举例--段寄存器传送 mov [si],ds mov ax,ds ;ax←ds mov es,ax ;es←ax←ds • 对段寄存器的操作不灵活

  33. 立即数 通用寄存器 AX BX CX DX BP SP SI DI 存 储 器 段寄存器 CS DS ES SS MOV指令传送功能图解 MOV指令也并非任意传送! • 非法指令的主要现象: • 两个操作数的类型不一致 • 无法确定是字节量还是字量操作 • 两个操作数都是存储器 • 段寄存器的操作有一些限制

  34. 非法指令--两个操作数类型不一致 • 在绝大多数双操作数指令中,目的操作数和源操作数必须具有一致的数据类型,或者同为字量,或者同为字节量,否则为非法指令 MOV AL, 050AH ;非法指令,修正: ;mov ax,050ah MOV SI, DL ;非法指令,修正: ;mov dh,0 ;mov si,dx

  35. 非法指令--无法确定是字节量还是字量操作 • 当无法通过任一个操作数确定是操作类型时,需要利用汇编语言的操作符显式指明 MOV [BX+SI], 255 ;非法指令,修正: ;mov byte ptr [bx+si],255 ;byte ptr 说明是字节操作 ;mov word ptr [bx+si],255 ;word ptr 说明是字操作

  36. 非法指令--两个操作数都是存储器 • 8088指令系统除串操作指令外,不允许两个操作数都是存储单元(存储器操作数) MOV buf2, buf1 ;非法指令,修正: ;假设buf2和buf1是两个字变量 ;mov ax,buf1 ;mov buf2,ax ;假设buf2和buf1是两个字节变量 ;mov al,buf1 ;mov buf2,al

  37. 非法指令--段寄存器的操作有一些限制 • 8088指令系统中,能直接对段寄存器操作的指令只有MOV等个别传送指令,并且不灵活 MOV DS, ES ;非法指令,修正: ;mov ax,es ;mov ds,ax MOV DS, 100H ;非法指令,修正: ;mov ax,100h ;mov ds,ax MOV CS, [SI] ;非法指令 ;指令存在,但不能执行

  38. ② 交换指令XCHG(exchange) • 把两个地方的数据进行互换 XCHG reg,reg/mem ;reg  reg/mem • 寄存器与寄存器之间对换数据 • 寄存器与存储器之间对换数据 • 不能在存储器与存储器之间对换数据 演示

  39. 数据交换指令举例 mov ax,1199h ;ax=1199h xchg ah,al;ax=9911h ;等同于 xchg al,ah mov wvar,5566h ;wvar是一个字量变量 xchg ax,wvar;ax=5566h,wvar=9911h ;等同于 xchg wvar,ax 注意:不能在两个内存单元之间交换 如:XCHG [BX],[SI] 错误! 段寄存器中CS、IP不能做操作数

  40. ③ 堆栈操作指令 • 堆栈是一个“后进先出LIFO”(或说“先进后出FILO”)的主存区域,位于堆栈段中;SS段寄存器记录其段地址 • 堆栈只有一个出口,即当前栈顶;用堆栈指针寄存器SP指定 • 堆栈只有两种基本操作:进栈和出栈,对应两条指令PUSH和POP • 堆栈由栈底向低地址方向生成 图示

  41. 进栈指令PUSH • 进栈指令先使堆栈指针SP减2,然后把一个字操作数存入堆栈顶部 PUSH r16/m16/seg ;SP←SP-2 ;SS:[SP]←r16/m16/seg 演示 push ax push [2000h]

  42. 出栈指令POP • 出栈指令把栈顶的一个字传送至指定的目的操作数,然后堆栈指针SP加2 POP r16/m16/seg ; r16/m16/seg←SS:[SP] ;SP←SP+2 演示 pop ax pop wvar

  43. 堆栈操作的特点 • 堆栈操作的单位是字,进栈和出栈只对字进行 • 数据从栈顶压入和弹出时,都是低地址送低字节,高地址送高字节 • 堆栈操作遵循先进后出原则,但可用存储器寻址方式随机存取堆栈中的数据 • 堆栈段是程序中不可或缺的一个内存区,常用来 • 临时存放数据 • 传递参数 • 保存和恢复寄存器

  44. 6FH SP 11FFEH A2H 11FFFH 栈底 SP 12000H • 应用举例: 设 SS=1000H SP=2000H AX=A26FH 执行 PUSH AX 指令的过程和结果 SP-2= 1FFEH 则AX内容压入内存 11FFEH和11FFFH 执行后SP=1FFEH (11FFEH)=6FH (11FFFH)=A2H

  45. 练习1:已知SS=1200H 执行 MOV AX, 3765H MOV BX, 4288H MOV SP, 1020H PUSH AX PUSH BX POP CX 执行后 AX=( ) BX=( ) CX=( ) SP=( ) 3765H,4288H,4288H,101EH

  46. 2、累加器专用传送指令 ① 输入输出指令(IN/OUT指令) 格式:IN AL,port;port为直接端口地址 IN AL,DX ;DX的内容为端口地址(间接方式) IN AX,port; IN AX, DX OUT port, AL OUT DX, AL OUT port, AX OUT DX, AX

  47. 注意:①只能用累加寄存器不能用其它寄存器 ②当端口地址在00H—FFH之间可以用直接地址 当端口地址大于FFH时必须用DX间址形式 例:IN AL,40H; (40H) AL IN AX,80H; (80H)、(81H) AX MOV DX, 0382H IN AL,DX ; (0382H) AL OUT 62H, AL MOV DX, 0380H OUT DX,AX

  48. ②换码指令XLAT(查表指令) • 将BX指定的缓冲区中、AL指定的位移处的一个字节数据取出赋给AL XLAT;al←ds:[bx+al] 演示 • 换码指令执行前: • 在主存建立一个字节量表格,内含要转换成的目的代码 • 表格首地址存放于BX,AL存放相对表格首地址的位移量 • 换码指令执行后: • 将AL寄存器的内容转换为目标代码

  49. ③址传送指令 三条LEA 、LDS、LES • 将存储器操作数的有效地址送至指定的16位通用寄存器 LEA r16, mem ;r16←mem的有效地址EA 例1: 有效地址的获取 LEA AX, [2375H] ; AX=2375H LEA SP, [BX+SI] ; SP=(BX)+(SI) 区别: LEA SI, BUFF; SI=BUFF MOV SI,BUFF; SI=(BUFF)

More Related