![Page 1: 第三章 微型计算机的指令系统 § 1 指令的构成和操作数的类型 一、指令构成 一条指令由操怍码字段和操作数字段构成。 1 、操作码字段](https://reader034.vdocuments.mx/reader034/viewer/2022050622/568145a2550346895db2968c/html5/thumbnails/1.jpg)
第三章 微型计算机的指令系统
§ 1 指令的构成和操作数的类型 一、指令构成 一条指令由操怍码字段和操作数字段构成。 1 、操作码字段 操作码字段表明指令执行何种性质的操作。 2 、操作数字段 操作数字段是指明指令执行的操作所需要的操作数 . 该字段中,可以是操作数本身或是操作数地址。
![Page 2: 第三章 微型计算机的指令系统 § 1 指令的构成和操作数的类型 一、指令构成 一条指令由操怍码字段和操作数字段构成。 1 、操作码字段](https://reader034.vdocuments.mx/reader034/viewer/2022050622/568145a2550346895db2968c/html5/thumbnails/2.jpg)
二、操作数类型 操作数有以下三种类型:立即数操作数、寄存器操 作
数和存储器操作数。 1 、立即数操作数
立即数只能作为源操作数,而不能作为目标操作 数。立即数可以是 8 位和 16 位带符号数或者无符号 数,并只能是整数,不能是小数。
2 、寄存器操作数 寄存器操作数可以存放于 CPU 内部寄存器中,即通 用
寄存器、地址指针寄存器、变址寄存器、段寄存 器。所有的通用寄存器和地址指针寄存器既可以用 作源操作数,又可以用作目标操作数。
3 、存储器操作数 存储器操作数的数据可能是 8 位、 16 位和 32 位的二
进 制数。在指令中,存储器操作数可以分别作为源操 作数和目标操作数,但是不允许二者同时都为存储 器操作数。
![Page 3: 第三章 微型计算机的指令系统 § 1 指令的构成和操作数的类型 一、指令构成 一条指令由操怍码字段和操作数字段构成。 1 、操作码字段](https://reader034.vdocuments.mx/reader034/viewer/2022050622/568145a2550346895db2968c/html5/thumbnails/3.jpg)
§2 8086 的寻址方式 一、立即寻址 操作数包含在指令中 , 此操作数又称为立即数, ( 立
即数只能作源操作数 ) 立即数可为 8 位,也可为 16 位,它用来给寄存器存贮器赋初值。
二、寄存器寻址 操作数在某一寄存器中。一条指令中,可以对源
操作数采用寄存器寻址,也可对目的操作数采用 寄存器寻址,还可两者都用寄存器寻址。
寄存器可为: AX,BX,CX,DX,SI,DI,SP,BP AH,AL,BH,BL,CH,CL,DH,DL 。
![Page 4: 第三章 微型计算机的指令系统 § 1 指令的构成和操作数的类型 一、指令构成 一条指令由操怍码字段和操作数字段构成。 1 、操作码字段](https://reader034.vdocuments.mx/reader034/viewer/2022050622/568145a2550346895db2968c/html5/thumbnails/4.jpg)
三、直接寻址 操作数的地址包含在指令中。
( 注意:此地址为 16 位偏移地址 ) 通常操作数一般在数据段区域中,如果要对其他段
寄存器所指出的存贮区进行寻址 ( 所谓段超越), 则在本条指令中,须用前缀指出段寄存器名。
![Page 5: 第三章 微型计算机的指令系统 § 1 指令的构成和操作数的类型 一、指令构成 一条指令由操怍码字段和操作数字段构成。 1 、操作码字段](https://reader034.vdocuments.mx/reader034/viewer/2022050622/568145a2550346895db2968c/html5/thumbnails/5.jpg)
四、寄存器间接寻址 操作数的地址在某寄存器中,
这些寄存器可以为: BX,BP,SI,DI 之一。 有效地址: EA=[BX 或 BP 或 SI 或 DI] 注:如果指令前没有用前缀指明具体的段寄存器, � 则
寻址时默认为 DS/SS 。 采用寄存器间址允许在指令中指定一个位移量 (8位 或 16 位 ) 。其有效地址 EA 为寄存器内容加上此位移 量。 ( 称寄存器相对寻址 ) 有效地址: EA=[ ( BX 或 BP 或 SI 或 DI )+位移量 ( 带符号数 )]
![Page 6: 第三章 微型计算机的指令系统 § 1 指令的构成和操作数的类型 一、指令构成 一条指令由操怍码字段和操作数字段构成。 1 、操作码字段](https://reader034.vdocuments.mx/reader034/viewer/2022050622/568145a2550346895db2968c/html5/thumbnails/6.jpg)
1、数据段基址寻址 用 BX 寄存器进行间接寻址 。 2、堆栈段基址寻址 用 BP 寄存器进行间接寻址。 3、变址寻址 用 SI,DI 寄存器进行间接寻址。 4、基址加变址寻址 用 BX 、 BP 和 SI 、 DI 寄存器组合起来进行间接寻址。 有效地址 EA=[ ( BX 或 BP )+( SI 或 DI ) ] 注:只要用上 BP 寄存器,那么默认的段寄存器就是 SS, 在其他情况,则为 DS 。否则应用前缀指出相应段 寄存器名。
![Page 7: 第三章 微型计算机的指令系统 § 1 指令的构成和操作数的类型 一、指令构成 一条指令由操怍码字段和操作数字段构成。 1 、操作码字段](https://reader034.vdocuments.mx/reader034/viewer/2022050622/568145a2550346895db2968c/html5/thumbnails/7.jpg)
附:几种常见的书写形式 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]
![Page 8: 第三章 微型计算机的指令系统 § 1 指令的构成和操作数的类型 一、指令构成 一条指令由操怍码字段和操作数字段构成。 1 、操作码字段](https://reader034.vdocuments.mx/reader034/viewer/2022050622/568145a2550346895db2968c/html5/thumbnails/8.jpg)
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]
![Page 9: 第三章 微型计算机的指令系统 § 1 指令的构成和操作数的类型 一、指令构成 一条指令由操怍码字段和操作数字段构成。 1 、操作码字段](https://reader034.vdocuments.mx/reader034/viewer/2022050622/568145a2550346895db2968c/html5/thumbnails/9.jpg)
例2:根据以下要求写出相应的汇编语言指令 A、把数 OB5H 与 (AL) 相加,结果送回 AL 中。 B、把 BX 和 DX 内容相加,结果存入 DX 中。 C、用位移量 0524H 的直接寻址方式把存贮器中一个
字 与数 2A59 相加 , 结果送回存贮单元中。 D、用 BX 和 SI 的基址变址寻址方式 , 把存贮器中一个
字 节与 AL 内容相加 , 结果存入 AL 中。 E、用 BX 和位移量 OB2H 的寄存器相对寻址方式把存
贮 器中一个字和 CX 相加,结果存入内存单元中。
![Page 10: 第三章 微型计算机的指令系统 § 1 指令的构成和操作数的类型 一、指令构成 一条指令由操怍码字段和操作数字段构成。 1 、操作码字段](https://reader034.vdocuments.mx/reader034/viewer/2022050622/568145a2550346895db2968c/html5/thumbnails/10.jpg)
§ 3 8086/8088CPU 指令系统
一、数据传送指令 1、通用数据传送指令 <1> MOV传送指令 格式: MOV DST, SRC DST :目的操作 操作: DST SRC SRC :源操 A、立即数到寄存器存贮器 reg , data 注:不包括段寄 mem , data
![Page 11: 第三章 微型计算机的指令系统 § 1 指令的构成和操作数的类型 一、指令构成 一条指令由操怍码字段和操作数字段构成。 1 、操作码字段](https://reader034.vdocuments.mx/reader034/viewer/2022050622/568145a2550346895db2968c/html5/thumbnails/11.jpg)
B 、从寄存器到寄存器 reg , reg 从存贮器到寄存器 mem , reg 从寄存器到存贮器 reg , mem 注:不包括段寄
![Page 12: 第三章 微型计算机的指令系统 § 1 指令的构成和操作数的类型 一、指令构成 一条指令由操怍码字段和操作数字段构成。 1 、操作码字段](https://reader034.vdocuments.mx/reader034/viewer/2022050622/568145a2550346895db2968c/html5/thumbnails/12.jpg)
C、从存贮器/寄存器到段寄存器 (mem/reg,segreg)
注 : 不能往 CS 中传送数据 .
D、从段寄存器到存贮器/寄存器 (segreg,mem/reg)
![Page 13: 第三章 微型计算机的指令系统 § 1 指令的构成和操作数的类型 一、指令构成 一条指令由操怍码字段和操作数字段构成。 1 、操作码字段](https://reader034.vdocuments.mx/reader034/viewer/2022050622/568145a2550346895db2968c/html5/thumbnails/13.jpg)
注: 1, 不影响标志
2, 不允许两操作数都使用存储器 3, 不允许往 CS 中送数
4,8 位传送/ 16 位传送决定于指令中寄存器及立 即数形式
5,凡给 SS 赋值时,系统会自动禁止中断,等下 条指令执行完后才会恢复
E 、例:一批数的传送
![Page 14: 第三章 微型计算机的指令系统 § 1 指令的构成和操作数的类型 一、指令构成 一条指令由操怍码字段和操作数字段构成。 1 、操作码字段](https://reader034.vdocuments.mx/reader034/viewer/2022050622/568145a2550346895db2968c/html5/thumbnails/14.jpg)
<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
![Page 15: 第三章 微型计算机的指令系统 § 1 指令的构成和操作数的类型 一、指令构成 一条指令由操怍码字段和操作数字段构成。 1 、操作码字段](https://reader034.vdocuments.mx/reader034/viewer/2022050622/568145a2550346895db2968c/html5/thumbnails/15.jpg)
C 、注: PUSH/POP 指令可使用除立即数以外的所有寻址 方式。指令也可以指定段寄为操作数,但 POP 指
令不允许用 CS 寄存器。 所有标志不受影响。 D 、例 1 :两寄存器内容交换 分析下面程序段: 设 SP=2000H,SS=1000H ST : PUSH BX PUSH CX POP BX POP CX
![Page 16: 第三章 微型计算机的指令系统 § 1 指令的构成和操作数的类型 一、指令构成 一条指令由操怍码字段和操作数字段构成。 1 、操作码字段](https://reader034.vdocuments.mx/reader034/viewer/2022050622/568145a2550346895db2968c/html5/thumbnails/16.jpg)
例 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
![Page 17: 第三章 微型计算机的指令系统 § 1 指令的构成和操作数的类型 一、指令构成 一条指令由操怍码字段和操作数字段构成。 1 、操作码字段](https://reader034.vdocuments.mx/reader034/viewer/2022050622/568145a2550346895db2968c/html5/thumbnails/17.jpg)
<3> XCHG 指令 (交换 ) A、 XCHG 指令格式与操作 XCHG OPR1, OPR2 OPR1←→OPR2 B、 XCHG 指令可以在寄存器之间或寄存器与存贮器之
间交换信息。 C 、例
注:不允许使用段寄。
该指令不影响标志位。
![Page 18: 第三章 微型计算机的指令系统 § 1 指令的构成和操作数的类型 一、指令构成 一条指令由操怍码字段和操作数字段构成。 1 、操作码字段](https://reader034.vdocuments.mx/reader034/viewer/2022050622/568145a2550346895db2968c/html5/thumbnails/18.jpg)
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 位的端口地址。
![Page 19: 第三章 微型计算机的指令系统 § 1 指令的构成和操作数的类型 一、指令构成 一条指令由操怍码字段和操作数字段构成。 1 、操作码字段](https://reader034.vdocuments.mx/reader034/viewer/2022050622/568145a2550346895db2968c/html5/thumbnails/19.jpg)
B 、 用长格式时可以在指令中直接指定端口号 , 但只限 于外设的前 256 个端口,当端口号≥ 256 时,只能使 用短格式, ( 间接 ) ,必须注意端口号即为外设地 址,它与段寄无关。 I/O 指令不影响标志位。
C 、 例 1 : D 、 例 2 :
OUT DX, AL
![Page 20: 第三章 微型计算机的指令系统 § 1 指令的构成和操作数的类型 一、指令构成 一条指令由操怍码字段和操作数字段构成。 1 、操作码字段](https://reader034.vdocuments.mx/reader034/viewer/2022050622/568145a2550346895db2968c/html5/thumbnails/20.jpg)
<2> XLAT换码指令 A、指令格式与操作 XLAT OPR 或 XLAT AL ←[ BX + AL ] B、注:使用 XLAT 指令,应先建立一个表格。
表格首址存入 BX 中,需转换的代码应是相对于 表格首址的位移量(即项号)也提前放入 AL 中。
表格的内容(即项值)则是所要换取的代码它将存入 AL 中。
指令格式中的 OPR为表格首址(符号地址)。 所有标志不受影响。
![Page 21: 第三章 微型计算机的指令系统 § 1 指令的构成和操作数的类型 一、指令构成 一条指令由操怍码字段和操作数字段构成。 1 、操作码字段](https://reader034.vdocuments.mx/reader034/viewer/2022050622/568145a2550346895db2968c/html5/thumbnails/21.jpg)
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=
![Page 22: 第三章 微型计算机的指令系统 § 1 指令的构成和操作数的类型 一、指令构成 一条指令由操怍码字段和操作数字段构成。 1 、操作码字段](https://reader034.vdocuments.mx/reader034/viewer/2022050622/568145a2550346895db2968c/html5/thumbnails/22.jpg)
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 为内存单元地址。
![Page 23: 第三章 微型计算机的指令系统 § 1 指令的构成和操作数的类型 一、指令构成 一条指令由操怍码字段和操作数字段构成。 1 、操作码字段](https://reader034.vdocuments.mx/reader034/viewer/2022050622/568145a2550346895db2968c/html5/thumbnails/23.jpg)
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=
![Page 24: 第三章 微型计算机的指令系统 § 1 指令的构成和操作数的类型 一、指令构成 一条指令由操怍码字段和操作数字段构成。 1 、操作码字段](https://reader034.vdocuments.mx/reader034/viewer/2022050622/568145a2550346895db2968c/html5/thumbnails/24.jpg)
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
/ / / / OF DF IF TF SF ZF / AF / PF / CF
/ / /
![Page 25: 第三章 微型计算机的指令系统 § 1 指令的构成和操作数的类型 一、指令构成 一条指令由操怍码字段和操作数字段构成。 1 、操作码字段](https://reader034.vdocuments.mx/reader034/viewer/2022050622/568145a2550346895db2968c/html5/thumbnails/25.jpg)
三、算术运算指令 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 标志
![Page 26: 第三章 微型计算机的指令系统 § 1 指令的构成和操作数的类型 一、指令构成 一条指令由操怍码字段和操作数字段构成。 1 、操作码字段](https://reader034.vdocuments.mx/reader034/viewer/2022050622/568145a2550346895db2968c/html5/thumbnails/26.jpg)
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 标志。 �
![Page 27: 第三章 微型计算机的指令系统 § 1 指令的构成和操作数的类型 一、指令构成 一条指令由操怍码字段和操作数字段构成。 1 、操作码字段](https://reader034.vdocuments.mx/reader034/viewer/2022050622/568145a2550346895db2968c/html5/thumbnails/27.jpg)
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=
![Page 28: 第三章 微型计算机的指令系统 § 1 指令的构成和操作数的类型 一、指令构成 一条指令由操怍码字段和操作数字段构成。 1 、操作码字段](https://reader034.vdocuments.mx/reader034/viewer/2022050622/568145a2550346895db2968c/html5/thumbnails/28.jpg)
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=
![Page 29: 第三章 微型计算机的指令系统 § 1 指令的构成和操作数的类型 一、指令构成 一条指令由操怍码字段和操作数字段构成。 1 、操作码字段](https://reader034.vdocuments.mx/reader034/viewer/2022050622/568145a2550346895db2968c/html5/thumbnails/29.jpg)
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 码。
![Page 30: 第三章 微型计算机的指令系统 § 1 指令的构成和操作数的类型 一、指令构成 一条指令由操怍码字段和操作数字段构成。 1 、操作码字段](https://reader034.vdocuments.mx/reader034/viewer/2022050622/568145a2550346895db2968c/html5/thumbnails/30.jpg)
B、压缩的 BCD 码调正指令 DAA : 条件:用 ADD 或 ADC将两个压缩 BCD码 相加,和存于 AL 中。 操作:将和 AL调正到压缩的 BCD格式存入 AL 中。
DAS : 条件:用 SUB 或 SBB将两个压缩 BCD码 相减,差存于 AL 中。 操作:将 AL 中的差调正到压缩的 BCD格
式存入 AL 中。 注: DAA/DAS 对 OF 标志无定义对其他标志有影响。
![Page 31: 第三章 微型计算机的指令系统 § 1 指令的构成和操作数的类型 一、指令构成 一条指令由操怍码字段和操作数字段构成。 1 、操作码字段](https://reader034.vdocuments.mx/reader034/viewer/2022050622/568145a2550346895db2968c/html5/thumbnails/31.jpg)
例 1 : 设: AL=28H, BL=68H
执行: ADD AL,BL
DAA
指令后: AL= CF= AF=
例 2 : 设: AL=86H, BL=07H
执行: SUB AL,BL
DAS
指令后: AL= CF= AF=
![Page 32: 第三章 微型计算机的指令系统 § 1 指令的构成和操作数的类型 一、指令构成 一条指令由操怍码字段和操作数字段构成。 1 、操作码字段](https://reader034.vdocuments.mx/reader034/viewer/2022050622/568145a2550346895db2968c/html5/thumbnails/32.jpg)
C、非压缩的 BCD 码调整指令 AAA :加法的 ASCII调正指令 条件:用 ADD/ADC将 2 个非压缩 BCD 码相加,
和存于 AL 中。 操作:将 AL 中和调正到非压缩的 BCD格式。将 调正产生的进位值加到 AH 中。 AAS :减法的 ASCII调正指令 条件:用 SUB/SBB将 2 个非压缩 BCD 码相减,
差存于 AL 中。 操作:将 AL 中差调正到非压缩 BCD格式,其调 正产生的借位从 AH 中减去。
![Page 33: 第三章 微型计算机的指令系统 § 1 指令的构成和操作数的类型 一、指令构成 一条指令由操怍码字段和操作数字段构成。 1 、操作码字段](https://reader034.vdocuments.mx/reader034/viewer/2022050622/568145a2550346895db2968c/html5/thumbnails/33.jpg)
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=
![Page 34: 第三章 微型计算机的指令系统 § 1 指令的构成和操作数的类型 一、指令构成 一条指令由操怍码字段和操作数字段构成。 1 、操作码字段](https://reader034.vdocuments.mx/reader034/viewer/2022050622/568145a2550346895db2968c/html5/thumbnails/34.jpg)
6 、编程举例: A 、试编一程序计算一批数中, 0 的个数。
![Page 35: 第三章 微型计算机的指令系统 § 1 指令的构成和操作数的类型 一、指令构成 一条指令由操怍码字段和操作数字段构成。 1 、操作码字段](https://reader034.vdocuments.mx/reader034/viewer/2022050622/568145a2550346895db2968c/html5/thumbnails/35.jpg)
B 、设有 100 个无符号字节数存于以 TAB 为首址的单元
中,试将其最大值存于 AL 中 .最小值存于 BL 中。
![Page 36: 第三章 微型计算机的指令系统 § 1 指令的构成和操作数的类型 一、指令构成 一条指令由操怍码字段和操作数字段构成。 1 、操作码字段](https://reader034.vdocuments.mx/reader034/viewer/2022050622/568145a2550346895db2968c/html5/thumbnails/36.jpg)
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
![Page 37: 第三章 微型计算机的指令系统 § 1 指令的构成和操作数的类型 一、指令构成 一条指令由操怍码字段和操作数字段构成。 1 、操作码字段](https://reader034.vdocuments.mx/reader034/viewer/2022050622/568145a2550346895db2968c/html5/thumbnails/37.jpg)
四、逻辑运算和移位指令 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”,可测试某些位等 .
![Page 38: 第三章 微型计算机的指令系统 § 1 指令的构成和操作数的类型 一、指令构成 一条指令由操怍码字段和操作数字段构成。 1 、操作码字段](https://reader034.vdocuments.mx/reader034/viewer/2022050622/568145a2550346895db2968c/html5/thumbnails/38.jpg)
2、移位指令 逻辑左移: SHL OPR,CNT 逻辑右移: SHR OPR,CNT 算术左移: SAL OPR,CNT
算术右移: SAR OPR,CNT
![Page 39: 第三章 微型计算机的指令系统 § 1 指令的构成和操作数的类型 一、指令构成 一条指令由操怍码字段和操作数字段构成。 1 、操作码字段](https://reader034.vdocuments.mx/reader034/viewer/2022050622/568145a2550346895db2968c/html5/thumbnails/39.jpg)
循环左移: ROL OPR,CNT
循环右移: ROR OPR,CNT
带进位循环左移: RCL OPR,CNT
带进位循环右移: RCR OPR,CNT
其中 : OPR: reg;mem CNT : 1 或 CL
![Page 40: 第三章 微型计算机的指令系统 § 1 指令的构成和操作数的类型 一、指令构成 一条指令由操怍码字段和操作数字段构成。 1 、操作码字段](https://reader034.vdocuments.mx/reader034/viewer/2022050622/568145a2550346895db2968c/html5/thumbnails/40.jpg)
注:移位指令: 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 中
![Page 41: 第三章 微型计算机的指令系统 § 1 指令的构成和操作数的类型 一、指令构成 一条指令由操怍码字段和操作数字段构成。 1 、操作码字段](https://reader034.vdocuments.mx/reader034/viewer/2022050622/568145a2550346895db2968c/html5/thumbnails/41.jpg)
五、串处理指令 串处理指令是指用一条指令实现对一串字符或数据
的操作。 8086 的串处理指令有如下几个特点: a、通过加重复前缀 (REP REPNZ等 )实现串操作。 b、可以对字节/字串进行操作 c、用 SI 对源操作数进行间接寻址 ( 在 DS 段中 ), 用 DI对 目的操作数进行间接寻址 ( 在 ES 段中 ) 。 d、串操作时,地址的修改与方向标志 DF 有关,当 DF=1 时, SI/DI 作自动减量修改,当 DF=0 时, SI/DI作 自动增量修改。 e、在执行串操作指令过程中, IP保持指向重复前缀
( 前缀本身也是一条指令 ) 的偏移地址。
![Page 42: 第三章 微型计算机的指令系统 § 1 指令的构成和操作数的类型 一、指令构成 一条指令由操怍码字段和操作数字段构成。 1 、操作码字段](https://reader034.vdocuments.mx/reader034/viewer/2022050622/568145a2550346895db2968c/html5/thumbnails/42.jpg)
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 标志。
![Page 43: 第三章 微型计算机的指令系统 § 1 指令的构成和操作数的类型 一、指令构成 一条指令由操怍码字段和操作数字段构成。 1 、操作码字段](https://reader034.vdocuments.mx/reader034/viewer/2022050622/568145a2550346895db2968c/html5/thumbnails/43.jpg)
C、例:一批数的传送 ( 1 )
![Page 44: 第三章 微型计算机的指令系统 § 1 指令的构成和操作数的类型 一、指令构成 一条指令由操怍码字段和操作数字段构成。 1 、操作码字段](https://reader034.vdocuments.mx/reader034/viewer/2022050622/568145a2550346895db2968c/html5/thumbnails/44.jpg)
( 2 )
( 3 )
![Page 45: 第三章 微型计算机的指令系统 § 1 指令的构成和操作数的类型 一、指令构成 一条指令由操怍码字段和操作数字段构成。 1 、操作码字段](https://reader034.vdocuments.mx/reader034/viewer/2022050622/568145a2550346895db2968c/html5/thumbnails/45.jpg)
2、取字符串指令 LODSB AC←(SI) LODSW SI←SI±1减 2 ( DF=0 为 "+"; DF=1为 "-") 注:此指令前,通常不加 REP ,它不影响 F 标志。 例:数 0 的个数存于 CH 中
![Page 46: 第三章 微型计算机的指令系统 § 1 指令的构成和操作数的类型 一、指令构成 一条指令由操怍码字段和操作数字段构成。 1 、操作码字段](https://reader034.vdocuments.mx/reader034/viewer/2022050622/568145a2550346895db2968c/html5/thumbnails/46.jpg)
3、存字符串指令 STOSB (DI)←AC STOSW DI←DI±1 或 2. DF=0为 "+"; DF=1 为 "-" 注:该指令前加 REP后,可以使一批内存单元,填满
相同的数。 该指令不影响 F 标志。 例:使 0400H开始的 256 个单元清 0
![Page 47: 第三章 微型计算机的指令系统 § 1 指令的构成和操作数的类型 一、指令构成 一条指令由操怍码字段和操作数字段构成。 1 、操作码字段](https://reader034.vdocuments.mx/reader034/viewer/2022050622/568145a2550346895db2968c/html5/thumbnails/47.jpg)
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 为“ -”
![Page 48: 第三章 微型计算机的指令系统 § 1 指令的构成和操作数的类型 一、指令构成 一条指令由操怍码字段和操作数字段构成。 1 、操作码字段](https://reader034.vdocuments.mx/reader034/viewer/2022050622/568145a2550346895db2968c/html5/thumbnails/48.jpg)
D、例:判一批数是否与要求的数相同
![Page 49: 第三章 微型计算机的指令系统 § 1 指令的构成和操作数的类型 一、指令构成 一条指令由操怍码字段和操作数字段构成。 1 、操作码字段](https://reader034.vdocuments.mx/reader034/viewer/2022050622/568145a2550346895db2968c/html5/thumbnails/49.jpg)
5、字符串检索指令 按累加器中给出的字节/字对 ES:DI 所指的字节/字 串进行检索 ,建立相应标志。 A、 SCASB AC -(DI) SCASW DI←DI±1 或±2 B、例: 100 个字符存于以 TAB 为首址单元中,试检索 A 字符的位置 , 位置值存于 DX 中 ,若无 A 字使 A=-1
![Page 50: 第三章 微型计算机的指令系统 § 1 指令的构成和操作数的类型 一、指令构成 一条指令由操怍码字段和操作数字段构成。 1 、操作码字段](https://reader034.vdocuments.mx/reader034/viewer/2022050622/568145a2550346895db2968c/html5/thumbnails/50.jpg)
六、控制转移指令 1、转移指令 <1> 段内与段间:段内转移 : 在同一段内进行的转移
段间转移 : 段与段之间进行的转移 <2> 转移指令的寻址方式 A 、段内直接寻址 它是一种相对寻址 , 其转移的有效地址为 IP� 的当 前值与位移量 8 位 /16 位 ( 带符号数 ) 之和,其中条 件转移指令只能采用这种寻址方式,位移量为 8 位 . B 、段内间接寻址: ( 只适用于无条件转移指令 ) 段内间接寻址的转移有效地址为寄存器的内容或
存贮单元的内容。它可以用数据寻址方式中除立即数以外的任一种寻址方式取得。
![Page 51: 第三章 微型计算机的指令系统 § 1 指令的构成和操作数的类型 一、指令构成 一条指令由操怍码字段和操作数字段构成。 1 、操作码字段](https://reader034.vdocuments.mx/reader034/viewer/2022050622/568145a2550346895db2968c/html5/thumbnails/51.jpg)
C 、段间直接寻址: ( 只适用无条件转移指令 ) 段间直接寻址的转移地址的段值和偏移量直接由指
令给出。产生转移时 , 其段值送 CS, 偏移量送 IP 。 D 、段间间接寻址: ( 只适用无条件转移指令 ) 段间间接寻址用存贮器中 2� 个相继字的内容取代 IP
与 CS 内容,以达到段间转移之目的。其中相继字的 存贮单元地址将由指令指定的除立即数/寄存器方
式以外的任一种数据寻址方式取得。 两个相继字中 , 前一个为偏移量 ,后一个为段值。 <3> 无条件转移指令 JMP SHORT PTR OPR IP←IP+8 位位移量 段内直接短转移 JMP NEAR PTR OPR IP←IP+16 位位移量 段内直接近转移 JMP WORD PTR OPR IP←─(EA) 段内间接转移
![Page 52: 第三章 微型计算机的指令系统 § 1 指令的构成和操作数的类型 一、指令构成 一条指令由操怍码字段和操作数字段构成。 1 、操作码字段](https://reader034.vdocuments.mx/reader034/viewer/2022050622/568145a2550346895db2968c/html5/thumbnails/52.jpg)
JMP FAR PTR OPR IP←OPR( 偏移地址 ) 段间直接转移 CS←OPR( 段地 ) JMP DWORD PTR OPR IP←(EA) 段间间接转移 CS←EA+2 <4> 条件转移指令 A、 JZ(JE) OPR 条件ZF=1 结果为零 ( 相等转 ) JNZ(JNE) OPR ZF=0 结果不为零 ( 不等转 ) JS OPR SF=1 为负转 JNS OPR SF=0 为正转 JO OPR OF=1 有溢出转 JNO OPR OF=0 无溢出转 JP OPR PF=1 偶转 JNP OPR PF=0 奇转
![Page 53: 第三章 微型计算机的指令系统 § 1 指令的构成和操作数的类型 一、指令构成 一条指令由操怍码字段和操作数字段构成。 1 、操作码字段](https://reader034.vdocuments.mx/reader034/viewer/2022050622/568145a2550346895db2968c/html5/thumbnails/53.jpg)
B、无符号数条件转移JB(JNAE,JC) OPR 条件: CF=1 小于转
JNP(JAE,JNC)OPR CF=0 大于等于转 JBE(JNA) OPR CFVZF=1 小于等于转 JNBE(JA) OPR CFVZF=0 大于转
C、带符号数条件转移JL(JNGE) OPR 条件: SF≯OF=1 小于转
JNL(JGE) OPR SF≯OF=0 大于等于转 JLE(JNG) OPR (SF≯OF)∨ZF=1 小于等于转 JNLE(JG) OPR (SF≯OF)∨ZF=0 大于转
D、 JCXZ OPR CX=0 CX=0转
![Page 54: 第三章 微型计算机的指令系统 § 1 指令的构成和操作数的类型 一、指令构成 一条指令由操怍码字段和操作数字段构成。 1 、操作码字段](https://reader034.vdocuments.mx/reader034/viewer/2022050622/568145a2550346895db2968c/html5/thumbnails/54.jpg)
<5> 例:
A、设: DS=2600H, BX=1256H, SI=528F
TAB( 位移量 )=20A1H PC当= 2000H
[232F7H]=3280H, [264E5H]=2450H
执行 JMP 1000H 后 IP=
JMP BX 后 IP=
JMP [BX+TAB] 后 IP=
JMP [BX+SI] 后 IP=
JMP 2000H : 1000H 后 IP= CS=
![Page 55: 第三章 微型计算机的指令系统 § 1 指令的构成和操作数的类型 一、指令构成 一条指令由操怍码字段和操作数字段构成。 1 、操作码字段](https://reader034.vdocuments.mx/reader034/viewer/2022050622/568145a2550346895db2968c/html5/thumbnails/55.jpg)
B、试分析下面程序 ST : MOV AL, X SHL AL,1 JC L2 CMP AL,Y JNZ L1 MOV Z,0 HLT L1 : JB L3 L2 : MOV Z,1 HLT L3 : MOV Z,-1 HLT
![Page 56: 第三章 微型计算机的指令系统 § 1 指令的构成和操作数的类型 一、指令构成 一条指令由操怍码字段和操作数字段构成。 1 、操作码字段](https://reader034.vdocuments.mx/reader034/viewer/2022050622/568145a2550346895db2968c/html5/thumbnails/56.jpg)
2、子程序调用和返回指令 A、调用指令:把下一条指令的地址 (CS/IP 即断点)
压栈,并实现转移( DST 送 IP/CS) CALL DST 段内直接 SP←SP-2 调用 [SP+1,SP]←IP / IP←IP+D16 段内间接 SP←SP-2 调用
[SP+1,SP]←IP / IP←EA 段间直接 SP←SP-2 [SP+1,SP]←CS 调用 SP←SP-2 [SP+1,SP]←IP IP←偏移地址 CS←段地址
![Page 57: 第三章 微型计算机的指令系统 § 1 指令的构成和操作数的类型 一、指令构成 一条指令由操怍码字段和操作数字段构成。 1 、操作码字段](https://reader034.vdocuments.mx/reader034/viewer/2022050622/568145a2550346895db2968c/html5/thumbnails/57.jpg)
段间间接 SP←SP-2, [SP+1,SP]←CS 调用 SP←SP-2, [SP+1,SP]←IP IP←(EA) CS←(EA+2) B、返回指令 RET 段内返回
IP← [SP+1,SP] SP←SP+2
RET EXP 段内带立即数返回 IP←[SP+1,SP] SP←SP+2
SP←SP+D16 ( 出栈后修改 SP)
![Page 58: 第三章 微型计算机的指令系统 § 1 指令的构成和操作数的类型 一、指令构成 一条指令由操怍码字段和操作数字段构成。 1 、操作码字段](https://reader034.vdocuments.mx/reader034/viewer/2022050622/568145a2550346895db2968c/html5/thumbnails/58.jpg)
RET IP←[SP+1,SP] 段间返回 SP←SP+2 CS←[SP+1,SP] SP←SP+2 RET EXP IP←[SP+1,SP] 段间带立即数返回 SP←SP+2
CS←[SP+1,SP] SP←SP+D16
注: EXP 是一个表达式,其值为 D16( 位移量 ) 。它用来在 返回地址出栈后修改堆栈指针。这便于调用程序在
用 CAIL 之前把子程序所需参数入栈,以便子程序使 用。当子程序返回后,这些参数已不再有用,就可
以修改栈指针使其指向参数入栈以前的值。
![Page 59: 第三章 微型计算机的指令系统 § 1 指令的构成和操作数的类型 一、指令构成 一条指令由操怍码字段和操作数字段构成。 1 、操作码字段](https://reader034.vdocuments.mx/reader034/viewer/2022050622/568145a2550346895db2968c/html5/thumbnails/59.jpg)
C 例:
CALL 1000H
CALL AX
CALL 2500H:3600H
CALL DWORD PTR[DI]
RET6
![Page 60: 第三章 微型计算机的指令系统 § 1 指令的构成和操作数的类型 一、指令构成 一条指令由操怍码字段和操作数字段构成。 1 、操作码字段](https://reader034.vdocuments.mx/reader034/viewer/2022050622/568145a2550346895db2968c/html5/thumbnails/60.jpg)
3、循环控制指令 LOOP OPR CX←CX-1,当 CX≠0 时: 则: IP←IP+D8实现循环
否则: IP 值不变 ,退出循环 LOOPZ(LOOPE) OPR
CX←CX-1,当 CX≠0,ZF=1 时: 则: IP←IP+D8实现循环
否则: IP 值不变 ,退出循环 LOOPNZ(LOOPNE) OPR
CX←CX-1,当 CX≠0,ZF=0 时: 则: IP←IP+D8实现循环 否则: IP 值不变 ,退出循环
注:循环控制指令不影响条件码。 LOOPZ/LOOPNZ提供了提前结束循环的可能性。
![Page 61: 第三章 微型计算机的指令系统 § 1 指令的构成和操作数的类型 一、指令构成 一条指令由操怍码字段和操作数字段构成。 1 、操作码字段](https://reader034.vdocuments.mx/reader034/viewer/2022050622/568145a2550346895db2968c/html5/thumbnails/61.jpg)
例:试分析下面程序 ST : MOV CX, M MOV AX, 0 MOV SI, AX L1 : ADD AX,[ARRAY +SI] ADD SI, 2 LOOP L1 MOV [ TOTAL], AX
HLT
![Page 62: 第三章 微型计算机的指令系统 § 1 指令的构成和操作数的类型 一、指令构成 一条指令由操怍码字段和操作数字段构成。 1 、操作码字段](https://reader034.vdocuments.mx/reader034/viewer/2022050622/568145a2550346895db2968c/html5/thumbnails/62.jpg)
4、中断指令和中断返回指令 A、 INT SP←SP-2;[SP+1,SP]←PSW INT TYPE SP←SP-2;[SP+1,SP]←CS SP←SP-2;[SP+1,SP]←IP IP←(TYPE*4) CS←(TYPE*4+2) 注: TYPE 为类型号,其值为 0~ 255 。 (TYPE 不能为 0) INT 是一个字节的中断指令,它隐含的类型号为 3 。
(断点中断 ) INT 指令在执行完上述操作后,将 0→IF→TF 。
![Page 63: 第三章 微型计算机的指令系统 § 1 指令的构成和操作数的类型 一、指令构成 一条指令由操怍码字段和操作数字段构成。 1 、操作码字段](https://reader034.vdocuments.mx/reader034/viewer/2022050622/568145a2550346895db2968c/html5/thumbnails/63.jpg)
B、 INTO 若 OF=1 则: SP←SP- 2;[SP+1,SP]←PSW, SP←SP- 2;[SP+1,SP]←CS SP←SP- 2;[SP+1,SP]←IP IP←[00010H,00011H] CS←[00012H,00013H] 注: INTO 为若溢出则中断的指令。 ( 类型号为 4) C、 IRET IP←[SP+1,SP] , SP←SP+2 CS←[SP+1,SP] , SP←SP+2
PSW←[SP+1,SP] , SP←SP+2 注:中断指令:保存现场: PSW、 CS 、 IP 实现转移: [TYPE*4]→IP
[TYPE*4+2]→CS
![Page 64: 第三章 微型计算机的指令系统 § 1 指令的构成和操作数的类型 一、指令构成 一条指令由操怍码字段和操作数字段构成。 1 、操作码字段](https://reader034.vdocuments.mx/reader034/viewer/2022050622/568145a2550346895db2968c/html5/thumbnails/64.jpg)
5、处理器控制指令 A、 CLC 0→CF 进位位置 "0" CMC CF→CF 进位求反 STC 1→CF 进位置 "1" CLD 0→DF 方向标志置 "0" STD 1→DF 方向标志置 "1" CLI 0→IF 中断标志置 "0" STI 1→IF 中断标志置 "1" B、 NOP 无 (空 ) 操作 HLT 停机 WAIT 等待
![Page 65: 第三章 微型计算机的指令系统 § 1 指令的构成和操作数的类型 一、指令构成 一条指令由操怍码字段和操作数字段构成。 1 、操作码字段](https://reader034.vdocuments.mx/reader034/viewer/2022050622/568145a2550346895db2968c/html5/thumbnails/65.jpg)
C、 ESC mem 交权 (调用协处理器工作 ) ESC 指令把mem存贮单元的内容送到 数据总线。这条指令在使用协处理器 执行某些操作时,可以从存贮器取得 指令或操作数。 D、 LOCK 封锁 该指令是一种前缀,它可以与其它指 令联合,用来维持总线的锁存信号直 到与其联合的指令执行完为止。 当 CPU 与其他处理机协同工作时,该
指令可避免破坏有用信息。
![Page 66: 第三章 微型计算机的指令系统 § 1 指令的构成和操作数的类型 一、指令构成 一条指令由操怍码字段和操作数字段构成。 1 、操作码字段](https://reader034.vdocuments.mx/reader034/viewer/2022050622/568145a2550346895db2968c/html5/thumbnails/66.jpg)
小 结 一、 CPU 结构 1 、通用寄存器: AX,BX,CX,DX/AH,AL,BH,BL,CH, CL,DH,DL 专用寄存器: SP,BP,SI,DI 。 标志寄存器: F,(AF,CF,OF,SF,PF,ZF//DF,IF,TF,) 段地址寄存器: CS,DS,ES,SS 指针寄存器: IP 2 、一个 20 位的物理地址可表示成段地址:偏移地址,
其计算方法如下: 物理地址= ( 段地址 X10H ) +偏移地址
![Page 67: 第三章 微型计算机的指令系统 § 1 指令的构成和操作数的类型 一、指令构成 一条指令由操怍码字段和操作数字段构成。 1 、操作码字段](https://reader034.vdocuments.mx/reader034/viewer/2022050622/568145a2550346895db2968c/html5/thumbnails/67.jpg)
二、寻址方式 1 、立即寻址:操作数由指令给出 MOV DX,100H 2 、寄存器寻址:操作数在寄存器中 ADD AX,BX 3 、直接寻址:操作数有效地址由指令给出 MOV AX,[100] MOV AX,VAR 4 、寄存器间接寻址: 操作数的地址在寄存器中,这些寄存器可以 为 BX,BP;SI,DI. 其操作数地址为: A 、┌ BX┐ ( 数据段基址寻址 ) │SI│+位移量+ [DS]* 16 ( 变址寻址 ) └DI┘ ( 变址寻址 ) [BP] +位移量+ [SS]* 16 ( 堆栈段基址寻址 )
![Page 68: 第三章 微型计算机的指令系统 § 1 指令的构成和操作数的类型 一、指令构成 一条指令由操怍码字段和操作数字段构成。 1 、操作码字段](https://reader034.vdocuments.mx/reader034/viewer/2022050622/568145a2550346895db2968c/html5/thumbnails/68.jpg)
B 、┌ SI┐ │ │+ [BX] +位移量+ [DS]*16 ( 基址加变址 ) └DI┘ ┌SI┐ │ │+ [BP] +位移量+ [SS]*16 ( 基址加变址 ) └DI┘ 注:只要用上 BP ,那就默认段寄为 SS ,其他情况为DS 5 、编写指令时应注意的几个问题 A 、注意区别立即寻址方式和直接寻址方式 如: MOV AX,126 与 MOV AX,[126] B 、使用寄存器间址时,应注意和寄存器寻址方式的 区别 如: MOV AX,BX 与 MOV AX, [BX]
![Page 69: 第三章 微型计算机的指令系统 § 1 指令的构成和操作数的类型 一、指令构成 一条指令由操怍码字段和操作数字段构成。 1 、操作码字段](https://reader034.vdocuments.mx/reader034/viewer/2022050622/568145a2550346895db2968c/html5/thumbnails/69.jpg)
C 、在双操作数指令中 , 源操作数和目的操作数的地 址不能同时为存贮器地址。 如: M1 和 M2 为两个存贮器变量, 则: ADD [M1], [M2] 是错误指令。 D 、代码段寄存器 CS 不能用作指令的目的寄存器。 三、指令 1 、数据传送指令 A 、 MOV DST,SRC (DST: 目的操作数, SRC 源操作数 ) 指令的 7种格式与注意事项。 PUSH SRC 指令的操作过程, SP 的变化情况
![Page 70: 第三章 微型计算机的指令系统 § 1 指令的构成和操作数的类型 一、指令构成 一条指令由操怍码字段和操作数字段构成。 1 、操作码字段](https://reader034.vdocuments.mx/reader034/viewer/2022050622/568145a2550346895db2968c/html5/thumbnails/70.jpg)
POP DST 指令的操作过程, SP 的变化情况 XCHG OPR1 ,OPR2 (交换 ) B 、 IN AC,PORT 只能用 AX/AL,DX//64K空间 OUT PORT, AC XLAT (换码 ) AL←[BX + AL] BX 为表格首址, AL 为项号 C 、 LEA REG,SRC 有效地址送寄存器 REG 为通用寄存器 LDS REG,SRC 指针送寄存器和 DS LES REG,SRC 指针送寄存器和 ES
![Page 71: 第三章 微型计算机的指令系统 § 1 指令的构成和操作数的类型 一、指令构成 一条指令由操怍码字段和操作数字段构成。 1 、操作码字段](https://reader034.vdocuments.mx/reader034/viewer/2022050622/568145a2550346895db2968c/html5/thumbnails/71.jpg)
D 、 LAHF 标志送 AH SAHF AH 送标寄 2 、算术运算指令 A 、 ADD DST,SRC ADC DST,SRC INC OPR INC 指令不影响 CF B 、 SUB DST,SRC SBB DST,SRC DEC OPR DEC 指令不影响 CF NEG OPR CMP OPR1 ,OPR1 建立标志/后跟条转
![Page 72: 第三章 微型计算机的指令系统 § 1 指令的构成和操作数的类型 一、指令构成 一条指令由操怍码字段和操作数字段构成。 1 、操作码字段](https://reader034.vdocuments.mx/reader034/viewer/2022050622/568145a2550346895db2968c/html5/thumbnails/72.jpg)
C 、 MUL SRC 字节: AL*(SRC)→AX 字: AX*(SRC)→DX,AX IMUL SRC (带符号) DIV SRC 字节: AX÷(SRC)→AL (余在 AH) 字: DX,AX÷(SRC)→AX (余在 DX) IDIV SRC ( 带符号 ) D 、 CBW ( 字节转换为字 )/ (AL扩展到 AH) CWD ( 字转换为双字 )/ (AX扩展到 DX) E 、 DAA (BCD 码加调正/压缩码 ) DAS (BCD 码减调正/压缩码 ) AAA (非压缩 BCD 码加调正 ) AAS (非压缩 BCD 码减调正 )
![Page 73: 第三章 微型计算机的指令系统 § 1 指令的构成和操作数的类型 一、指令构成 一条指令由操怍码字段和操作数字段构成。 1 、操作码字段](https://reader034.vdocuments.mx/reader034/viewer/2022050622/568145a2550346895db2968c/html5/thumbnails/73.jpg)
AAM 非压缩 BCD 码乘调正 将 AL积除 OA,商存 AH; 除数存 AL 中。 AAD 非压缩 BCD 码除调正 将被除数 AX调正为 2 进制数 ; H*10+AL→AL 3 、逻辑运算和移位指令 A 、 AND DST,SRC OR DST,SRC NOT OPR XOR DST,SRC TEST OPR1 ,OPR2 (OPR1∧OPR2)
![Page 74: 第三章 微型计算机的指令系统 § 1 指令的构成和操作数的类型 一、指令构成 一条指令由操怍码字段和操作数字段构成。 1 、操作码字段](https://reader034.vdocuments.mx/reader034/viewer/2022050622/568145a2550346895db2968c/html5/thumbnails/74.jpg)
B 、 SHL OPR,CNT (CNT 为 1 或 CL) SAL OPR,CNT 算术左移 SHR OPR,CNT 逻辑右移 SAR OPR,CNT 算术右移 ROL OPR,CNT 循环左移 ROR OPR,CNT 循环右移 RCL OPR,CNT 带进位循环左移 RCR OPR,CNT 带进位循环右移 4 、串处理指令 (使用串指令的条件 ) A 、 REP 重复前缀 CX≠0重复 MOVSB 字符串传送 ( DI )←( SI ) MOVSW 指针自动修改 条件: SI,DI,CX及 DF 赋值后 才可用 MOVSB/W)
![Page 75: 第三章 微型计算机的指令系统 § 1 指令的构成和操作数的类型 一、指令构成 一条指令由操怍码字段和操作数字段构成。 1 、操作码字段](https://reader034.vdocuments.mx/reader034/viewer/2022050622/568145a2550346895db2968c/html5/thumbnails/75.jpg)
B 、 LODSB 取字符串 AC←(SI) LODSW C 、 STOSB 存字符串 (DI)←AC STOSW D 、 REPE/REPZ 重复前缀 CX≠0,ZF=1 时重复 REPNE/REPNZ 重复前缀 CX≠0,ZF=0 时重复 CMPSB 字符串比较 (SI)- (DI) CMPSW 自动修改指针 E 、 SCASB 字符串捡索/ AC- (DI) SCASW 关键字要事先存入 AL,AX 中
![Page 76: 第三章 微型计算机的指令系统 § 1 指令的构成和操作数的类型 一、指令构成 一条指令由操怍码字段和操作数字段构成。 1 、操作码字段](https://reader034.vdocuments.mx/reader034/viewer/2022050622/568145a2550346895db2968c/html5/thumbnails/76.jpg)
5 、控制转移指令 A 、 JMP SHORT PTR OPR 段内直接短转移 JMP NEAR PTR OPR 段内直接近转移 JMP WORD PTR OPR 段内间接转移 JMP FAR PTR OPR 段间直接转移 JMP DWORD PRT OPR 段间间接转移 B 、 JZ/JE OPR ZF=1 JNE/JNE OPR ZF=0 JS OPR SF=1 JNS OPR SF=0
![Page 77: 第三章 微型计算机的指令系统 § 1 指令的构成和操作数的类型 一、指令构成 一条指令由操怍码字段和操作数字段构成。 1 、操作码字段](https://reader034.vdocuments.mx/reader034/viewer/2022050622/568145a2550346895db2968c/html5/thumbnails/77.jpg)
JO OPR OF=1 JNO OPR OF=0 JP OPR PF=1 JNP OPR PF=0 JB/JNAE/JC OPR CF=1 无符号数小于转 JNB/JAE/JNC OPR CF=0 无符号数 大于等于转 JBE/JNA OPR CF∨ZF=1 无符号数 小于等于转 JNBE/JA OPR CF∨ZF=0 无符号数 大于转 JL(JNGE) OPR SF≯OF=1 带符号数 小于转
![Page 78: 第三章 微型计算机的指令系统 § 1 指令的构成和操作数的类型 一、指令构成 一条指令由操怍码字段和操作数字段构成。 1 、操作码字段](https://reader034.vdocuments.mx/reader034/viewer/2022050622/568145a2550346895db2968c/html5/thumbnails/78.jpg)
JNL(JGE) OPR SF≯OF=0 带符号数 大于等于转 JLE/JNG OPR (SF≯OF)∨ZF=1 带符号数 小于等于转 JNLE/JG OPR (SF≯OF)∨ZF=0 带符号数 大于转 JCXZ OPR (CX)=0 CX=0转 C 、 CALL DST 指令的操作过程 RET (EXP) 指令的操作过程 /EXP 的含义
![Page 79: 第三章 微型计算机的指令系统 § 1 指令的构成和操作数的类型 一、指令构成 一条指令由操怍码字段和操作数字段构成。 1 、操作码字段](https://reader034.vdocuments.mx/reader034/viewer/2022050622/568145a2550346895db2968c/html5/thumbnails/79.jpg)
D 、 LOOP OPR 循环控制, CX≠0转移 LOOPZ/LOOPE OPR 循环控制 , CX≠0;ZF=1 则转移 LOOPNZ/LOOPNE OPR 循环控制, CX≠0;ZF=0 则转移 E 、 INT 指令操作过程 INT TYPE INTO IRET F 、 CLC 进位位 (CF)置 "0" CMC 进位位 (CF) 求反 STC 进位位 (CF)置 "1" CLD 方向标志置 "0"
![Page 80: 第三章 微型计算机的指令系统 § 1 指令的构成和操作数的类型 一、指令构成 一条指令由操怍码字段和操作数字段构成。 1 、操作码字段](https://reader034.vdocuments.mx/reader034/viewer/2022050622/568145a2550346895db2968c/html5/thumbnails/80.jpg)
STD 方向标志置 "1" CLI 中断标志置 "0" STI 中断标志置 "1" NOP HLT WAIT 等待 ESC mem 交权 LOCK 封锁 / 前缀 6 、使用指令时,应注意的几个问题 A 、指令对地址还是对地址中的内容进行操作, 要严加区分。 如: LEA BX,MESS MESS 的偏移地址→ BX
![Page 81: 第三章 微型计算机的指令系统 § 1 指令的构成和操作数的类型 一、指令构成 一条指令由操怍码字段和操作数字段构成。 1 、操作码字段](https://reader034.vdocuments.mx/reader034/viewer/2022050622/568145a2550346895db2968c/html5/thumbnails/81.jpg)
B 、使用指令时,要清楚指令隐含的操作寄存器 如:乘法隐含的目的操作数 : AX/AL 除法隐含的目的操作数 : DX,AX/AL 串指令隐含的操作数为: SI,DI 与 AL等。 重复前缀 : CX 十进制调正指令隐含地使用了 AL 换码指令 :XLAT [BX+AL]→AL 循环指令 : CX 输入、输出指令 : AX/AL, DX C 、对带符号数和无符号数的操作应正确选择相应的条 件转移指令。
![Page 82: 第三章 微型计算机的指令系统 § 1 指令的构成和操作数的类型 一、指令构成 一条指令由操怍码字段和操作数字段构成。 1 、操作码字段](https://reader034.vdocuments.mx/reader034/viewer/2022050622/568145a2550346895db2968c/html5/thumbnails/82.jpg)
D 、用移位指令来倍增或倍减一个值时,要注意对 带符号数和无符号数所使用的指令应是不同的。 如: AX=8520H 当 AX 为无符号数时 ,AX/2 可用 SHR AX,1 结果为 4290H ; 当 AX 为带符号数时, AX/2 应用 SAR AX,1 结果为 C290H 。 E 、标号是程序中指令的符号地址,要注意和变量 ( 数据符号 ) 的区别。 如:定义 VAR为一变量, LAB 为一标号 JMP LAB 指令的转移地址为 LAB JMP VAR为一非法指令。
![Page 83: 第三章 微型计算机的指令系统 § 1 指令的构成和操作数的类型 一、指令构成 一条指令由操怍码字段和操作数字段构成。 1 、操作码字段](https://reader034.vdocuments.mx/reader034/viewer/2022050622/568145a2550346895db2968c/html5/thumbnails/83.jpg)
四、举例 1 、指出下列指令的错误 A 、 MOV AH,BX B 、 MOV [BX],[SI] C 、 MOV AX,[SI][DI] D 、 MOV [BX][SI],ES:AX E 、 MOV BYTE PTR[BX],1000H
F 、 MOV CS,AX G 、 MOV DS,BP H 、 INC [AX]
![Page 84: 第三章 微型计算机的指令系统 § 1 指令的构成和操作数的类型 一、指令构成 一条指令由操怍码字段和操作数字段构成。 1 、操作码字段](https://reader034.vdocuments.mx/reader034/viewer/2022050622/568145a2550346895db2968c/html5/thumbnails/84.jpg)
2 、求双字长数 DX:AX 的补码数
3 、将 DX:AX 中双字长数乘以 2 / 除以 2
![Page 85: 第三章 微型计算机的指令系统 § 1 指令的构成和操作数的类型 一、指令构成 一条指令由操怍码字段和操作数字段构成。 1 、操作码字段](https://reader034.vdocuments.mx/reader034/viewer/2022050622/568145a2550346895db2968c/html5/thumbnails/85.jpg)
4 、两字节数相加 ,设两字节数存于 BL 、 DL 中 , 和存于 AX 中。 A 、无符号数
B 、带符号数
![Page 86: 第三章 微型计算机的指令系统 § 1 指令的构成和操作数的类型 一、指令构成 一条指令由操怍码字段和操作数字段构成。 1 、操作码字段](https://reader034.vdocuments.mx/reader034/viewer/2022050622/568145a2550346895db2968c/html5/thumbnails/86.jpg)
5 、比较 AX,BX,CX 中带符号数大小, 将最大数存于 AX 中。
6 、已知内存中有一以 ARRAY为首址的 100 个字的数组 , 试将数组中每个数加 1
![Page 87: 第三章 微型计算机的指令系统 § 1 指令的构成和操作数的类型 一、指令构成 一条指令由操怍码字段和操作数字段构成。 1 、操作码字段](https://reader034.vdocuments.mx/reader034/viewer/2022050622/568145a2550346895db2968c/html5/thumbnails/87.jpg)
7、试将 ELEMS 中的 100 个字节数据的位置颠倒过来
![Page 88: 第三章 微型计算机的指令系统 § 1 指令的构成和操作数的类型 一、指令构成 一条指令由操怍码字段和操作数字段构成。 1 、操作码字段](https://reader034.vdocuments.mx/reader034/viewer/2022050622/568145a2550346895db2968c/html5/thumbnails/88.jpg)
1 X>0
8 、设 Y = 0 X=0 已知一个 8 位带符号数存于 X 单
-1 X<0 元中试求 Y值存于 AL 中。
![Page 89: 第三章 微型计算机的指令系统 § 1 指令的构成和操作数的类型 一、指令构成 一条指令由操怍码字段和操作数字段构成。 1 、操作码字段](https://reader034.vdocuments.mx/reader034/viewer/2022050622/568145a2550346895db2968c/html5/thumbnails/89.jpg)
9 、有 3 个数存于 TAB 为首址单元中,试将中值存于 A中 设数为带符号数
![Page 90: 第三章 微型计算机的指令系统 § 1 指令的构成和操作数的类型 一、指令构成 一条指令由操怍码字段和操作数字段构成。 1 、操作码字段](https://reader034.vdocuments.mx/reader034/viewer/2022050622/568145a2550346895db2968c/html5/thumbnails/90.jpg)
10 、有 3 个无符号字节数存于 BUF 为首址单元中 ,若3 个 数都不为 0, 则求 3 个数之和 , 存于以 BUF + 3 为首址 单元中;若 3 个数有 1 个为 0, 则将其它 2 个单元清零
![Page 91: 第三章 微型计算机的指令系统 § 1 指令的构成和操作数的类型 一、指令构成 一条指令由操怍码字段和操作数字段构成。 1 、操作码字段](https://reader034.vdocuments.mx/reader034/viewer/2022050622/568145a2550346895db2968c/html5/thumbnails/91.jpg)
11 、设有 50 个 ASCLL 字符存于 BUF 为首址单元中,求出 字符串中 A 字符的个数存于 DL 中,并将 A 字符的地
址顺序存于以 ADRY为首址的单元中。
![Page 92: 第三章 微型计算机的指令系统 § 1 指令的构成和操作数的类型 一、指令构成 一条指令由操怍码字段和操作数字段构成。 1 、操作码字段](https://reader034.vdocuments.mx/reader034/viewer/2022050622/568145a2550346895db2968c/html5/thumbnails/92.jpg)
12 、设有 50 个 ASCLL 字符存于 STG 为首址单元中,求出 字符串中 0-9 字符的个数存于 DL 中,并将 0-9 字符
顺序存于以 BUF 为首址的单元中。