查看: 54536|回复: 19
收起左侧

[评测] OD 汇编指令 【更新完毕,重新排版】

[复制链接]
极限度—魔
发表于 2012-8-3 15:50:22 | 显示全部楼层 |阅读模式
本帖最后由 极限度—魔 于 2012-8-4 13:56 编辑

A
C
D
E
H
L
N
M
O
P
R
S
T
W
X



A


ADD

加法指令 ADD(Addition)

格式: ADD OPRD1,OPRD2

功能: 两数相加
说明:

1. OPRD1为任一通用寄存器或存储器操作数,可以是任意一个通用寄存器,而且还可以是任意一个存储器操作数.

   OPRD2为立即数,也可以是任意一个通用寄存器操作数.立即数只能用于源操作数.

2. OPRD1和OPRD2均为寄存器是允许的,一个为寄存器而另一个为存储器也是允许的, 但不允许两个都是存储器操作数.

3. 加法指令运算的结果对CF、SF、OF、PF、ZF、AF都会有影响.以上标志也称为结果标志.加法指令适用于无符号数或有符号数的加法运算.


====================================================================
ADC

带进位加法指令 ADC(Addition Carry)

格式: ADC OPRD1,OPRD2

功能: OPRD1<--OPRD1 + OPRD2 + CF

说明:

1. OPRD1为任一通用寄存器或存储器操作数,可以是任意一个通用寄存器,而且还可以是任意一个存储器操作数.
   OPRD2为立即数,也可以是任意一个通用寄存器操作数.立即数只能用于源操作数.

2. OPRD1和OPRD2均为寄存器是允许的,一个为寄存器而另一个为存储器也是允许的,但不允许两个都是存储器操作数.

3. 加法指令运算的结果对CF、SF、OF、PF、ZF、AF都会有影响.以上标志也称为结果标志.

4. 该指令对标志位的影响同ADD指令.


====================================================================
AAA

未组合的十进制加法调整指令 AAA(ASCII Adgust for Addition)

格式: AAA

功能: 对两个组合的十进制数相加运算(存在AL中)的结果进行调整,产生一个未组合的十进制数放在AX中.

说明:

1. 组合的十进制数和未组合的十进制数:在计算中,十进制数可用四位二进制数编码,称为BCD码.

  当一个节(8位)中存放一位BCD码,且放在字节的低4位, 高4位为时称为未组合的BCD码.

2. AAA的调整操作
   
  若(AL) and 0FH>9 或 AF=1,则调整如下:
   
  (AL)<--(AL)+6,(AH)<--(AH)+1,AF=1,CF<--AF,(AL)<--(AL) and 0FH


====================================================================
AAS

未组合十进制减法调整指令 AAS(ASCII Adjust for Subtraction)

格式: AAS

功能: 对两个未组合十进制数相减后存于AL中的结果进行调整,调整后产生一个未组合的十进制数数且仍存于AL中.

说明:

1. 本指令影响标志位CF及AF.

2. 调整操作
   
  若(AL) and 0FH > 9 或 AF=1

  则(AL)<--(AL)-6,(AH)<--(AH)-1,CF<--AF,(AL)<--(AL) and 0FH,

  否则(AL)<--(AL) and 0FH


====================================================================
AAM

未组合十进制数乘法调整指令 AAM(ASCII Adjust MULtiply)

格式: AAM

功能: 对两个未组合的十进制数相乘后存于AX中的结果进行调整,产生一个未组合的十进制数存在AL中.

说明:

1. 实际上是两个未组合的十进制数字节相乘,一个0~9的数与另一个0~9的数相乘其积最大为81.为了得到正确的结果,应进行如下调整:
   
   乘积: (AH)<--(AL)/10
         (AL)<--(AL)MOD10

2. 本指令应跟在MUL指令后使用,乘积的两位十进制结果,高位放在AH中,低位放在AL中.AH内容是MUL指令的结果被10除的商,即(AL)/10,而最后的AL内容是乘积被10整除的余数(即个位数).


====================================================================
AAD

未组合十进制数除法调整指令 AAD(ASCII Adjust for Division)

格式: AAD

功能: 在除法指令前对AX中的两个未组合十进制数进行调整,以便能用DIV指令实现两个未组合的十进制数的除法运算,其结果为未组合的十进制数,商(在AL中)和余数(在AH中).

说明:

1. AAD指令是在执行除法DIV之前使用的,以便得到二进制结果存于AL中,然后除以OPRD,得到的商在AL中,余数在AH中.

2. 示例: MOV BL,5
         MOV AX,0308H
         AAD           ;(AL)<--1EH+08H=26H,(AH)<--0
         DIV BL        ;商=07H-->(AL),余数=03H-->(AH).


====================================================================
AND

逻辑与运算指令 AND

格式: AND OPRD1,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
注意: 两数相与,有一个数假则值为假

评分

参与人数 1经验 +70 收起 理由
mengld + 70 版区有你更精彩: )

查看全部评分

极限度—魔
 楼主| 发表于 2012-8-3 15:53:20 | 显示全部楼层
B开头没有,跳到C

Call

过程调用指令 CALL

格式: CALL OPRD

功能: 过程调用指令

说明:

1. 其中OPRD为过程的目的地址.

2. 过程调用可分为段内调用和段间调用两种.寻址方式也可以分为直接寻址和间接寻址两种.

3. 本指令不影响标志位.


====================================================================
CMPS

字符串比较指令

格式: CMPS  OPRD1,OPRD2
      CMPSB
      CMPSW  

功能: 由SI寻址的源串中数据与由DI寻址的目的串中数据进行比较,比较结果送标志位,而不改变操作数本身.
      同时SI,DI将自动调整.

说明:

1. 其中OPRD2为源串符号地址,OPRD1为目的串符号地址.

2. 本指令影响标志位AF、CF、OF、SF、PF、ZF.本指令可用来检查二个字符串是否相同,可以使用循环控制方法对整串进行比较.

3. 与MOVS相似,CMPS指令也可以不使用操作数,此时可用指令CMPSB或CMPSW分别表示字节串比较或字串比较.


====================================================================
CMPSB

格式: CMPS  OPRD1,OPRD2
      CMPSB
      CMPSW  

功能: 由SI寻址的源串中数据与由DI寻址的目的串中数据进行比较,比较结果送标志位,而不改变操作数本身.
      同时SI,DI将自动调整.

说明:

1. 其中OPRD2为源串符号地址,OPRD1为目的串符号地址.

2. 本指令影响标志位AF、CF、OF、SF、PF、ZF.本指令可用来检查二个字符串是否相同,可以使用循环控制方法对整串进行比较.

3. 与MOVS相似,CMPS指令也可以不使用操作数,此时可用指令CMPSB或CMPSW分别表示字节串比较或字串比较.


===================================================================
CMPSW

字符串比较指令

格式: CMPS  OPRD1,OPRD2
      CMPSB
      CMPSW  

功能: 由SI寻址的源串中数据与由DI寻址的目的串中数据进行比较,比较结果送标志位,而不改变操作数本身.
      同时SI,DI将自动调整.

说明:

1. 其中OPRD2为源串符号地址,OPRD1为目的串符号地址.

2. 本指令影响标志位AF、CF、OF、SF、PF、ZF.本指令可用来检查二个字符串是否相同,可以使用循环控制方法对整串进行比较.

3. 与MOVS相似,CMPS指令也可以不使用操作数,此时可用指令CMPSB或CMPSW分别表示字节串比较或字串比较.


===================================================================
CLC

处理器控制指令-标志位操作指令

格式:
     CLC   ;置CF=0
     STC   ;置CF=1
     CMC   ;置CF=(Not CF)进位标志求反
     CLD   ;置DF=0
     STD   ;置DF=1
     CLI   ;置IF=0,CPU禁止响应外部中断
     STI   ;置IF=1,使CPU允许向应外部中断

功能: 完成对标志位的置位、复位等操作.

说明: 例如串操作中的程序,经常用CLD指令清方向标志使DF=0,在串操作指令执行时,按增量的方式修改吕指针.


====================================================================
CMC

处理器控制指令-标志位操作指令

格式:
     CLC   ;置CF=0
     STC   ;置CF=1
     CMC   ;置CF=(Not CF)进位标志求反
     CLD   ;置DF=0

说明: 例如串操作中的程序,经常用CLD指令清方向标志使DF=0,在串操作指令执行时,按增量的方式修改吕指针.


====================================================================
CLD

处理器控制指令-标志位操作指令

格式:
     CLC   ;置CF=0
     STC   ;置CF=1
     CMC   ;置CF=(Not CF)进位标志求反
     CLD   ;置DF=0
     STD   ;置DF=1
     CLI   ;置IF=0,CPU禁止响应外部中断
     STI   ;置IF=1,使CPU允许向应外部中断

功能: 完成对标志位的置位、复位等操作.

说明: 例如串操作中的程序,经常用CLD指令清方向标志使DF=0,在串操作指令执行时,按增量的方式修改吕指针.


====================================================================
CLI

处理器控制指令-标志位操作指令

格式:
     CLC   ;置CF=0
     STC   ;置CF=1
     CMC   ;置CF=(Not CF)进位标志求反
     CLD   ;置DF=0

说明: 例如串操作中的程序,经常用CLD指令清方向标志使DF=0,在串操作指令执行时,按增量的方式修改吕指针.
极限度—魔
 楼主| 发表于 2012-8-3 15:56:11 | 显示全部楼层
D



DAA

组合的十进制加法调整指令 DAA(Decimal Adjust for Addition)

格式: DAA

功能: 对AL中的两个组合进制数相加的结果进行调整,调整结果仍放在AL中,进位标志放在CF中.

说明:

1. 调整操作如下
(1) 若(AL) and 0FH>9 或 AF=1,则(AL)<--(AL)+6,AF<--1,对低四位的调整.

(2) 若(AL) and 0F0H>90H 或 CF=1,则(AL)<--(AL)+60H,CF<--1.         

2. 示例: (AL)=18H,(BL)=06H
         ADD AL,BL  ;  (AL)<--(AL)+(BL)   ;  (AL)=1EH
         DAA        ;  (AL)


======================================================================
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]


======================================================================
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

======================================================================
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

极限度—魔
 楼主| 发表于 2012-8-3 15:57:51 | 显示全部楼层
E



ESC

处理器交权指令 ESC

格式: ESC EXTOPRD,OPRD

功能: 使用本指令可以实现协处理器出放在ESC指令代码中的6位常数,该常数指明协处理器要完成的功能.
      
      当源操作数为存储器变量时,则取出该存储器操作数传送给协处理器.

说明:

1. 其中EXTOPRD为外部操作码,OPRD为源操作数.

2. 本指不影响标志位.

极限度—魔
 楼主| 发表于 2012-8-3 16:05:14 | 显示全部楼层
本帖最后由 极限度—魔 于 2012-8-3 16:07 编辑

H


HLT

处理器暂停指令 HLT

格式: HLT

功能: 使处理器处于暂时停机状态.

说明:

1. 本指令不影响标志位.

2. 由执行HLT引起的暂停,只有RESET(复位)、NMI(非屏蔽中断请求)、INTR(可屏蔽的外部中断请求)信号可以使

   其退出暂停状态.它可用于等待中断的到来或多机系统的同步操作.
极限度—魔
 楼主| 发表于 2012-8-3 16:08:06 | 显示全部楼层
L


LEA

有效地址传送指令 LEA

格式: LEA OPRD1,OPRD2

功能: 将源操作数给出的有效地址传送到指定的的寄存器中.

说明:

1. OPRD1 为目的操作数,可为任意一个16位的通用寄存器.
   
OPRD2 为源操作数,可为变量名、标号或地址表达式.  

      示例: LEA BX,DATA1
            LEA DX,BETA[BX+SI]
            LEA BX BX,[BP],[DI]

2. 本指令对标志位无影响。

====================================================================
LDS

从存储器取出32位地址的指令 LDS

格式: LDS OPRD1,OPRD2

功能: 从存储器取出32位地址的指令.

说明:

OPRD1 为任意一个16位的寄存器.

OPRD2 为32位的存储器地址.

示例: LDS SI,ABCD
      LDS BX,FAST[SI]
      LDS DI,[BX]

注意: 上面LDS DI,[BX]指令的功能是把BX所指的32位地址指针的段地址送入DS,偏移地址送入DI.


====================================================================
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.


======================================================================
LOOP

循环控制指令LOOP

格式: LOOP 标号

功能: (CX)<--(CX)-1,(CX)<>0,则转移至标号处循环执行, 直至(CX)=0,继续执行后继指令.

说明:

1. 本指令是用CX寄存器作为计数器,来控制程序的循环.

2. 它属于段内SHORT短类型转移,目的地址必须距本指令在-128到+127个字节的范围内.


====================================================================
LOOPZ

循环控制指令LOOPZ/LOOPE

格式: LOOPZ/LOOPE 标号

功能: (CX)<--(CX)-1,(CX)<>0 且ZF=1时,转至标号处循环

说明:

1. 本指令是用CX寄存器作为计数器,来控制程序的循环.

2. 它属于段内SHORT短类型转移,目的地址必须距本指令在-128到+127个字节的范围内.

3. 以上两种助记符等价.


====================================================================
LOOPE

循环控制指令LOOPZ/LOOPE

格式: LOOPZ/LOOPE 标号

功能: (CX)<--(CX)-1,(CX)<>0 且ZF=1时,转至标号处循环

说明:

1. 本指令是用CX寄存器作为计数器,来控制程序的循环.

2. 它属于段内SHORT短类型转移,目的地址必须距本指令在-128到+127个字节的范围内.

3. 以上两种助记符等价.


====================================================================
LOOPNZ

循环控制指令LOOPNZ/LOOPNE

格式: LOOPNZ/LOOPNE 标号

功能: (CX)<--(CX)-1,(CX)<>0 且ZF=0时,转至标号处循环

说明:

1. 本指令是用CX寄存器作为计数器,来控制程序的循环.

2. 它属于段内SHORT短类型转移,目的地址必须距本指令在-128到+127个字节的范围内.

3. 以上两种助记符等价.


====================================================================
LOOPNE

循环控制指令LOOPNZ/LOOPNE

格式: LOOPNZ/LOOPNE 标号

功能: (CX)<--(CX)-1,(CX)<>0 且ZF=0时,转至标号处循环

说明:

1. 本指令是用CX寄存器作为计数器,来控制程序的循环.

2. 它属于段内SHORT短类型转移,目的地址必须距本指令在-128到+127个字节的范围内.

3. 以上两种助记符等价.


====================================================================
LOCK

封锁总线指令 LOCK

格式: LOCK

功能: 指令是一个前缀,可放在指令的前面,告诉CPU在执行该指令时,不允许其它设备对总线进行访问.

无可用信息!
极限度—魔
 楼主| 发表于 2012-8-3 16:10:54 | 显示全部楼层
N



NEG

取补指令 NEG(NEGate)

格式: NEG OPRD

功能: 对操作数OPRD进行取补操作,然后将结果送回OPRD.取补操作也叫作求补操作,就是求一个数的相反数的补码.

说明:

1. OPRD为任意通用寄存器或存储器操作数.

2. 示例: (AL)=44H,取补后,(AL)=0BCH(-44H).

3. 本指令影响标志位CF、OF、SF、PF、ZF及AF.


====================================================================
NOT

逻辑非运算指令 NOT

格式: NOT OPRD

功能: 完成对操作数按位求反运算(即0变1,1变0),结果关回原操作数.

说明:

1. 其中OPRD可为任一通用寄存器或存储器操作数.

2. 本指梳令可以进行字或字节‘非’运算.

3. 本指令不影响标志位.

====================================================================
NOP

空操作指令 NOP

格式: NOP

功能: 本指令不产生任何结果,仅消耗几个时钟周期的时间,接着执行后续指令,常用于程序的延时等.

说明: 本指令不影响标志位.
极限度—魔
 楼主| 发表于 2012-8-3 16:14:05 | 显示全部楼层
M


MOVE

数据传送指令 MOV

格式: MOV OPRD1,OPRD2

功能: 本指令将一个源操作数送到目的操作数中,即OPRD1<--OPRD2.

说明:

1. OPRD1 为目的操作数,可以是寄存器、存储器、累加器.

   OPRD2 为源操作数,可以是寄存器、存储器、累加器和立即数.

2. MOV 指令以分为以下四种情况:

    <1> 寄存器与寄存器之间的数据传送指令
   
    <2> 立即数到通用寄存器数据传送指令
            
    <3> 寄存器与存储器之间的数据传送指令
            
    <4> 立即数到存储器的数据传送

3. 本指令不影响状态标志位


====================================================================
MUL

无符号数乘法指令 MUL(MULtiply)

格式: MUL OPRD  

功能: 乘法操作.

说明:

1. OPRD为通用寄存器或存储器操作数.

2. OPRD为源操作数,即作乘数.目的操作数是隐含的,即被乘数总是指定为累加器AX或AL的内容.

3. 16位乘法时,AX中为被乘数.8位乘法时,AL为被乘数.当16位乘法时,32位的乘积存于DX及AX中;8位乘法的16位乘积存于AX中.

4. 操作过程: 字节相乘:(AX)<--(AL)*OPRD,当结果的高位字节(AH)不等于0时,则CF=1、OF=1.


====================================================================
MOVS

字符串传送指令 MOVS

格式: MOVS OPRD1,OPRD2
      MOVSB
      MOVSW

功能: OPRD1<--OPRD2.

说明:

1. 其中OPRD2为源串符号地址,OPRD1为目的串符号地址.

2. 字节串操作: 若DF=0,则作加, 若DF=1,则作减.

3. 对字串操作时: 若DF=0,则作加,若DF=1,则作减,.

4. 在指令中不出现操作数时,字节串传送格式为MOVSB、字串传送格式为MOVSW.

5. 本指令不影响标志位.


====================================================================
MOVSB

字符串传送指令 MOVS

格式: MOVS OPRD1,OPRD2
      MOVSB
      MOVSW

功能: OPRD1<--OPRD2.

说明:

1. 其中OPRD2为源串符号地址,OPRD1为目的串符号地址.

2. 字节串操作: 若DF=0,则作加, 若DF=1,则作减.

3. 对字串操作时: 若DF=0,则作加,若DF=1,则作减,.

4. 在指令中不出现操作数时,字节串传送格式为MOVSB、字串传送格式为MOVSW.

5. 本指令不影响标志位.


====================================================================
MOVSW

字符串传送指令 MOVS

格式: MOVS OPRD1,OPRD2
      MOVSB
      MOVSW

功能: OPRD1<--OPRD2.

说明:

1. 其中OPRD2为源串符号地址,OPRD1为目的串符号地址.

2. 字节串操作: 若DF=0,则作加, 若DF=1,则作减.

3. 对字串操作时: 若DF=0,则作加,若DF=1,则作减,.

4. 在指令中不出现操作数时,字节串传送格式为MOVSB、字串传送格式为MOVSW.

5. 本指令不影响标志位.
极限度—魔
 楼主| 发表于 2012-8-3 16:16:37 | 显示全部楼层
O



OR

逻辑或指令 OR

格式: OR OPRD1,OPRD2

功能: OR指令完成对两个操作数按位的‘或’运算,结果送至目的操作数中,本指令可以进行字节或字的‘或’运算.

说明:

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. 输入指令及输出指令对标志位都不影响.
极限度—魔
 楼主| 发表于 2012-8-3 16:19:21 | 显示全部楼层
P



PUSH

堆栈操作指令 PUSH和POP

格式: PUSH OPRD

POP  OPRD

功能: 实现压入操作的指令是PUSH指令;实现弹出操作的指令是POP指令.

说明:
1. OPRD为16位(字)操作数,可以是寄存器或存储器操作数.

2. PUSH的操作过程是: (SP)<--(SP)-2,((sp))<--OPRD 即先修改堆栈指针SP(压入时为自动减2),然后,将指定的操作数送入新的栈顶位置.

此处的((SP))<--OPRD,也可以理解为:  [(SS)*16+(SP)]<--OPRD 或 [SS:SP]<--OPRD


====================================================================
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指令对状态标志位没有影响.


====================================================================
PUSHF

标志传送指令 PUSHF

格式: PUSHF

功能: 本指令可以把标志寄存器的内容保存到堆栈中去

无说明!


====================================================================
POPF

标志传送指令 POPF

格式: POPF

功能: 本指令的功能与PUSHF相反,在子程序调用和中断服务程序中,往往用PUSHF指令保护FLAG的内容,用POPF指令将保护的FLAG内容恢复.

说明:  如果对堆栈中的原FLAG内容进行修改,如对TF等标志位进行修改,然后再弹回标志位寄存器FLAG.这是通过指令修改TF标志的唯一方法.
您需要登录后才可以回帖 登录 | 快速注册

本版积分规则

手机版|杀毒软件|软件论坛| 卡饭论坛

Copyright © KaFan  KaFan.cn All Rights Reserved.

Powered by Discuz! X3.4( 沪ICP备2020031077号-2 ) GMT+8, 2025-1-12 15:51 , Processed in 0.145225 second(s), 18 queries .

卡饭网所发布的一切软件、样本、工具、文章等仅限用于学习和研究,不得将上述内容用于商业或者其他非法用途,否则产生的一切后果自负,本站信息来自网络,版权争议问题与本站无关,您必须在下载后的24小时之内从您的电脑中彻底删除上述信息,如有问题请通过邮件与我们联系。

快速回复 客服 返回顶部 返回列表