1 / 92

第三章 微型计算机的指令系统 § 1 指令的构成和操作数的类型 一、指令构成 一条指令由操怍码字段和操作数字段构成。 1 、操作码字段

第三章 微型计算机的指令系统 § 1 指令的构成和操作数的类型 一、指令构成 一条指令由操怍码字段和操作数字段构成。 1 、操作码字段 操作码字段表明指令执行何种性质的操作。 2 、操作数字段 操作数字段是指明指令执行的操作所需要的操作数 . 该字段中,可以是操作数本身或是操作数地址。. 二、操作数类型 操作数有以下三种类型:立即数操作数、寄存器操 作数和存储器操作数。 1 、立即数操作数

rosa
Download Presentation

第三章 微型计算机的指令系统 § 1 指令的构成和操作数的类型 一、指令构成 一条指令由操怍码字段和操作数字段构成。 1 、操作码字段

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. 第三章 微型计算机的指令系统 §1 指令的构成和操作数的类型 一、指令构成 一条指令由操怍码字段和操作数字段构成。 1、操作码字段 操作码字段表明指令执行何种性质的操作。 2、操作数字段 操作数字段是指明指令执行的操作所需要的操作数. 该字段中,可以是操作数本身或是操作数地址。

  2. 二、操作数类型 操作数有以下三种类型:立即数操作数、寄存器操 作数和存储器操作数。 1、立即数操作数 立即数只能作为源操作数,而不能作为目标操作 数。立即数可以是8位和16位带符号数或者无符号 数,并只能是整数,不能是小数。 2、寄存器操作数 寄存器操作数可以存放于CPU内部寄存器中,即通 用寄存器、地址指针寄存器、变址寄存器、段寄存 器。所有的通用寄存器和地址指针寄存器既可以用 作源操作数,又可以用作目标操作数。 3、存储器操作数 存储器操作数的数据可能是8位、16位和32位的二进 制数。在指令中,存储器操作数可以分别作为源操 作数和目标操作数,但是不允许二者同时都为存储 器操作数。

  3. §2 8086的寻址方式 一、立即寻址 操作数包含在指令中,此操作数又称为立即数,(立 即数只能作源操作数)立即数可为8位,也可为16 位,它用来给寄存器存贮器赋初值。 二、寄存器寻址 操作数在某一寄存器中。一条指令中,可以对源 操作数采用寄存器寻址,也可对目的操作数采用 寄存器寻址,还可两者都用寄存器寻址。 寄存器可为:AX,BX,CX,DX,SI,DI,SP,BP AH,AL,BH,BL,CH,CL,DH,DL。

  4. 三、直接寻址 操作数的地址包含在指令中。 (注意:此地址为16位偏移地址) 通常操作数一般在数据段区域中,如果要对其他段 寄存器所指出的存贮区进行寻址(所谓段超越), 则在本条指令中,须用前缀指出段寄存器名。

  5. 四、寄存器间接寻址 操作数的地址在某寄存器中, 这些寄存器可以为:BX,BP,SI,DI之一。 有效地址: EA=[BX或BP或SI或DI] 注:如果指令前没有用前缀指明具体的段寄存器,则 寻址时默认为DS/SS。 采用寄存器间址允许在指令中指定一个位移量(8位 或16位)。其有效地址EA为寄存器内容加上此位移 量。(称寄存器相对寻址) 有效地址: EA=[( BX或BP或SI或DI )+位移量(带符号数)]

  6. 1、数据段基址寻址 用BX寄存器进行间接寻址 。 2、堆栈段基址寻址 用BP寄存器进行间接寻址。 3、变址寻址 用SI,DI寄存器进行间接寻址。 4、基址加变址寻址 用BX、BP和SI、DI寄存器组合起来进行间接寻址。 有效地址EA=[(BX或BP)+(SI或DI)] 注:只要用上BP寄存器,那么默认的段寄存器就是SS, 在其他情况,则为DS。否则应用前缀指出相应段 寄存器名。

  7. 附:几种常见的书写形式 MOV AX,VALUE → MOV AX,[VALUE] (VALUE为符号地址) MOV AX,ES:VALUE → MOV AX,ES:[VALUE] MOV AX,COUNT[SI]→ MOV AX,[COUNT+SI] (COUNT为位移量的符号地址) MOV AX,[BX][DI] → MOV AX,[BX+DI] MOV AX,MASK[BX][SI] → MOV AX,MASK[BX+SI] → MOV AX,[MASK+BX+SI]

  8. 5、例1:DS=2000H, ES=2100H, SS=1500H, SI=00A0H, BX=0100H, BP=0010H, VAL=0050H, 请指出下列的源操作数字段是什么寻址方式? 它的物理地址是多少? A、MOV AX,OABH B、MOV AX,BX C、MOV AX,[VAL+100H] D、MOV AX,[BX] E、MOV AX,ES:[BX] F、MOV AX,[BP] G、MOV AX,[SI] H、MOV AX,[VAL+BX+SI]

  9. 例2:根据以下要求写出相应的汇编语言指令 A、把数OB5H与(AL)相加,结果送回AL中。 B、把BX和DX内容相加,结果存入DX中。 C、用位移量0524H的直接寻址方式把存贮器中一个字 与数2A59相加,结果送回存贮单元中。 D、用BX和SI的基址变址寻址方式,把存贮器中一个字 节与AL 内容相加,结果存入AL中。 E、用BX和位移量OB2H 的寄存器相对寻址方式把存贮 器中一个字和CX相加,结果存入内存单元中。

  10. §3 8086/8088CPU 指令系统 一、数据传送指令 1、通用数据传送指令 <1> MOV传送指令 格式: MOV DST, SRC DST:目的操作 操作: DST SRC SRC:源操 A、立即数到寄存器存贮器 reg , data 注:不包括段寄 mem , data

  11. B、从寄存器到寄存器 reg , reg 从存贮器到寄存器 mem , reg 从寄存器到存贮器 reg , mem 注:不包括段寄

  12. C、从存贮器/寄存器到段寄存器 (mem/reg,segreg) 注:不能往CS中传送数据. D、从段寄存器到存贮器/寄存器 (segreg,mem/reg)

  13. 注:1,不影响标志 2,不允许两操作数都使用存储器 3,不允许往CS中送数 4,8位传送/16位传送决定于指令中寄存器及立 即数形式 5,凡给SS赋值时,系统会自动禁止中断,等下 条指令执行完后才会恢复 E、例:一批数的传送

  14. <2> PUSH进栈与POP出栈指令 A、堆栈 堆栈是以“后进先出”方式工作的一个存贮区。它存 在于堆栈段中.堆栈在计算机工作中起着重要作用, 它在子程序结构的程序以及中断程序中是不可少 的。堆栈指针寄存器SP用来指示堆栈在那里。它始 终指向当前堆栈的栈顶。 注:在8086中堆栈的存取是以字为单位进行的 B、PUSH/POP指令格式与操作 格式:PUSH SRC 操作:1,SP-1 SP 2,高字节 (SP) 3,SP-1 SP 4,低字节 (SP) 格式:POP DST 操作:1,低字节 弹出 2,SP+1 SP 3,高字节 弹出 4,SP+1 SP

  15. C、注:PUSH/POP指令可使用除立即数以外的所有寻址 方式。指令也可以指定段寄为操作数,但POP指 令不允许用CS寄存器。 所有标志不受影响。 D、例1:两寄存器内容交换 分析下面程序段: 设SP=2000H,SS=1000H ST:PUSH BX PUSH CX POP BX POP CX

  16. 例2 :设BX=2A0CH, CX=A530H, SS=2000H 程序执行后, BX= AX= CX= SP= ST:MOV SP, 1000H PUSH BX PUSH CX MOV AX, 62CEH ADD AX, SP POP BX HLT 例3 :分析下面程序: ST:MOV CX,5 POP CX L1:PUSH CX DEC CX MOV CX,10 JNZ L1 L2:DEC CX HLT JNZ L2

  17. <3> XCHG指令(交换) A、XCHG指令格式与操作 XCHG OPR1, OPR2 OPR1←→OPR2 B、XCHG指令可以在寄存器之间或寄存器与存贮器之 间交换信息。 C、例 注:不允许使用段寄。 该指令不影响标志位。

  18. 2、累加器专用传送指令 <1> IN/OUT输入输出指令 A、指令的格式与操作 长格式:IN AL, PORT AL ←(PORT) IN AX, PORT AX ← (PORT+1,PORT) OUT PORT,AL (PORT)← AL OUT PORT,AX (PORT+1,PORT)← AX 短格式:IN AL,DX AL ← (DX) IN AX,DX AX ←(DX+1,DX) OUT DX,AL (DX)← AL OUT DX,AX (DX+1,DX)←AX 注:I/O指令中只能用AX/AL与DX和8位的端口地址。

  19. B、 用长格式时可以在指令中直接指定端口号,但只限 于外设的前256个端口,当端口号≥256时,只能使 用短格式,(间接),必须注意端口号即为外设地 址,它与段寄无关。I/O指令不影响标志位。 C、 例1: D、 例2: OUT DX, AL

  20. <2> XLAT换码指令 A、指令格式与操作 XLAT OPR 或 XLAT AL ←[ BX + AL ] B、注:使用XLAT指令,应先建立一个表格。 表格首址存入BX中,需转换的代码应是相对于 表格首址的位移量(即项号)也提前放入AL 中。 表格的内容(即项值)则是所要换取的代码 它将存入AL中。 指令格式中的OPR为表格首址(符号地址)。 所有标志不受影响。

  21. C、例 设:BX=0040H, AL=02H, DS=F000H 项号 项值 表格: 0 (F0040H)=11H (0040H为表格首址) 1 (F0041H)=22H 2 (F0042H)=33H 3 (F0043H)=44H 4 (F0044H)=55H 5 (F0045H)=66H 则:执行XLAT后, AL=

  22. 3、地址传送指令 A、指令格式与操作 偏移地址送寄存器 LEA REG REG SRC 把源操作数的偏移地址送寄存器。 指针送寄存器和DS LDS REG,SRC REG (SRC) DS (SRC+2) 把源操作数提供的32位数送寄存器与段寄DS 指针送寄存器和ES LES REG,SRC REG (SRC) ES (SRC+2) 把源操作数提供的32位数送寄存器与段寄ES 注:所有标志不受影响 REG必须为16位通用寄存器SRC为内存单元地址。

  23. B、例 LEA BX,[BX+SI] 执行前:BX=0400H SI=003CH 执行后:BX= LDS SI,[10H] 执行前:DS=C000H, (C0010H)=0180H (0012H)=2000H 执行后:SI= DS= LES DI,[BX] 执行前:DS=B000H, BX=080AH (B080AH)=05AEH, (B080CH)=4000H 执行后:DI= ES=

  24. 4、标志寄存器传送指令 标志送AH: LAHF AH← PSW的低字节 AH送标寄: SAHF PSW的低字节← AH 标志进栈: PUSHF SP←SP-2; (SP+1,SP)← PSW 标志出栈: POPF PSW←(SP+1,SP) SP← SP+2 PSW 15 8 7 0 AH

  25. 三、算术运算指令 1、加法指令 加: ADD DST,SRC DST←SRC+DST reg,reg; reg,mem; mem,reg reg,data; mem,data; ac,data 带进位加:ADC DST,SRC (DST)← (SRC)+(DST)+CF reg,reg; reg,mem; mem,reg reg,data; mem,data; ac,data 加1: INC OPR (OPR)←─ (OPR)+1 (reg;mem) 注:INC指令不影响CF标志

  26. 2、减法指令 减: SUB DST,SRC DST←DST-SRC 带借位减:SBB DST,SRC OST←DST-SRC-CF 减1: DEC OPR OPR←OPR-1 求补: NEG OPR OPR←0-DPR 比较: CMP OPR1,OPR2 OPR1 - OPR2 注:CMP指令执行减操作,但它不保存结果,只是 根据操作结果设置条件标志位。CMP指令后 往往跟着一条条件快移指令,实现程序分支。 DEC指令不影响CF标志。

  27. 3、乘法指令 格式:无符号数乘 MUL SRC (reg/mem) 带符号数乘 IMVL SRC 操作:字节操作 AL*(SRC) AX 字操作 AX*(SRC) DX,AX 注:执行前,必须将被乘数送入AX/AL中。 MUL:当积的高位为0,则CF=0,OF=0 否则均为1。 IMVL:当积的高一半是低一半的符号扩展则 CF=OF=0,否则为1。 例:设 AL=04H BH=02H AH=E5H 则 执行 MUL BH 后 AX=

  28. 4、除法指令 格式:无符号数除 DIV SRC (reg/mem) 带符号数除 IDIV SRC 操作:字节操作: AX÷(SRC)→商AL,余AH 字操作: DX,AX÷(SRC)→商AX,余DX 注:IDIV、DIV执行前,必须将被除数送入指定寄存器 AX,DX中。 用除法指令时,必须注意它要求商为8位(字节)/ 16位(字),如果被除数的高8位(字节)或16位 (字)大于除数的绝对值,商就会产生溢出,此时 会作除数为0的情况来处理。 例:设 AX=0009H BH=02H 则 执行 DIV BH 后 AL= AH=

  29. D、字节转换为字指令: 格式:CBW操作:AL的内容符号扩展到AH。 字转换为双字指令: 格式:CWD操作:AX的内容符号扩展到DX。 注:CBW,CWD指令不影响条件码。 例:设有两个16位数存于AX,BX中,求Z=AX/BX 5、十进制调整指令 A、压缩的BCD码:用4位2进制表示一个十进制数位。 如502D─→0101,0000,0010B 非压缩的BCD码:以8位为一组表示一个十进制数 位,其中低4位为BCD码,高4位没 有意义 如: 502D─→00110101,00110000,0011,0010B。 注: ASCII码是一种非压缩的BCD码。

  30. B、压缩的BCD码调正指令 DAA: 条件:用ADD或ADC将两个压缩BCD码 相加,和存于AL中。 操作:将和AL调正到压缩的BCD格式存入 AL中。 DAS: 条件:用SUB或SBB将两个压缩BCD码 相减,差存于AL中。 操作:将AL中的差调正到压缩的BCD格 式存入AL中。 注:DAA/DAS对OF标志无定义对其他标志有影响。

  31. 例1: 设: AL=28H, BL=68H 执行: ADD AL,BL DAA 指令后: AL= CF= AF= 例2: 设: AL=86H, BL=07H 执行: SUB AL,BL DAS 指令后: AL= CF= AF=

  32. C、非压缩的BCD码调整指令 AAA:加法的ASCII调正指令 条件:用ADD/ADC将2个非压缩BCD码相加, 和存于AL中。 操作:将AL中和调正到非压缩的BCD格式。将 调正产生的进位值加到AH中。 AAS:减法的ASCII调正指令 条件:用SUB/SBB将2个非压缩BCD码相减, 差存于AL中。 操作:将AL中差调正到非压缩BCD格式,其调 正产生的借位从AH中减去。

  33. AAM:乘法的ASCII调正指令。(对结果调正) 条件: 用MUL将2个非压缩BCD码相乘(要求高4 位为0), 结果存于AL中。 操作: 将AL内容除以OAH,其商存于AH中,余 数存于AL中。 AAD:除法的ASCII调整指令(对被除数必须进行调整) 操作:AH*10+AL→AL;0→AH 将AX中的被除数(非压缩BCD码,高4位为0)调 整成二进制数 例:a、设: AX=0505H , BL=09H 执行: ADD AL,BL AAA 后:AX= b、设: AL=07H, BL=09H 执行: MUL AL,BL AAM 后:AH= AL= c、设: AX=0604H 执行: AAD 后:AX=

  34. 6、编程举例: A、试编一程序计算一批数中,0的个数。

  35. B、设有100个无符号字节数存于以TAB为首址的单元 中,试将其最大值存于AL中.最小值存于BL中。

  36. C、 试分析下面程序功能:ST: LEA SI,DATA1 LEA DI,DATA2 MOV CX,5 CLC L1: MOV AL,[SI] MOV BL,[DI] ADC AL, BL DAA MOV [SI],AL INC SI INC DI LOOP L1 MOV AL, 0 ADC AL, 0 MOV [SI], AL HLT

  37. 四、逻辑运算和移位指令 1、逻辑运算指令(按位操作) 逻辑与:AND DST,SRC DST← DST∧SRC reg,reg reg,mem mem,reg reg,data mem,data 逻辑或:OR DST,SRC DST← DST∨URC 逻辑非:NOT OPR OPR ← OPR 异或: XOR DST,SRC DST←DST V SRC 测试: TEST OPR1,OPR2 OPR1∧OPR2 注:NOT不影响标志位,其余4条将使CF=OF=0,AF无 定义, 对SF,ZF,PF有影响。 逻辑运算指令对处理操作数的某些位很有用。它可 屏蔽某些位,可使某些位置“1”,可测试某些位等.

  38. 2、移位指令 逻辑左移: SHL OPR,CNT 逻辑右移: SHR OPR,CNT 算术左移: SAL OPR,CNT 算术右移: SAR OPR,CNT

  39. 循环左移: ROL OPR,CNT 循环右移: ROR OPR,CNT 带进位循环左移: RCL OPR,CNT 带进位循环右移: RCR OPR,CNT 其中: OPR:reg;mem CNT:1或CL

  40. 注:移位指令:OF位当CNT=1有效,在移位后D7值发 生变化时1→OF,否则为o。 它影响SF,ZF,PF,对AF无定义。 循环指令:不影响除OF,CF以外的其它条件标志。 OF影响同移位指令 例:a、设:SI=1450H 则:执行 MOV CL,2 SHL SI,CL 后, SI= CF= b、计算 BX*6 c、计算 AX/256,结果存于AL中

  41. 五、串处理指令 串处理指令是指用一条指令实现对一串字符或数据 的操作。 8086的串处理指令有如下几个特点: a、通过加重复前缀(REP REPNZ等)实现串操作。 b、可以对字节/字串进行操作 c、用SI对源操作数进行间接寻址(在DS段中),用DI对 目的操作数进行间接寻址(在ES段中)。 d、串操作时,地址的修改与方向标志DF有关,当DF=1 时,SI/DI作自动减量修改,当DF=0时,SI/DI作 自动增量修改。 e、在执行串操作指令过程中,IP保持指向重复前缀 (前缀本身也是一条指令)的偏移地址。

  42. 1、字符串传送指令与重复前缀指令 A、REP CX←CX-1,当CX=0退出重复,否则 执行其后的串指令。 B、MOVSB (DI)←─(SI) MOVSW SI←SI±1或2 DI←DI±1或2。 (DF=0为"+"; DF=1为"-") 注:MOVSB(字节)/MOVSW(字)指令前通常加REP, 该指令不影响F标志。

  43. C、例:一批数的传送 (1)

  44. (2) (3)

  45. 例:数0的个数存于CH中 2、取字符串指令 LODSB AC←(SI) LODSW SI←SI±1减2 (DF=0为"+"; DF=1为"-") 注:此指令前,通常不加REP,它不影响F标志。

  46. 3、存字符串指令 STOSB (DI)←AC STOSW DI←DI±1或2. DF=0为"+"; DF=1为"-" 注:该指令前加REP后,可以使一批内存单元,填满 相同的数。 该指令不影响F标志。 例:使0400H开始的256个单元清0

  47. 4、 字符串比较指令与相等/不相等,为0/不为0,重 复前缀指令 A、REPE CX←CX-1,当CX=0或ZF=0 REPZ 退出重复,否则执行其后的串指令 B、REPNE CX←CX-1,当CX=0或ZF=1 REPNZ 退出重复,否则执行其后的串指令 C、CMPSB (SI)-(DI) CMPSW SI←SI±1或2; DI←DI±1或2。 DF=0为“+”; DF=1为“-”

  48. D、例:判一批数是否与要求的数相同

  49. 5、字符串检索指令 按累加器中给出的字节/字对ES:DI所指的字节/字 串进行检索,建立相应标志。 A、SCASB AC -(DI) SCASW DI←DI±1或±2 B、例:100个字符存于以TAB为首址单元中,试检索 A字符的位置,位置值存于DX中,若无A字使A=-1

  50. 六、控制转移指令 1、转移指令 <1> 段内与段间:段内转移:在同一段内进行的转移 段间转移:段与段之间进行的转移 <2> 转移指令的寻址方式 A、段内直接寻址 它是一种相对寻址,其转移的有效地址为IP的当 前值与位移量8位/16位(带符号数)之和,其中条 件转移指令只能采用这种寻址方式,位移量为8位. B、段内间接寻址: (只适用于无条件转移指令) 段内间接寻址的转移有效地址为寄存器的内容或 存贮单元的内容。它可以用数据寻址方式中除立即 数以外的任一种寻址方式取得。

More Related