现在的位置: 首页 > 综合 > 正文

80×86的指令系统(二)

2018年03月30日 ⁄ 综合 ⁄ 共 10844字 ⁄ 字号 评论关闭

 80x86的指令系统可以分为6组:

(1)数据传输指令(2)算术指令(3)逻辑指令(4)串处理指令(5)控制转移指令(6)处理器控制指令。

下面从这6个方面分别来介绍80x86的指令系统。

一、数据传输指令
1.通用数据传输指令
MOV(move)                         传送
MOVSX(move with sign-extend)      带符号扩展传送
MOVZX(move with zero-extend)      带零扩展传送
PUSH(push onto the stack)         进栈
POP(pop from the stack)           出栈
PUSHA/PUSHAD(push all registers)  所有寄存器进栈
POPA/POPAD(pop all registers)     所有寄存器出栈
XCHG(exchange)                    交换

(1)MOV传送指令
格式:MOV DST,SRC
执行操作:(DST) <- (SRC)
功能:将源操作数送至目标操作数
特点:
(1)可以传送字节(8位)或字(16位)长的操作数
(2)可以使用各种寻址方式
(3)可以实现以下传送:
(1)寄存器与寄存器/存储器之间
(2)立即数到寄存器/存储器之间
(3)寄存器/存储器与段寄存器之间

使用举例:

 

MOV指令的正确用法

编号

MOV操作数

举例

1

寄存器,寄存器

MOV SI,BX

2

寄存器,存储器

MOV AX,COUNT[SI]

3

存储器,寄存器

MOV COUNT[SI], CX

4

寄存器,立即数

MOV AL,5

5

存储器,立即数

MOV MEM,5

6

通用寄存器,段寄存器

MOV AX, DS

7

段寄存器,通用寄存器

MOV DS,AX

8

段寄存器,存储器

MOV DS , MEM

9

存储器,段寄存器

MOV MEM, DS

       

MOV指令的错误用法

编号

举例

错误原因

1

MOV  AH , 1234H

长度不一致

2

MOV  AX, [BX][BP]

源操作数寻址方式错误,BXBP在基址变址寻址时都是作为基址的

3

MOV  AX, [SI][DI]

源操作数寻址方式错误,BXBP在基址变址寻址时都是作为变址的

4

MOV  DS, 4000H

立即数不能直接赋给段寄存器

5

MOV  CS, AX

CS寄存器不能作为目的操作数

6

MOV  10H , AL

立即数不能作为目的操作数

7

MOV  AH, BX

长度不一致

8

MOV  DS, ES

不允许两个段寄存器之间直接传送数据

9

MOV  AX, [CX]

间接寻址时,在16位寻址时可用的寄存器为BXBPSIDI,在32位寻址时可用的寄存器为EAXEBXECXEDXESPEBPESIEDI

10

MOV  [BX], [SI]

不允许存储器之间直接传送数据

 
注意事项:
(1)目标操作数不允许使用立即数。
(2)不允许两个段寄存器之间直接传送数据,不允许存储器之间直接传送数据,不允许立即数直接传送到段寄存器;但可以通过两

条MOV指令完成。
(3)MOV指令不影响标志位。
(4)目标操作数不能为CS寄存器,IP不能参与数据传送
(5)目标操作数和源操作数类型必须一致。

 

MOVSX带符号扩展指令(80386及以上使用)
源操作数可以是8位或16位的寄存器或存储器单元的内容,而目的操作数必须是16位或是32位的寄存器,传送时把源操作数的符号扩展送入目的寄存器。
MOVSX不影响标志位。

MOVZX带零扩展传送指令(80386及以上使用)
MOVZX的源操作数应为无符号整数,所以做零扩展。

2.堆栈操作指令

堆栈是由SS指定的一段存储区(≤64KB),并采用向上(地址码减小)生成方式,由堆栈指针SP指向栈项,如图所示。

入栈、出栈指令
格式:PUSH  SRC
POP  DEST
功能:PUSH指令将寄存器或存储单元的内容压入堆栈;POP指令将堆栈中的内容弹出到寄存器或存储单元中。
特点:
(1)单操作数指令,但是使用了一个隐含的操作数,该隐含操作数在堆栈中。
(2)当堆栈地址长度为16位时使用SP,当堆栈地址长度为32位时使用ESP
(3)用PUSH指令向堆栈中压入数据时总是从高地址开始逐渐向低地址方向增长的,而内存中的其它段则是从低地址开始向高地址存放数据。
(4)SP或ESP的内容在任何时候都指向当前的栈顶,所以必须修改指针。
说明:
PUSH和POP指令的操作数可能有几种情况:
(1) 寄存器(包括通用寄存器以及地址指针和变址寄存器)
(2) 段寄存器(CS例外,PUSH CS是合法的,而POP CS是非法的)
(3) 存储器
(4)立即数(PUSH可以使用,POP不能使用)

使用举例:
入栈、出栈指令操作长度为16位时,进栈或是出栈的是字,SP或ESP为-2或者+2。具体步骤如下:
PUSH AX ;(SP)←SP-2,((SP)+1)←AH,(SP)←(AL)
POP BX ;(BL)←(SP),(BH)←((SP)+1),(SP)←((SP)+2)
入栈、出栈指令操作长度为32位时,进栈或是出栈的是双字,SP或ESP为-4或者+4。具体步骤如下:
PUSH EAX ;(ESP)←ESP-4,((ESP)+3,(ESP)+2),(ESP)+1),(ESP)))← EAX
POP EBX ;(BL)←(SP),(BH)←((SP)+1),(SP)←((SP)+2)
(入栈时,高位先被压栈,低位后被压栈,栈的方向由高地址向低地址方向;出栈是则是相反,低位先出栈,高位后出栈)

标志位影响:无。

PUSHA/PUSHAD:所有的寄存器进栈指令。
POPA/POPAD:所有的寄存器出栈指令。

3.XCHG交换指令

格式:XCHG  DEST, SRC
功能:使源操作数与目标操作数进行交换。
特点:
交换指令的源操作数和目标操作数各自均可以是寄存器或存储器,但二者不能同时为存储器,即寄存器与寄存器之间,寄存器与存储器之间都可以交换,但存储器与存储器之间不

能交换。交换指令不能使用立即数,也不能使用段寄存器。交换内容可以是字(16位),也可以是字节(8位)

标志位影响:无

2.累加器专用传送指令
IN 输入
OUT 输出
XLAT 换码

这组指令只限于使用累加器EAX,AX或AL传送信息。在80x86中, 所有的I/O端口与CPU之间的数据传输都是通过IN和OUT指令完成的,CPU只能用累加器(AL、AX或者EAX)来传输信息。

外设最多可以有65536个I/O端口,端口号(外设的端口地址)位0000~FFFFH。外设的前256个端口(0~FFH)可以直接在指令中指定,这就是长格式中的PORT。当端口号大于256时,只能使

用短格式,就是把端口号放到DX寄存器中(端口号可以从0000到0FFFFH),然后再用IN或OUT指令来传送信息。

(1)IN 输入指令,把一个字节、一个字或者一个双字由一个输入端口(port)传送至AL(一个字节)、AX(一个字)或者EAX(一个双字)。
长格式:
IN AL,PORT (字节) 执行步骤:(AL) ← (PORT)
IN AX,PORT (字) 执行步骤:(AX) ← (PORT+1, PORT)
IN EAX,PORT (双字) 执行步骤:(EAX) ← (PORT+3, PORT+2, PORT+1, PORT)
短格式:
IN AL,DX (字节) 执行步骤:(AL) ← ((DX))
IN AX,DX (字) 执行步骤:(AX) ← ((DX)+1,(DX))
IN EAX,DX (双字) 执行步骤:(EAX) ← ((DX)+3,(DX)+2,(DX)+1,(DX))

(2)OUT 输出指令,把AL(一个字节)或者AX(一个字)传送至一个输出端口(port)。
长格式:
IN PORT,AL (字节) 执行步骤:(PORT) ← (AL)
IN PORT,AX (字) 执行步骤:(PORT+1,PORT) ← (AX)
IN PORT,EAX (双字) 执行步骤:(PORT+3,PORT+2,PORT+1,PORT) ← (EAX)
短格式:
IN DX,AL (字节) 执行步骤:((DX)) ← (AL)
IN DX,AX (字) 执行步骤:((DX)+1,(DX)) ← (AX)
IN DX,EAX (双字) 执行步骤:((DX)+3,(DX)+2,(DX)+1,(DX)) ← (EAX)

标志位影响:无

指针(属性)操作符  PTR
格式为: type PTR expression
type 可有 BYTE ,WORD , DWORD , NEAR ,  FAR 几种。
 例:
正确的:
MOV    BYTE  PTR  [BX] ,  12
MOV    WORD  PTR [BX] ,  12
MOV    AX , WORD  PTR  DATA
下面就是错误的,以为129操作了一个字节代表的(-127~128的范围)
MOV     BYTE  PTR  [BX] ,129

3.地址传送指令

LEA(Load Effective Address) 装入有效地址指令
格式:LEA  REG,  SRC
功能:将存储器单元的段内偏移地址(有效地址,EA)送通用寄存器
特点:指令的目的操作数可使用16位或32位寄存器,但不能使用段寄存器;源操作数必须是内存操作数,只有内存操作数的寻址方式中有有效地址这一概念。
标志位影响:无

LDS、LES、LFS、LGS、LSS指针送寄存器和段寄存器指令
以LDS为例:
格式:LDS  REG , SRC
当指令指定的寄存器为16位时,将存储器地址指针所指向的低地址中的字送寄存器,高地址中的字送DS;当指令指定的寄存器为32位时,将存储器地址指针所指向的低地址中的双

字(32位)送寄存器,高地址中的字(16位)送DS。

这里提一下:
偏移量运算符 OFFSET
格式为:OFFSET  Variable 或 Label ,   
功能:将回送变量或标号的偏移地址。
  例:MOV  BX ,  OFFSET  TABLE
将TABLE的偏移地址作为立即数回送给指令,而在执行时则将该偏移地址装入BX寄存器。
它等价于指令  LEA BX, TABLE

4、标志传送指令
读取标志指令:LAHF, 标志寄存器的值送入AH,(AH)← (FLAGS的低字节)
设置标志指令:SAHF, AH的值送入标志寄存器,(FLAGS的低字节)->(AH)
标志位入栈指令:PUSHF
标志出栈指令:POPF/POPFD

5、类型转换指令
CBW (Convert byte to word) 字节转换为双字
CWD (Convert word to double word) 个字转换成双字
CDQ (Convert double to quad)
对于无符号数,扩展字长只需在高位添加足够个数的零即可;对于带符号数,扩展字长时正数与负数的处理方法不同,正数的符号位为零,而负数的符号位为1。扩展字长时,应分

别在高位添加相应的符号。

二 、算术运算类指令(Arithmetic)

80x86的算术运算指令包括二进制运算和十进制运算指令。算术指令用来执行算术运算,有双操作数指令,也有单操作数指令。

1.加法指令ADD(Addition)
格式:ADD DEST,SRC
功能:将目标操作数与源操作数相加,结果存回目标操作数,加法指令影响大多数标志位。PF(奇偶)、ZF、CF、SF、AF、OF等。
特点:
目标操作数可以是寄存器或存储器,源操作数可以是立即数、寄存器或存储器;但两者不能同时为存储器。另外不能对段寄存器进行加、减、乘、除运算。

2.ADC(Add with carry)
格式:ADC DEST,SRC
功能:将目标操作数与源操作数相加,再加上进位标志CF的 内容,将结果返回目标操作数。同样影响大多数标志位。

3.INC(Increment by1)
格式:INC DEST
功能:将目标操作数加1。影响大多数标志位,SF、ZF、AF、PF、OF,但对进位标志CF没有影响。
特点:操作数类型可以是寄存器或存储器,但不能是段寄存器。

4. AAA(ASC adjust for addition)Ⅱ非压缩的BCD码加法的十进制调整指令

5. DAA(Decimal adjust for addition) 压缩BCD码加法的十进制调整指令

6.压缩BCD码减法的十进制调整指令:DAS

7.非压缩的BCD码减法的十进制调整指令:AAS

8.XADD交换并相加指令
格式:XADC DEST,SRC

该指令只能用于80486及其以后的微处理器。
该指令的源操作数只能用寄存器寻址方式,目的操作数则可用寄存器或任一种存储器寻址方式。对标志位的影响和ADD指令相同。

(二)、减法指令(Subtraction)
1. SUB(普通减法指令)
格式:SUB DEST,SRC
功能:SUB指令将目标操作数减源操作数,结果送回目标操作数。
注意:指令对标志位SF、ZF、AF、PF、CF和OF有影响。
操作数的类型与加法指令一样,即目标操作数可以是寄存器或存储器,源操作数可以是立即数、寄存器或存储器,但不允许两个存储器相减。

2. SBB(Subtraction with borrow)
格式:SBB DEST SRC
功能:SBB指令执行带借位的减法操作
将目标操作数减源操作数,然后再减进位标志CF,并将结果送回目标操作数。

SBB指令对标志位的影响与SUB指令相同。目标操作数及源操作数的类型与SUB指令相同。带借位减指令主要用于多字节的减法。

3. DEC(Decrement by 1)
格式:DEC DEST
功能:将目标操作数减1,对标志位SF、ZF、AF、PF和OF有影响,但不影响进位标志CF。
操作数的类型与INC指令一样,可以是寄存器或存储器(段寄存器不可)。字节操作或字操作均可。

4. NEG(Negate)
格式:NEG DEST
功能:求补指令。它是用0减去目标操作数,结果送回原来的目标操作数。求补指令对大多数标志位如SF、ZF、AF、PF、CF及OF有影响。操作数的类型可以是寄存器或存储器,可以

对8位数或16位数求补。

5. CMP(Compare)
格式:CMP DEST,SRC
功能:将目标操作数减源操作数,但结果不送回目标操作数,且两操作数内容均保持不变,其结果反映在标志位上。
目标操作数可以是寄存器或存储器,源操作数,源操作数可以是立即数,寄存器或存储器。

(三)、乘法指令(Multiplication)
1. MUL(Multiplication unsigned)
格式:MUL SRC

2. IMUL(Integer multiplication)
格式:IMUL SRC

功能:进行带符号的乘法,两个操作数均按带符号数处理,这是与MUL的区别。

(四)、除法指令(Division)

1. DIV(Division)
格式:DIV SRC
功能:执行无符号数除法。

2. IDIV(Integer division)
格式:IDIV SRC
功能:带符号数的除法

三、逻辑运算和移位指令
(一)、逻辑运算指令
1. NOT(Logical not)
格式:NOT DEST
功能:将操作数求反。

2. AND(Logical and)
格式:AND DEST,SRC
功能:将目标操作数和源操作数按位进行逻辑“与”运算,并将结果送回目标操作数。

3. TEST(Test or nondestructive logical and)
格式:TEST DEST,SRC

4. OR(Logical inclusive or)
格式:OR DEST,SRC

功能:将目标操作数与源操作数按位进行逻辑“或”运算,并将结果送回目标操作数。操作数的类型与AND相同。

5. XOR(Logical exclusive or)
格式:XOR DEST,SRC
功能:将目标操作数与源操作数按位进行逻辑“异或”运算,并将结果送回目标操作数。XOR操作数的类型与AND相同。

(二)、移位指令

1. SHL/SAL (Shift logical left/Shift arithmetic left)
格式: SHL DEST,1 SAL DEST,1
或 SHL DEST,CL SAL DEST,CL
功能:将目标操作数顺序向左移1位或CL寄存器中指定的位数。左移1位时,操作数的最高位移入进位标志CF,最低位补0。

2.SHR(Shift logical right)
格式: SHR DEST,1 或 SHR DEST,CL
功能: 逻辑右移
它将影响CF和OF标志位。如果移位次数等于1,且移位以后新的最高位和次高位不相等,则(OF)=1,否则(OF)=0,实质上此时OF的值仍然表示符号位在移位前后是否改变。如果移位

次数不等与1则of的值不定。

3.SAR (Shift Arithmentic Right)
格式: SAR DEST , 1
或 SAR DEST , CL
功能:算数右移
它与SAR的主要区别是算术右移时最高位保持不变。对标志位 CF,OF,PF,SF和IF有影响,但AF值不确定。

(三)循环移位指令(Rotate)
循环指令中的左移或右移的位数也可以是1或由CL寄存器指定,但不能是以外的常数或CL以外的其他寄存器。其余与移位指令相同
所有循环移位指令都只影响进位标志CF和溢出标志OF,但OF标志的含义对于左循环移位指令和右循环移位指令将有所不同。
1. ROL (Rotate Left)
格式: ROL DEST , 1
或 ROL DEST , CL

2.ROR(Rotate Right)
格式:ROR DEST , 1
或 ROR DEST , CL
功能:ROR指令将目标操作数向右循环移动1位或由CL寄存器指定的位数最低位移到进位标志CF同时最低位移到最高位

3.RCL (Rotate Left Though Caary)
格式:RCL DEST ,1
或 RCL DEST ,CL
功能:将目标操作数连同进位标志CF一起向左循环移动1位或由CL寄存器指定的位数,最高位移入进位标志CF,而CF移入最低位
RCL 影响进位标志与ROL;相同

4.RCR(rotate right through carry)
格式:RCR DEST 1
或 RCR DEST CL
功能:将目标操作数与进位标志CF一起向右循环移动 1位 或有CL寄存器指定的为数最底为移入进位标志CFCF则移入最高位里。

四、串操作指令(STRING MANIPULATIOM)

1 MOVS(MOV STRING)字符串传送指令
格式:MOVS DST, SRC
MOVSB
MOVSW
MOVSD

功能:将源变址寄存器指向的数据段中的一个字(或字节、或双字)传送到由目的变址寄存器指向的数据段中的一个字(或字节、或双字)中去,同时根据方向标志及字长来对源变址

寄存器和目的变址寄存器的值进行修改。

2 CMPS (COMPARA STRING)字符串比较指令

2 SCAS (SCAN STRING)串扫描指令

4 LODS (LOAD STRINGV) 从串取指令
格式:LODS SRC
LODSB
LODSW
LODSD
功能:将源变址寄存器指向的数据段中的一个字符串中字符(或者字、或者双字)逐个装入累加器AL(或AX、EAX),并根据方向标志和字长修改源变址寄存器的内容。

5、STOS (STORE STRINGV)存入串指令
格式:
STOS DST
STOSB
STOSW
STOSD
功能:该指令将累加器AL(或AX、EAX)的内容存入由目的变址寄存器指向的数据段的某单元中,并根据方向标志和字长修改目的变址寄存器的内容。

特点:
(1)采用SI寄存器寻址源操作数,用DI寄存器寻址目的操作数;源操作数的数据段隐含在段寄存器DS,也允许段超越,目的操作数的数据段隐含在段寄存器ES,不允许段超越。
(2)每次操作后的地址增加或者减少取决于方向标志位DF, DF = 0 时,地址指针增加; DF = 1 时,地址指针减少。

 

五、控制转移指令(CONTROL TRANSFER)

1.无条件转移指令JMP(JUMP)
格式:JMP NEAR-LABEL;(IP)←+DISP(16位)
功能:无条件转移到指令指定的地址去执行从该地址开始的指令。
特点:转移分两类:段内转移和段间转移。段内转移是指在同一段的范围内进行转移,只需要改变IP或EIP寄存器的内容;段间转移则需要更改CS寄存器和IP或EIP寄存器的内容.

(1)段内直接短转移
格式: JMP SHORT OPR
执行的操作:(IP) ← (IP) + 8 位位移量
80386及其以后:(EIP) ←(EIP) + 8 位位移量
特点:8位位移量由目标地址OPR确定。

(2)段内直接近转移
格式: JMP NEAR PTR OPR

(3)段内间接近转移
格式: JMP WORD PTR OPR

(4)段间直接远转移
格式: JMP FAR PTR OPR

(5)段间间接远转移
格式: JMP DWORD PTR OPR

2. 条件转移指令JCC
格式:JCC SHORT_LABEL
功能:满足条件转移(短标号)的条件,则转移,不满足条件的继续执行下面的程序。
特点:条件转移使用了相对寻址的方式,只能使用JMP中的短转移和近转移两种格式。

(1)根据单个条件标志的设置情况转移

(2)比较两个无符号数,并根据比较的结果转移。

(3)比较两个有符号数,并根据比较的结果转移。

3.循环指令
(1)LOOP循环

(2)LOOPE/LOOPZ (LOOP IF EQU/LOOP IF ZERO),当相等或为 0 时循环
格式:LOOPE SHORT_LABEL 或 LOOPZ SHORT_LABEL

(3)LOOPNE/LOOPNZ(LOOP IF NOT EGUD/LOOP IF NOT ZERO),当不相等或不为 0 时循环
格式: LOOPNE SHORT_LABEL 或 LOOPNZ

执行步骤:
(1)如果地址长度为16位时,CX ← CX - 1;地址长度为32位时,ECX ← ECX - 1。
(2)检查是否满足测试条件,如果满足且操作数的长度为16位,则(IP) ← (IP) + D8的符号扩展如果满足且操作数的长度为16位,则(EIP) ← (EIP) + D8的符号扩展。

4.过程调用指令
1. CALL (CALL A PROCEDURE)
(1) 段内直接调用
格式:CALL DST
功能:将IP寄存器压入堆栈,然后将寄存器或存储器的内容送入到IP。
特点:DST给出子程序的入口地址。

(2) 段内间接调用
格式:CALL DST
功能:将IP寄存器压入堆栈,然后将寄存器或存储器的内容送入到IP。
特点:DST可以使用寄存器寻址或是任意一种存储器寻址方式。

(3) 段间直接调用
格式:CALL FAR-PROC
功能:将CS中的段地址和IP内容压入堆栈,并将过程所在的段值SEG FAR-PROC送CS寄存器,再将IP中的偏移地址OFFSET FAR-PROC送IP寄存器。

(4)段间间接调用
格式: CALL MEN32
功能:先将CS寄存器压入堆栈,并将存储器的后两个字节送入到CS,再将IP寄存器压入堆栈,然后将存储器的前两个字节送入到IP寄存器。

5.返回指令 RET
RET 指令放在子程序的末尾,在子程序结束后返回调用程序继续执行。

(1)段内近返回
格式:RET

(2)段内带立即数近返回
格式:RET EXP

(3)段间远返回
格式:RET

(4)段间带立即数远返回
格式:RET EXP
特点:RET指令的操作是将返回地址出栈送入到IP或EIP寄存器(段内或段间)和CS寄存器(段间)。

6.中断
中断分内部中断和外部中断。内部中断包括如除0才产生的中断,外部中断则是处理外设与CPU之间的通信。当CPU响应中断时,需要把IP(EIP)和CS入栈,还要把标志位寄存器的值

(FLAGS或EFLAGS)入栈,然后去执行中断例行程序,执行结束后返回并恢复入栈的相应的寄存器的值。中断例行程序的入口地址称为中断向量,由于每个中断向量占有4个字节单元

,所以中断指令中指定的类型号N需要乘以4才能取得所指定类型的中断向量。

1.INT(INTERRUPT)
格式:INT N ;N为中断类型号值为0~255
功能:将标志位寄存器入栈,清中断标志IF,再将CS寄存器入栈,然后将中断类型号乘以4,得到中断矢量的地址,中断矢量的第二个字送入CS寄存器。将IP寄存器入栈,并将中断

矢量的第一个字送入IP,然后转到相应的中断例行服务程序。INT N指令除了将IF和TF清零外对其他标志位没有影响。

2.INTO (INTERRUPT OF OVERFLOW) 溢出中断
格式:INTO
功能:检测溢出标志OF,如果OF=1则启动中断程序,否则无操作。

3.IRET (INTERRUPT RETURN) 中断返回指令
格式: IRET
功能:将入栈的断点的段地址和偏移地址弹出时,并返回到原来发生中断的地方,同时恢复标志位寄存器的内容。

六、处理器控制指令

1.标志处理指令
(1)CLC (Clear carry flag)
格式:CLC
功能:清除进位标志,即 C = 0。

(2)CMC (Complement carry flag)
格式:CMC
功能:将标志位C取反。

(3)STC (Set carry flag)
格式:STC
功能:将标志位C = 1。

(4) CLD (Clear direction flag)
格式: CLD.
功能: 将标志位 D = 0 时;在串操作指令时,SI和DI寄存器的地址指针自动增加。

(5)STD (Set direction flag)
格式: STD
功能: 将标志位 D = 01时;在串操作指令时,SI和DI寄存器的地址指针自动减少。

(6)CLI (Clear interrupt enable flag)
格式: CLI
功能: 将中断允许标志位清除,即将标志位 I = 1。

(7)STI (Set interrupt enable flag)
格式:STI
功能: 禁止中断标志位,即将标志位 I = 0。

特点:以上指令都为一字节的指令,执行的时间都为两个时钟周期。

2.其他控制指令
(1)NOP (No operation)
功能:无操作指令,它不执行任何操作,其机器码占有一个字节单元。

(2)HLT (halt)
功能:该指令使得微处理器暂停工作,等待一次外部中断的到来,中断结束后可继续执行下面的程序。

(3)ESC (escape)
功能:在使用协处理器是,可以指定由协处理器执行的指令。

(4)WAIT (wait)
功能:该指令使得微处理器处于等待状态,可以用来等待外部中断的发生,但中断结束后仍然返回WAIT指令继续等待。

(5)LOCK (lock)
功能:该指令是一种前缀,它可以放在任何指令前面,用来锁存总线直到下一条指令执行完成为止。

(6)BOUND (bound)
功能:检查给出的数组的下标是否在规定的上下界之内。
特点:只能由于80286及以后的微处理器。

(7)ENTER (enter)
功能:在过程调用时为方便传递参数而建立堆栈帧所用。堆栈帧是一个动态存储区。
特点:只能由于80286及以后的微处理器。

(8)LEAVE (leave)
功能:
特点:只能由于80286及以后的微处理器。

七、输入输出指令(INPUT AND OUTPUT)

1、IN (INPUT BYTE OR WORD)
格式:IN ACC PORT;
功能:将一个字节或一个字从一个输入端口传输到累加器(ACC)。

2、OUT (OUTPUT BYTE OR WORD)
格式: OUT PORT ACC;
功能:将累加器中的数据传送到一个输出端口。

特点:端口地址可以由指令中的 n 规定,也可以包括在寄存器DX中。

引用及参考资料:
[1] 微型计算机系统原理及应用(第四版),周明德
[2] IBM PC 汇编语言程序设计,沈美明 温冬婵
[3] 8086指令系统

 

抱歉!评论已关闭.