1 / 115

微机原理

微机原理. 第三章 80 X86 指令系统. 概述(1). 指令系统是一台计算机所能识别和执行的全部指令的集合。 指令一般包括两个部分: 操作码域 和 地址域 。 操作码域存放指令的操作码,即指明该指令应由计算机完成何种操作。 地址域确定操作数的值或地址、操作结果的地址,有的指令的地址域还指出下一条指令的地址。. 概述(2). 1、机器指令:计算机能识别的代码,机器指令是由二进制数组成的。 例如 ADD CL,BH 机器指令为0000001011001111 B PUSH AX 机器指令为01010000

Télécharger la présentation

微机原理

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. 微机原理 第三章 80X86指令系统

  2. 概述(1) • 指令系统是一台计算机所能识别和执行的全部指令的集合。 • 指令一般包括两个部分:操作码域和地址域。 • 操作码域存放指令的操作码,即指明该指令应由计算机完成何种操作。 • 地址域确定操作数的值或地址、操作结果的地址,有的指令的地址域还指出下一条指令的地址。

  3. 概述(2) 1、机器指令:计算机能识别的代码,机器指令是由二进制数组成的。 例如ADD CL,BH 机器指令为0000001011001111B PUSH AX 机器指令为01010000 2、汇编语言:汇编语言是一种符号语言,用助记符表示操作码,用符号或符号地址表示操作数或操作数地址,它与机器指令是一一对应的。 3、汇编程序:MASM.EXE将汇编语言源程序翻译成机器语言,即目标程序。

  4. 第一节 寻址方式 • 根据指令内容确定操作数地址的过程,称为寻址。 • 根据寻址方式计算所得到的地址叫做有效地址EA,也就是段内偏移地址。有效地址还需要与相应的段基地址组合才是20位的物理地址PA ,该工作由CPU完成。 • 寻址方式在两种方式下被涉及:操作数的寻址方式和指令的寻址方式。

  5. 一、程序存储器寻址 • CS和IP寄存器用来保存段地址和偏移量,指出处理器要执行的下一条指令地址。CALL和JMP指令能够以下列3种方式改变CS和IP的值。 • 1、相对寻址:提供一个8位或16位的立即数与IP寄存器的值相加,结果作为IP寄存器的新值。此时CS值不变,称为段内操作。 • 2、直接寻址:指令提供16位立即数做为CS或IP寄存器的新值。此时可能改变CS,所以称为段间操作。 • 3、间接寻址:指令提供一16位的存储器地址,由该存储器单元的值改变IP或CS的值。若只改变IP,则是段内操作;若改变IP和CS,则是段间操作。

  6. 二、数据存储器寻址 • 1、立即寻址 操作数直接放在指令中。不 需要访问存储器。 例3.1 MOV AL,34H MOV AX,1234H 需要注意在16位操作时,两个字节数据的高低位存储 位置。立即数只能是源操作数。

  7. 2、寄存器寻址 • 操作数就放在CPU的内部寄存器中,AX、BX、CX、DX、DI、SI、SP和BP,不需要访问存储器。 例3.2:INC CX MOV AX,BX 若执行前(AX)=30A6H, (BX)=69EDH,(CX)=40D9H 则执行后, (AX)=69EDH,BX内容 不变。(CX)=40DAH

  8. 3、存储器寻址 • 操作数放在存储器中,执行部件EU计算出存储器操作数的偏移量,即有效地址EA。这是一个无符号数,由总线接口部件BIU的地址加法器计算出物理地址,然后执行存取该操作数所需的总线周期。 • 有效地址有4种成分: (1)位移量 (2)基址 (3)变址 (4)比例因子(386以上机器有,8086为1) EA=基址+(变址×比例因子)+位移量

  9. 对8086,EA=基址+变址+位移量 (1)直接寻址 有效地址由指令直接给出,有效地址只包含位移量。 MOV AL,[1234H] 默认的段寄存器是DS,也可以在指令中使用段超越前缀来指定段寄存器。 例3.3:MOV AL,ES:[1234H] 有效地址EA=1234H,在指令中直接给 出。 物理地址PA=(ES)×10H+1234H

  10. 例3.5 MOV AX,[2000H] 若(DS)=3000H,则执行情况如图3.3。 直接寻址也可用符号地址。 例3.4:MOV AX,VALUE 这里,VALUE就是存放操作数单元的符号地址。 AX=3050H

  11. 该指令也可写为 MOV AX,[VALUE] (2)寄存器间接寻址和寄存器相对间接寻址 操作数的地址在对应的寄存器中称为寄存器间接寻址; 若还有位移量(disp)则称为寄存器相对间接寻址。 EA取自基址寄存器BX,BP或变址寄存器SI,DI 中的一个,操作数在有效地址对应的存储单元中。 即EA=(BX、BP、SI、DI之一)+disp 例3.7 MOV AX,[BX] 若(DS)=2000H,(BX)=1000H 则EA=(BX)=1000H 物理地址PA=20000H+1000H=21000H, 执行情况如图3.4。(AX)=(21000H)=50A0H

  12. 例3.5A:INC BYTE PTR[BX] 对应BX、SI、DI隐含的段寄存器是DS 对应BP隐含的段寄存器是SS EA=(BX) PA=(DS) ×10H+(BX) 若是寄存器相对间接寻址,则要加上位移量。 例3.6:INC BYTE PTR[BX+disp] EA=(BX)+disp PA=(DS)×10H+(BX)+disp

  13. 例3.9 MOV AX,COUNT[SI] 若COUNT=3000H,(DS)=3000H (SI)=2000H,则物理地址=35000H,指令执行如图3.5所示,指令执行后(AX)=1234H EA=3000H+2000H =5000H PA=30000H+5000H =35000H AX=1234H

  14. (3)基址寻址和基址相对寻址 操作数的地址在基址寄存器BX,BP中称为基址寻址;若还有位移量,则称为基址相对寻址 位移量可以是8位或16位。 例3.7A:MOV AX,[BX+disp] 使用BX,默认段寄存器是DS,而BP则默认的段寄存器为SS。 EA=(BX)或(BP)+disp PA=(DS)或(SS) ×10H+ disp

  15. 例3.8:MOV AX,COUNT[BX] 若(DS)=3000H,(BX)=2000H COUNT=3000H,(35000H)=1234H 则EA=2000H+3000H=5000H PA=30000H+5000H=35000H 执行该指令后, (AX)=1234H

  16. (4)变址寻址和变址相对寻址 操作数的地址在变址寄存器SI、DI中称为变址寻址;若还有位移量,则称为变址相对寻址。 EA=(SI)或(DI)+disp 例3.9A: MOV AH,[SI+disp] (5)基址变址寻址和基址变址相对寻址 EA=BX或BP中的基址地址+SI、DI中的变址地址+disp;实际上这种寻址为(3)、(4)两种寻址的组合。 例3.10A: MOV AX,[BP+DI] ;此时隐含的段寄存器为SS,若用BX,则隐含的段寄存器为DS EA=(BX或BP)+(SI或DI)+disp PA=(DS)×10H+(BX)+(SI或DI)+disp PA=(SS)×10H+(BP)+(SI或DI)+disp

  17. 例3.10 MOV AX,[BX][DI] 若(DS)=2100H,(BX)=0158H (DI)=10A5H 则EA=0158H+10A5H=11FDH PA=EA+21000H=221FDH 指令执行情况如图 3. 6所示。 指令执行后, (AX)=1234H

  18. 例3.11:MOV AX,[MASK+BX+SI] 若(DS)=3000H,(BX)=2000H (SI)=1000H,MASK=0250H (33250H)=34H,(33251H)=12H 则 EA= 2000H+1000H+0250H=3250H PA=30000H+ 2000H+1000H+ 0250H=33250H 指令执行如图3.7 所示。 执行该指令后 (AX)=1234H

  19. 4、I/O端口寻址 8086采用输入/输出端口与存储器独立编址的方式。访问I/O端口需要专门指令IN和OUT。 (1)直接寻址 在指令直接给出I/O端口地址,此地址应在0-255(0-FFH)之间 IN AL,20H;从端口地址20H读入一个字节 (2)间接寻址,寄存器只能用DX 由DX给出I/O端口地址,此方式适用端口地址为0-65535(0-FFFFH)之间的任意值。 OUT DX,AL

  20. 以下三种是386以上机器有的寻址方式: 5、比例变址寻址方式 有效地址是变址寄存器内容乘以指令中指定的比例因 子,再加上位移量之和。 例3.12 MOV EAX,COUNT[ESI*4] 6、基址比例变址寻址方式 操作数有效地址是变址寄存器内容乘以指令中指定的比例因子,再加上基址寄存器的内容之和 例3.13 MOV EAX, [EBX][EDI*4] MOV ECX, [EAX][EDX*8] 7、相对基址比例变址寻址方式 有效地址是4种成分之和。 例3.14 MOV EAX ,TABLE[EBP][EDI*4]

  21. 三、寻址方式的书写格式 • 1、在方括号内部允许有一个或两个寄存器的名字,如果一对方括号内部有基址寄存器和变址寄存器,使用“+”作为连接。 • 2、在方括号内部允许有位移量,使用+或—号作为连接符号。 • 3、在方括号外部允许有位移量,可以在左边或右边。 MOV AX,[BX+SI+6] MOV AX,[BX+SI]6 MOV AX,6[BX+SI] MOV AX,[BX][SI]6 MOV AX,[BX+6][SI]

  22. 8086数据存储器寻址方式小结: 1、立即寻址,操作数直接放在指令中。 2、寄存器寻址(8个通用寄存器) 3、直接寻址,有效地址由指令直接给出, 即有效地址只包含位移量。 4、寄存器间接寻址和寄存器相对间接寻址 (4个寄存器,BX、BP、SI、DI,位移量) 5、基址寻址和基址相对寻址(BX、BP,位移量) 6、变址寻址和变址相对寻址(SI、DI,位移量) 7、基址变址寻址和基址变址相对寻址 (BX、BP,SI、DI,位移量) 其中1、2两种不用访问存储器。

  23. 四、与转移指令有关的寻址方式 (1)段内直接寻址 不改变CS,在IP上加一个位移量,则 EA=(IP)+disp 例如: JMP NEAR PTR PROGIA ;段内近转移 JMP SHORT QUEST ;段内短转移 JMP 25H ;段内短转移 JMP 1025H ;段内近转移 其中PROGIA 和QUEST是转向的符号地址,在机器指令中,用位移量来表示。 (2)段内间接寻址 转向的有效地址是一个寄存器或一个存储单元的

  24. 内容。这个寄存器或存储单元的内容可用除立 即数寻址以外的任何一种寻址方式得到。转向 的有效地址用来取代IP。这时CS值不变。 例3.15:JMP BX;段内间接转移(IP)=(BX) JMP WORD PTR[BX+TABLE] 若(BX)=1256H,(DS)=2000H TABLE=20A1H,(232F7H)=3280H 则执行JMP BX后,(IP)=EA=1256H 执行JMP WORD PTR[BX+TABLE]后, EA=(BX)+disp=1256H+20A1H=32F7H (IP)=(PA)=(20000H+32F7H) =(232F7H)=3280H

  25. 3、段间直接寻址 指令中提供了转向的段地址和偏移地址,所以用段地址取 代CS,用偏移地址取代IP。 例3.16:JMP 3500H:080BH;段间直接转移 (CS)=3500H,(IP)=080BH 例3.17:JMP FAR PTR NEXT_PROG 其中NEXT_PROG是转向的符号地址;FAR PTR为段间转移 的操作符。 执行该指令后, NEXT_PROG所在段的段地址送CS, NEXT_PROG在该段内的偏移量送IP。 例3.18:C1 SEGMENT … JMP FAR PTR NEXT_PROG … C1 ENDS

  26. C2 SEGMENT … NEXT_PROG : … … C2 ENDS 执行JMP FAR PTR NEXT_PROG 后,C2段的段地址送CS,在C2段内 NEXT_PROG的偏移量送IP。 4、段间间接寻址 用存储器中两个相继字的内容来取代IP和CS,达到段间转移 的目的。低地址中内容送IP,高地址中内容送CS。 例3.18:JMP DWORD PTR [INTERS+BX] 其中[INTERS+BX]说明寻址方式为基址相对寻址方式; DWORD PTR 是双字操作符。

  27. 例3.19:JMP DWORD PTR[BX+DI+ALPHA] 这是基址变址相对寻址。 EA=(BX)+(DI)+ALPHA PA=(DS)×10H+EA (IP)=(PA) ;低地址内容送IP (CS)=(PA+2);高地址内容送CS 转移的物理地址是: PA=(CS) ×10H+(IP) 段间间接转移,目标地址存放在PA开始的4个连续 单元中,其中低地址两个单元放IP内容,高地址两个 单元放CS内容。 与转移地址有关的寻址方式如图3.9所示。

  28. 第二节 指令编码格式 一、概述 机器指令:计算机能识别和执行的指令的 二进制代码。如:1011000001100010 汇编指令:用助记符表示机器指令的操作 码和操作数,例如上面指令的汇编指令是 MOV AL,62H

  29. 二、指令编码 1、编码格式 8086的机器指令长度为1-6字节。

  30. 2、指令前缀 • 前缀是一条指令,当它执行时,并不导致处理器产生一个立即的动作,而只是指示处理器改变其后面指令的执行。 • 前缀一字节长,一条指令可有多个前缀。 1)重复前缀:REPcond(重复条件)与串指令结合使用,说明重复执行次数。 2)锁定前缀:LOCK在多处理器时使用。

  31. 3、段超越前缀 所有访问内存的指令都有一个隐含的段寄存器 来计算物理地址,段超越前缀可以改变默认的段 寄存器。 例3.20:MOV AX,ES:[13AAH];将ES段的 13AAH和13ABH两个单元的内容装入到AX。 4、操作码 操作码用来指示该指令的操作,一般一字节。如 PUSH AX 01010 000 此外,还有5个标志位:D,W,S,V,Z,见表3-3

  32. 5、寻址方式编码 • 寻址方式字节中存放关于操作数类型和操作数寻址的信息。如前图分为3个域。 1)mod域:即方式域,决定如何解释r/m域和位移量域。见表3-4 2)reg域:寄存器域,指定一个寄存器操作数,也可作为额外的操作码位。见表3-5 3)r/m域:当mod=11时,本域指示一个寄存器操作数,当mod≠11时,本域指出存储器操作数的有效地址计算方法。见表3-6

  33. 6、位移量 指令编码中的位移量部分给出一个8位或16位的数用来进行有效地址计算。 16位位移量是低字节在前,高字节在后。 7、立即数 指令编码中的立即数部分给出一个8位或16位的立即数。 注意:16位数是低字节在前,高字节在后。

  34. 三、指令编码举例 例1:MOV [BX+DI-6],CL 机器码: 10001000, 01001001,11111010 =88H,49H,FAH 例2:ADD AX,BX 机器码:00 00 00 1 1 1100 00 11 操作码 D W 寻址 AX BX =03H,C3H

  35. 第三节 指令执行时间 一、概述 一条指令的完整执行包括取指令,计算操作数地址,取操作数,执行指令,存放操作结果等步骤,各步所需时间的总和就是指令执行时间。 二、有效地址计算 存取操作数前,需计算出有效地址EA,它需要的时钟周期根据寻址方式不同而不同。 参见表3-7。

  36. 三、指令执行时间计算 假定指令已预取在指令队列中,因而取指令时间不考虑。 指令执行时间=计算有效地址时间+基本执行时间+访问内存时间

  37. 第四节 8086汇编指令系统 8086汇编指令系统包括100多条指令,分为6大类: 数据传送指令 14 算术运算指令 20 逻辑运算和移位指令 13 串操作指令 13 转移指令 28 处理器控制指令 12

  38. 一、数据传送指令 共14条,分为4组

  39. 1 、通用传送指令(1) MOV 目的,源 • ① 源和目的操作数不能都是存储器操作数 • ② 目的操作数不能是立即数,也不能是CS寄存器 • ③ 不允许两个段寄存器之间传送数据 • ④ 立即数不能直接送段寄存器 • ⑤ 不影响标志位 功能: (源) (目的) 例1:MOV AX,10ACH;10ACH (AX)

  40. MOV WORD PTR[BX+2000H],12ABH BX=1200H,CS=1800H,IP=0500H,DS=3000H

  41. 以下两条指令只有386以上机器有: MOVSX 目的,源 带符号扩展传送指令。 例2 MOVSX EAX,CL 例3 MOVSX EDX,[EDI] MOVZX 目的,源 带零扩展传送指令 例4 MOVZX DX, AL 例5 MOVZX EAX,DATA

  42. (2) PUSH 源 ;压栈 (SP)-2 (SP),(源) ((SP+1),(SP)) (3) POP 目的 ;出栈 ((SP+1),(SP)) (目的),(SP+2) (SP) ① 以上2条指令只能对字操作 ② 不能POP CS 下面举例:

  43. 例6 PUSH BX CS=1000H,IP=0030H,SS=2000H, SP=0040H,BX=2340H

  44. 以下4条指令只有386以上机器有: (4) PUSHA/PUSHAD PUSHA ;16位通用寄存器依次进栈 执行操作:(SP)-16 (SP) PUSHAD ;32位通用寄存器依次进栈 执行后(ESP)-32 (ESP) (5) POPA/POPAD POPA ;16位通用寄存器依次出栈 执行后(SP)+16 (SP) POPAD ;32位通用寄存器依次出栈 执行后(ESP)+32 (ESP)

  45. (6) XCHG 目的,源 该指令将源和目的的值互换 • ① 两个操作数必须有一个在寄存器中,可以是字节或字 • ②可以在寄存器之间或寄存器和存储器之间交换数据 • ③ 不允许使用段寄存器 例7:XCHG BX,[BP+SI] 若(BX)=6F30H,(BP)=0200H,(SI)=0046H (SS)=2F00H,(2F246H)=4154H 源操作数的物理地址=2F000H+0200H+0046H=2F246H 执行该指令后: (BX)=4154H,(2F246H)=6F30H

  46. 2、累加器专用传送指令(1) XLAT ;换码指令 把一种编码表示转换为另一种编码表示。XLAT指令在使用前 需将编码表的首地址装入BX,将表的一个索引值装入AL,索引 值为0-255。 例8:设(DS)=A000H A000:0010 30H (BX)=0010H 31H 表的起始地址为A0010H,表中放 数字0-9的ASCII码 MOV BX,0010H MOV AL,06H XLAT A000:0016 36H 执行该程序后,(AL)=36H

  47. (2) IN 累加器,端口地址 (3) OUT 端口地址,累加器 • 以上指令的累加器可为AL或AX • 当端口地址在0-255之间时可用立 即寻址方式,否则需将端口地址先放入 DX中,然后使用间接寻址方式。 例9: IN AL,20H MOV DX,0AB4H;注意字母不能是开头 OUT DX,AL

  48. 3、地址传送指令(1) LEA 目的,源 • 用来把源操作数的偏移地址传送给目的操作数。LEA指令中目的操作数必须是16位的通用寄存器。 例10:LEA BX,[BX+DI+6] 指令执行前若(BX)=1000H,(DI)=0200H 则指令执行后,(BX)=1206H (2) LDS 目的,源 • 将源操作数指定的存储器中4个连续字节传送给目的操作数和DS。传送时低2字节装入目的操作数,高2字节装入DS。 (3) LES 目的,源 • 与LDS相似,只是高字节装入ES。

  49. 例11:LDS SI,[DI+100AH] 若CS=1000H,IP=0640H,DS=2000H,DI=2400H 执行完后: DS=2230H SI =0180H

More Related