- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第四章8086/8088寻址方式与指令系统
◆加法指令(ADD、ADC、INC ) ●ADD 指令
格式: ADD OPRD1,OPRD2 功能:OPRD1←OPRD1+OPRD2 说明:目的操作数可以是累加器、任一通用寄 存器或存贮器中的操作数。 举例:1 ADD AL,30 ADD AX,3000H ADD AX,SI ADD AL,DATA
第四章8086/8088寻址方式与指令系统
◆标志寄存器传送指令
• • • • LAHF (Load AH from Flag) SAHF (Store AH into Flag) PUSHF (Push the Flag) POPF (Pop the Flag)
标志寄存器PSW的定义
● LAHF
(Load AH from Flag) 指令
第四章8086/8088寻址方式与指令系统
二、 8088/8086指令系统
1、数据传送指令。 2、算术运算指令。 3、逻辑运算和位移指令。 4、控制转移指令。 5、串操作指令。 6、处理器控制指令。 7、输入/输出指令。
第四章8086/8088寻址方式与指令系统
(一)数据传送指令; 1、通用数据传送指令 2、地址传送指令 3、标志寄存器传送指令 ◆通用数据传送指令
第四章8086/8088寻址方式与指令系统
◆ 地址传送指令 LEA (Load Effective Address) LDS (Load DS with Pointer) LES (Load ES with Pointer) ● LEA 指令 格式: LEA OPRD1,OPRD2 功能: OPRD2的地址偏移量→OPRD1 说明:源操作数必须是一个内存操作数,目 的操作数必须是一个16位的通用寄存器。 举例: LEA BX,BUFR
◆减法指令(SUB、SBB、DEC、NEG、CMP) ● SUB 指令
格式:SUB OPRD1,OPRD2 功能:OPRD1←OPRD1-OPRD2
注意:可以从累加器中减去立即数;或从寄存器和内存操作数中
减去立即数;或从寄存器操作数减去寄存器或内存操作 数;或从寄存器或内存操作数减去寄存器操作数等。
传送指令 MOV(Move) 进栈指令 PUSH(Push onto the stack) 出栈指令 POP(Pop from the stack) 交换指令 XCHG(Exchange) 换码指令 XLAT(Translate) ●传送指令 MOV(Move) 汇编格式: MOV DST, SRC
举例:
SUB CX,BX SUB [BP+2],CL
影响到标志位: CF、OF、PF、SF、ZF、AF。
第四章8086/8088寻址方式与指令系统
● SBB 指令
说明:与SUB相类似,只不过在两个操作数相减时,还应 减去借位标志CF的当前值。与ADC一样,这条指令主要 用于多字节的减法运算,在前面的四字节加法运算的例 子中,若用SUB代替ADD,用SBB代替ADC,那么就可以实 现两个四字节的减法运算。该指令对标志位AF、CF、OF、 PF、SF和ZF都将产生影响。 ● DEC 指令 格式:DEC OPRD 功能:实现对操作数的减1操作 注意:操作数可以是寄存器的,也可以是内存的 (无符号二进制数)
说明:操作数可以是段寄存器(除CS)的内容、16位的通用寄存器 (标志寄存器有专门的出入栈指令)以及内存的16位字
第四章8086/8088寻址方式与指令系统
例: PUSH AX 设(SS)=4000H,(SP)=1126H,(AX)=0714H, 执行情况如图所示。
例: POP BX 设(SS)=4000H,(SP)=1124H, 执行情况如图所示。
MOV MOV MOV MOV AL, BUFFER AX , [SI] [DI], CX BX , BLOCK[BP]
CPU寄存器与存贮器之间传送数据:
MOV MOV DS,DATA[SI+BX] DEST[BP+DI],ES
注意:不能用 CS、IP MOV 指令不能在两个存贮器单元 之间进行数据直接传送
★ 立即数传送至CPU的内部通用寄存器 MOV CL,6H; MOV AX,03FFH; MOV SI,057BH;
注意:只能使用:AX、BX、CX、DX、BP、SP、SI、DI
第四章8086/8088寻址方式与指令系统
★ CPU内部寄存器与存贮器(所有寻址方式)之间 的数据传送,
CPU的通用寄存器与存贮器之间传送数据:
ADD ADD ADD
BETA[SI],100 BETA[SI],AX BETA[SI],DX
第四章8086/8088寻址方式与指令系统
注意3:该指令还可以实现存贮器操作数与立即数、累加 器或别的寄存器的内容相加,其和放回存贮单元 中。
影响到标志位: CF、OF、PF、SF、ZF、AF。 ● ADC 指令
第四章8086/8088寻址方式与指令系统
◆ 乘法指令(MUL、IMUL ) ● 无符号数乘法指令MUL
注意1:该指令可以实现累加器与立即数、累加 器与任一通用寄存器、累加器与存贮单 元内容相加,其和放回累加器中
第四章8086/8088寻址方式与指令系统
ADD ADD ADD ADD
BX,3FFH SI,AX DI,CX DX,DATA[BX+SI]
注意2:该指令也可以实现任一通用寄存器与立 即数、累加器或别的寄存器、存贮单元 的内容相加,其和放回寄存器中。
第四章8086/8088寻址方式与指令系统
●进栈指令 汇编格式: PUSH SRC 执行的操作:(SP)←(SP)-2, ((SP)+1和(SP))←(SRC)
说明:操作数可以是段寄存器(除CS)的内容、16位的通用寄存器 (标志寄存器有专门的出入栈指令)以及内存的16位字
●出栈指令 汇编格式: POP DST 执行的操作:(DST)←((SP)+1,(SP)) (SP) ←(SP)+2
是把变量BUFR的地址偏移量送到BX中。
第四章8086/8088寻址方式与指令系统
● LDS指令 格式: LDS OPRD1,OPRD2 功能:段地址送入DS,地址偏移量送入一个16位 的指针寄存器或变址寄存器。 说明:完成一个地址指针的传送 举例: LDS SI,[BX] 相当于下面三条指令:
MOV SI,[BX] MOV AX, 2[BX] MOV DS, AX
汇编格式: LAHF 执行的操作:(AH)←(PSW的低字节)
第四章8086/8088寻址方式与指令系统
● SAHF
(Store AH into Flag) 汇编格式: SAHF 执行的操作:(PSW的低字节)←(AH)
● PUSHF
(Push the Flag) 汇编格式: PUSHF 执行的操作: (SP)←(SP)-2 ((SP)+1和(SP))←(PSW)
第四章8086/8088寻址方式与指令系统
执行的操作:(DST)←(SRC) 说明:传送的数据可以是字或字节,但SRC与DST的数据类型必须一 致。传送方向有着严格规定。不影响标志位。 例:MOV MOV MOV MOV MOV MOV MOV AX,DATASEG DS, AX AL,ADDR ADDR+1,AL SIOFFSET ADDR AL[SI] [SI+1],AL
第四章8086/8088寻址方式与指令系统
● INC 指令
格式:INC OPRD 功能:对操作数进行加1 举例: INC AL INC[SI] 说明: 其操作数可以在通用寄存器中, 也可以在内存单元中。
影响到标志位:AF、OF、PF、SF、ZF 注意:对CF位不产生影
第四章8086/8088寻址方式与指令系统
说明:①通用存器与累加器之间
②通用寄存器之间、 ③通用寄存器与存贮器之间进行
注意;段寄存器不能作为一个操作数,
第四章8086/8088寻址方式与指令系统
举例:
XCHG XCHG XCHG XCHG XCHG AL,CL AX,DI BX,SI AX,BUFFER BX,DATA[SI]
第四章8086/8088寻址方式与指令系统
● POPF
(Pop the Flag)
汇编格式:
说明:专用指令
第四章8086/8088寻址方式与指令系统
(二)算术运算指令;
1、加法指令(ADD、ADC、INC ) 2、减法指令(SUB、SBB、DEC、NEG、CMP) 3、乘法指令(MUL、IMUL ) 4、除法指令(DIV、IDIV) 5、调整指令(AAA、AAS、AAD、 AAM、DAA、DAS )
第四章8086/8088寻址方式与指令系统
举例 ★ 在CPU各内部寄存器之间传送数据。 MOV AL,BL MOV DL,CH MOV AX,DX MOV CX,BX MOV DX,BX MOV DX,ES MOV BX,DI MOV SI,BP
注意:CS和IP 不能使用
第四章8086/8088寻址方式与指令系统
第四章8086/8088寻址方式与指令系统
影响标志位:AF、OF、PF、SF、ZF(对CF无影响)
举例: DEC DEC BX [DI]
● NEG 指令
格式:NEG OPRD 功能:对操作数进行求补操作(用零减去操作数) 举例: NEG AL NEG MULRE
● CMP 比较指令
格式:CMP OPRD1,OPRD2
●换码指令 汇编格式: XLAT OPR 或 XLAT 执行的操作: (AL)←((BX)+(AL)) 例:在数据区中TABEL开始的存储区顺序存放着A~Z的 ASCII 码,将把字母从0开始的存放顺序号变为对应 字母的ASCII码值。 程序如下: TABEL DB ‘ABCDE…Z’ MOV BX, OFFSET TABEL MOV AL, 3 XLAT [TABEL]
第四章8086/8088寻址方式与指令系统
● LES指令 格式: LES OPRD1,OPRD2 功能:段地址送入ES,地址偏移量送入一个16位 的指针寄存器或变址寄存器。 说明:完成一个地址指针的传送 举例: LES DI, ABC 相当于下述三条指令。 MOV DI, ABC MOV AX, ABC+2 MOV ES, AX
第四章8086/8088寻址方式与指令系统
说明:★ 实现两个存储单元AR1与AR2之间的数据的互换又 可用堆栈操作程序段实现。 ★ 堆栈常用于子程序或中断的保护断点和现场。
第四章8086/8088寻址方式与指令系统
●交换指令
格式: XCHG OPRD1,OPRD 功能:将字节、字源操作数与目的操作数相交换
第四章8086/8088寻址方式与指令系统
3、用于内存操作数与立即数及任一寄存器中操作数之间 的比较。 CMP DATA,10 CMP COUNT[SI],AX CMP POINTER[DI],BX 注意: 当 没 有 溢 出 时 (OF=0) , 若SF=0 , 则AX≥BX ;若 SF=1, 则 AX<BX。 当 产 生 溢 出 时 (OF=1) , 若 SF=0 , 则 AX<BX ; 若 SF=1, 则 AX≥BX。 用逻辑表达式又可简化为: 若OF⊕SF=0,则AX≥BX。 若OF⊕SF=1,则AX<BX。
说明: 与ADD指令基本相同,只是在对两个操作数进行相加运 算时还应加上进位位的当前值。 举例:
第四章8086/8088寻址方式与指令系统
两个四字节数已分别放在首地址为FIRST和SECOND的 内存区中。每个数占4个存贮单元,存放时低字节在前, 高字节在后。那么用如下ADD和ADC指令就可实现四字节 数的相加,相加结果放入THIRD为首地址的单元中 MOV AX, FIRST ADD AX, SECOND MOV THIRD,AX MOV AX, FIRST+2 ADC AX,SECOND+2 MOV THIRD+2,AX
第四章8086/8088寻址方式与指令系统
说明: 1、用于累加器与立即数,累加器与任一通用寄存器或任 一内存操作数之间的比较。 CMP AL,100 CMP AX,SI CMP AX,DATA[BX] 2、用于任一寄存器与立即数或别的寄存器及任一内存操 作数之间的比较。 CMP BX,04FEH CMP DX,DI CMP CX,COUNT[BP]