8086指令集

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

8086指令集

一、数据传送指令

1.通用数据传送指令

MOV(Move)传送

PUSH(Push onto the stack)进栈

POP(Pop from the stack)出栈

XCHG(Exchange)交换

.MOV指令

格式为: MOV DST,SRC

执行的操作:(DST)<-(SRC)

.PUSH进栈指令

格式为:PUSH SRC

执行的操作:(SP)<-(SP)-2

((SP)+1,(SP))<-(SRC)

.POP出栈指令

格式为:POP DST

执行的操作:(DST)<-((SP+1),(SP))

(SP)<-(SP)+2

.XCHG 交换指令

格式为:XCHG OPR1,OPR2

执行的操作:(OPR1)<-->(OPR2)

2.累加器专用传送指令

IN(Input) 输入

OUT(Output) 输出

XLAT(Translate) 换码

这组指令只限于使用累加器AX或AL传送信息.

.IN 输入指令

长格式为: IN AL,PORT(字节)

IN AX,PORT(字)

执行的操作: (AL)<-(PORT)(字节)

(AX)<-(PORT+1,PORT)(字)

短格式为: IN AL,DX(字节)

IN AX,DX(字)

执行的操作: AL<-((DX))(字节)

AX<-((DX)+1,DX)(字)

.OUT 输出指令

长格式为: OUT PORT,AL(字节)

OUT PORT,AX(字)

执行的操作: (PORT)<-(AL)(字节)

(PORT+1,PORT)<-(AX)(字)

短格式为: OUT DX,AL(字节)

OUT DX,AX(字)

执行的操作: ((DX))<-(AL)(字节)

((DX)+1,(DX))<-AX(字)

在IBM-PC机里,外部设备最多可有65536个I/O端口,端口(即外设的端口地址)为0000~FFFFH.其中前256个端口(0~FFH)可以直接在指令中指定,这就是长格式中的PORT,此时机器指令用二个字节表示,第二个字节就是端口号.所以用长格式时可以在指定中直接指定端口号,但只限于前256个端口.当端口号>=256时,只能使用短格式,此时,必须先把端口号放到DX寄存器中(端口号可以从0000到0FFFFH),然后再用IN或OUT指令来传送信息.

.XLAT 换码指令

格式为: XLAT OPR

或: XLAT

执行的操作:(AL)<-((BX)+(AL)) 3.有效地址送寄存器指令

LEA(Load effective address)有效地址送寄存器LDS(Load DS with Pointer)指针送寄存器和DS LES(Load ES with Pointer)指针送寄存器和ES

.LEA 有效地址送寄存器

格式为: LEA REG,SRC

执行的操作:(REG)<-SRC

指令把源操作数的有效地址送到指定的寄存器中.

.LDS 指针送寄存器和DS指令

格式为: LDS REG,SRC

执行的操作:(REG)<-(SRC)

(DS)<-(SRC+2)

把源操作数指定的4个相继字节送到由指令指定的寄存器及DS寄存器中.该指令常指定SI寄存器.

.LES 指针送寄存器和ES指令

格式为: LES REG,SRC

执行的操作: (REG)<-(SRC)

(ES)<-(SRC+2)

把源操作数指定的4个相继字节送到由指令指定的寄存器及ES寄存器中.该指令常指定DI寄存器.

4.标志寄存器传送指令

LAHF(Load AH with flags)标志送AH

SAHF(store AH into flags)AH送标志寄存器PUSHF(push the flags) 标志进栈

POPF(pop the flags) 标志出栈

.LAHF 标志送AH

格式为: LAHF

执行的操作:(AH)<-(PWS的低字节)

.SAHF AH送标志寄存器

格式为: SAHF

执行的操作:(PWS的低字节)<-(AH)

.PUSHF 标志进栈

格式为: PUSHF

执行的操作:(SP)<-(SP)-2

((SP)+1,(SP))<-(PSW)

.POPF 标志出栈

格式为: POPF

执行的操作:(PWS)<-((SP)+1,(SP))

(SP)<-(SP+2)

二、算术指令

1.加法指令

ADD(add)加法

ADC(add with carry)带进位加法

INC(increment)加1

.ADD 加法指令

格式: ADD DST,SRC

执行的操作:(DST)<-(SRC)+(DST)

.ADC 带进位加法指令

格式: ADC DST,SRC

执行的操作:(DST)<-(SRC)+(DST)+CF

.ADD 加1指令

格式: INC OPR

执行的操作:(OPR)<-(OPR)+1

2.减法指令

SUB(subtract)减法

SBB(subtract with borrow)带借位减法

DEC(Decrement)减1

NEG(Negate)求补

CMP(Compare)比较

.SUB 减法指令

格式: SUB DST,SRC

执行的操作:(DST)<-(DST)-(SRC)

.SBB 带借位减法指令

格式: SBB DST,SRC

执行的操作:(DST)<-(DST)-(SRC)-CF

.DEC 减1指令

格式: DEC OPR

执行的操作:(OPR)<-(OPR)-1

.NEG 求补指令

格式: NEG OPR

执行的操作:(OPR)<- -(OPR)

.CMP 比较指令

格式: CMP OPR1,OPR2

执行的操作:(OPR1)-(OPR2)

该指令与SUB指令一样执行减法操作,但不保存结果,只是根据结果设置条件标志西半球.

3.乘法指令

MUL(Unsigned Multiple)无符号数乘法

IMUL(Signed Multiple)带符号数乘法

.MUL 无符号数乘法指令

格式: MUL SRC

执行的操作:

字节操作数:(AX)<-(AL)*(SRC)

字操作数:(DX,AX)<-(AX)*(SRC)

.IMUL 带符号数乘法指令

格式: IMUL SRC

执行的操作:与MUL相同,但必须是带符号数,而MUL 是无符号数.

4.除法指令

DIV(Unsigned divide)无符号数除法

IDIV(Signed divide)带符号数除法

CBW(Convert byte to word)字节转换为字

CWD(Contert word to double word)字转换为双字.DIV 无符号数除法指令

格式: DIV SRC

执行的操作:

字节操作:(AL)<-(AX)/(SRC)的商

(AH)<-(AX)/(SRC)的余数

字操作: (AX)<-(DX,AX)/(SRC)的商

(AX)<-(DX,AX)/(SRC)的余数

.IDIV 带符号数除法指令

格式: DIV SRC

执行的操作:与DIV相同,但操作数必须是带符号数,商和余数也均为带符号数,且余数的符号与被除数的符号相同.

.CBW 字节转换为字指令

格式: CBW

执行的操作:AL的内容符号扩展到AH.即如果(AL)的最高有效位为0,则(AH)=00;如(AL)的最高有效位为1,则(AH)=0FFH

.CWD 字转换为双字指令

格式: CWD

执行的操作:AX的内容符号扩展到DX.即如(AX)的最高有效位为0,则(DX)=0;否则(DX)=0FFFFH.

这两条指令都不影响条件码.

三、逻辑指令

1.逻辑运算指令

AND(and) 逻辑与

OR(or) 逻辑或

NOT(not) 逻辑非

XOR(exclusive or)异或

TEST(test) 测试

.AND 逻辑与指令

格式: AND DST,SRC

执行的操作:(DST)<-(DST)^(SRC)

.OR 逻辑或指令

格式: OR DST,SRC

执行的操作:(DST)<-(DST)V(SRC)

.NOT 逻辑非指令

格式: NOT OPR

执行的操作:(OPR)<-(OPR)

.XOR 异或指令

格式: XOR DST,SRC

执行的操作:(DST)<-(DST)V(SRC)

.TEST 测试指令

格式: TEST OPR1,OPR2

执行的操作:(DST)^(SRC)

两个操作数相与的结果不保存,只根据其特征置条件码

2.移位指令

SHL(shift logical left) 逻辑左移SAL(shift arithmetic left) 算术左移SHR(shift logical right) 逻辑右移SAR(shift arithmetic right) 算术右移ROL(Rotate left) 循环左移ROR(Rotate right) 循环右移RCL(Rotate left through carry) 带进位循环左移

RCR(Rotate right through carry) 带进位循环右移

格式: SHL OPR,CNT(其余的类似)

其中OPR可以是除立即数以外的任何寻址方式.移位次数由CNT决定,CNT可以是1或CL.

循环移位指令可以改变操作数中所有位的位置;移位指令则常常用来做乘以2除以2操作.其中算术移位指令适用于带符号数运算,SAL用来乘2,SAR用来除以2;而逻辑移位指令则用来无符号数运算,SHL用来乘2,SHR用来除以2.

四、串处理指令

1.与REP相配合工作的MOVS,STOS和LODS指令

.REP重复串操作直到(CX)=0为上

格式: REP string primitive

其中String Primitive可为MOVS,LODS或STOS指令

执行的操作:

相关文档
最新文档