AND
逻辑与运算指令 AND
格式: AND OPRD1,OPRD2
功能: 对两个操作数实现按位逻辑与运算,结果送至目的操作数.本指令可以进行字节或字的‘与’运算,
OPRD1<--OPRD1 and OPRD2.
说明:
1. 目的操作数OPRD1为任一通用寄存器或存储器操作数.源操作数OPRD2为立即数,任一通用寄存器或存储器操作数.
2. 示例: AND AL,0FH ;(AL)<--(AL) AND 0FH
AND AX,BX ;(AX)<--(AX) AND (BX)
AND DX,BUFFER[SI+BX]
AND BETA[BX],00FFH
注意: 两数相与,有一个数假则值为假
DAS
组合十进制减法调整指令 DAS(Decimal Adjust for Subtraction)
格式: DAS
功能: 对两个组合十进制数相减后存于AL中的结果进行调整,调整后产生一个组合的十进制数且仍存于AL中.
说明:
调整操作
若(AL) and 0FH > 9 或 AF=1,则(AL)<--(AL)-6,AF=1
若(AL) and 0F0H > 90H 或 CF=1,则(AL)<--(AL)-60,CF=1
DEC
减一指令 DEC(Decrement by 1)
格式: DEC OPRD
功能: OPRD<--OPRD-1
说明:
1. OPRD 为寄存器或存储器操作数.
2. 这条指令执行结果影响AF、OF、PF、SF、ZF标志位,但不影响CF标志位.
3. 示例 DEC AX
DEC CL
DEC WORD PTR[DI]
DEC ALFA[DI+BX]
DIV
无符号数除法指令 DIV(DIVision)
格式: DIV OPRD
功能: 实现两个无符号二进制数除法运算.
说明:
1. 其中OPRD为任一个通用寄存器或存储器操作数.
2. 字节相除,被除数在AX中;字相除,被除数在DX,AX中,除数在OPRD中.
字节除法: (AL)<--(AX)/OPRD,(AH)<--(AX)MOD OPRD
字除法: (AX)<--(DX)(AX)/OPRD,(DX)<--(DX)(AX) MOD OPRD
IN
输入指令 IN
格式: IN AL,n ;(AL)<--(n)
IN AX,n ;(AX)<--(n+1),(n)
IN AL,DX ;(AL)<--[(DX)]
IN AX,DX ;(AX)<--[(DX)+1],[(DX)]
功能: 输入指令
说明:
1. 其中n为8位的端口地址,当字节输入时,将端口地址n+1的内容送至AH中,端口地址n的内容送AL中.
2. 端口地址也可以是16位的,但必须将16位的端口地址送入DX中.当字节寻址时,由DX内容作端口地址的内容送至AL中;
当输入数据字时,[(DX)+1]送AH,[(DX)]送AL中,用符号:(AX)<--[(DX)+1],[(DX)]表示.
INT
软中断指令 INT
格式: INT n 其中n为软中断的类型号.
功能: 本指令将产生一个软中断,把控制转向一个类型号为n的软中断,该中断处理程序入口地址在中断向量表的n*4地址
处的二个存储器字(4个单元)中.
说明: 操作过程与INTO指令雷同,只需将10H改为n*4即可.所以,本指令也将影响标志位IF及TF.
INTO
溢出中断指令 INTO(INTerrupt if Overflow)
格式: INTO
功能: 本指令检测OF标志位,当OF=1时,说明已发生溢出,立即产生一个中断类型4的中断,当OF=0时,本指令不起作用.
说明:
1. 本指令影响标志位IF及TF.
2. 本指令可用于溢出处理,当OF=1时,产生一个类型4的软中断.在中断处理程序中完成溢出的处理操作.
LES
从存储器取出32位地址的指令 LES
格式: LES OPRD1,OPRD2
功能: 从存储器取出32位地址的指令.
说明:
OPRD1 为任意一个16位的寄存器.
OPRD2 为32位的存储器地址.
示例: LES SI,ABCD
LES BX,FAST[SI]
LES DI,[BX]
注意: 上面LES DI,[BX]指令的功能是把BX所指的32位地址指针的段地址送入ES,偏移地址送入DI.
NOT
逻辑非运算指令 NOT
格式: NOT OPRD
功能: 完成对操作数按位求反运算(即0变1,1变0),结果关回原操作数.
说明:
1. 其中OPRD可为任一通用寄存器或存储器操作数.
2. 本指梳令可以进行字或字节‘非’运算.
3. 本指令不影响标志位.
OR
逻辑或指令 OR
格式: OR OPRD1,OPRD2
功能: OR指令完成对两个操作数按位的‘或’运算,结果送至目的操作数中,本指令可以进行字节或字的‘或’运算.
OPRD1<--OPRD1 OR OPRD2.
说明:
1. 其中OPRD1,OPRD2含义与AND指令相同,对标志位的影响也与AND指令相同.
2. 两数相或,有一个数为真则值为真.
OUT
输出指令 OUT
格式: OUT n,AL ;(n)<--(AL)
功能: 输出指令
说明:
1. OUT n,AX ;(n+1),(n)<--(AX)
OUT DX,AL ;[(DX)]<--(AL)
OUT DX,AX ;[(DX)+1],[(DX)]<--(AX)
2. 输入指令及输出指令对标志位都不影响.
POP
堆栈操作指令 PUSH和POP
格式: PUSH OPRD
POP OPRD
功能: 实现压入操作的指令是PUSH指令;实现弹出操作的指令是POP指令.
说明:
1. OPRD为16位(字)操作数,可以是寄存器或存储器操作数.
2. POP指令的操作过程是: POP OPRD:OPRD<--((SP)),(SP)<--(SP)+2
它与压入操作相反,是先弹出栈顶的数顶,然后再修改指针SP的内容.
3. 示例: POP AX
POP DS
POP DATA1 POP ALFA[BX][DI]
4. PUSH和POP指令对状态标志位没有影响.
RET
返回指令 RET
格式: RET
功能: 当调用的过程结束后实现从过程返回至原调用程序的下一条指令,本指令不影响标志位.
说明:
由于在过程定义时,已指明其近(NEAR)或远(FAR)的属性,所以RET指令根据段内调用与段间调用,执行不同的操作
对段内调用: 返回时,由堆栈弹出一个字的返回地址的段内偏移量至IP.
对段外调用: 返回时,由堆栈弹出的第一个字为返回地址的段内偏移量,将其送入IP中,由堆栈弹出第二个字为返回地址的段基址,将其送入CS中.
SAL
算术左移指令 SAL(Shift Arithmetic Left)
格式: SAL OPRD1,COUNT
功能: 其中OPRD1,COUNT与指令SHL相同.本指令与SHL的功能也完全相同,这是因为逻辑左移指令与算术左移指令所要完成的操作是一样的.
说明:
1. 其中OPRD1为目的操作数,可以是通用寄存器或存储器操作数.
2. COUNT代表移位的次数(或位数).移位一次,COUNT=1;移位多于1次时,COUNT=(CL),(CL)中为移位的次数.
SAR
算术右移指令 SAR
格式: SAR OPRD1,COUNT
功能: 本指令通常用于对带符号数减半的运算中,因而在每次右移时,保持最高位(符号位)不变,最低位右移至CF中.
说明:
1. 其中OPRD1为目的操作数,可以是通用寄存器或存储器操作数.
2. COUNT代表移位的次数(或位数).移位一次,COUNT=1;移位多于1次时,COUNT=(CL),(CL)中为移位的次数.
SUB
减法指令SUB(SUBtract)
格式: SUB OPRD1,OPRD2
功能: 两个操作数的相减,即从OPRD1中减去OPRD2,其结果放在OPDR1中.
说明:
示例 SUB DX,CX
SUB [BX+25],AX
SUB DI,ALFA[SI]
SUB CL,20
SUB DATA1[DI][BX],20A5H
TEST
测试指令 TEST
格式: TEST OPRD1,OPRD2
功能: 其中OPRD1、OPRD2的含义同AND指令一样,也是对两个操作数进行按位的'与'运算,唯一不同之处是不将'与'的结
果送目的操作数,即本指令对两个操作数 的内容均不进行修改,仅是在逻辑与操作后,对标志位重新置位.
说明: TEST与AND指令的关系,有点类似于CMP与SUB指令之间的关系.