汇编指令学习_04

汇编指令学习04

接上文: 汇编指令学习_03

31. CWD

字扩展指令 CWD(Convert Word to Double Word) 

格式: CWD

功能: 将字扩展为双字长,即把AX寄存器的符号位扩展到DX中.

       说明:

1. 两个字或字节相除时,先用本指令形成一个双字长的的被除数.

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

3. 示例: 在B1、B2、B3字节类型变量中,分别存有8们带符号数a、b、c,实现(a*b+c)/a运算。

MOV AX, FFFF

MOV BX, FF

CWD                ;扩展符号位到DX

IDIV BX

 

32. AAD

      详情请查看: BCD码指令AAA DAA AAS DAS AAM AAD

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

注意: 两数相与,有一个数假则值为假

34. OR

逻辑或指令 OR

格式: OR OPRD1,OPRD2

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

      说明:

1. 其中OPRD1,OPRD2含义与AND指令相同,对标志位的影响也与AND指令相同.

2. 两数相或,有一个数为真则值为真.

35. NOT

逻辑非运算指令 NOT

格式: NOT OPRD

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

说明:

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

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

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

SAMPLE:

MOV AX, 1

MOV WORD PTR [0], AX

NOT WORD PTR [0]

NOT AX

 

36. XOR

逻辑异或运算指令 XOR

格式: XOR OPRD1,OPRD2

功能: 实现两个操作数按位‘异或’运算,结果送至目的操作数中.
 
      OPRD1<--OPRD1 XOR OPRD2

说明:

1. 其在OPRD1、OPRD2的含义与AND指令相同,对标志位的影响与与AND指令相同.

2. 相异为真,相同为假.

SAMPLE

           XOR AX, AX ; 清空ax

37. TEST

测试指令 TEST

格式: TEST OPRD1,OPRD2

功能: 其中OPRD1、OPRD2的含义同AND指令一样,也是对两个操作数进行按位的'与'运算,唯一不同之处是不将'AND“的结果送到OPRD1中,


   说明:

TEST与AND指令的关系,有点类似于CMP与SUB指令之间的关系.

常用法是: TEST cx, cx ; 测试cx是否等于0

         JNZ xxx

38. SHL

逻辑左移指令 SHL(Shift logical left)

格式: SHL OPRD1,COUNT

功能: 对给定的目的操作数左移COUNT次,每次移位时最高位移入标志位CF中,最低位补零.

      说明:

1. 其中OPRD1为目的操作数,可以是通用寄存器或存储器操作数.

2. COUNT代表移位的次数(或位数).移位一次,COUNT=1;移位多于1次时,COUNT=(CL),(CL)中为移位的次数.
 
3. 例如:

         SHL AL,1
         SHL CX,1 
         SHL ALFA[DI] 或者:
         MOV CL,3
         SHL DX,CL
         SHL ALFA[DI],CL

 

39. SHR

逻辑右移指令 SHR

格式: SHR OPRD1,COUNT

功能: 本指令实现由COUNT决定次数的逻辑右移操作,每次移位时,最高位补0,最低位移至标志位CF中.

      说明:

1. 其中OPRD1为目的操作数,可以是通用寄存器或存储器操作数.

2. COUNT代表移位的次数(或位数).移位一次,COUNT=1;移位多于1次时,COUNT=(CL),(CL)中为移位的次数.

3. 影响标志位OF,PF,SF,ZF,CF.

40. SAL

算术左移指令 SAL(Shift Arithmetic Left)

格式: SAL OPRD1,COUNT

功能: 其中OPRD1,COUNT与指令SHL相同.本指令与SHL的功能也完全相同,这是因为逻辑左移指令与算术左移指令所要完成的操作是一样的.

       说明:

1. 其中OPRD1为目的操作数,可以是通用寄存器或存储器操作数.

2. COUNT代表移位的次数(或位数).移位一次,COUNT=1;移位多于1次时,COUNT=(CL),(CL)中为移位的次数.

Note: 在debug模式下 该指令无用, 我测试过在asm中用这条指令会被替换成SHL

41. SAR

算术右移指令 SAR
 
格式: SAR OPRD1,COUNT

功能: 本指令通常用于对带符号数减半的运算中,因而在每次右移时,保持最高位(符号位)不变,最低位右移至CF中.

说明:

1. 其中OPRD1为目的操作数,可以是通用寄存器或存储器操作数.

2. COUNT代表移位的次数(或位数).移位一次,COUNT=1;移位多于1次时,COUNT=(CL),(CL)中为移位的次数.

SAMPLE:

     MOV AX, 10 ; AX = 10h

     SAR AX, 1    ; AX = 08h

     SAR AX, 1    ; AX = 04h

42. ROL

循环移位指令
 
格式:   

        ROL OPRD1,COUNT ;不含进位标志位CF在循环中的左循环移位指令.

        ROR OPRD1,COUNT ;不含进位示志位CF在循环中的右循环移位指令.

        RCL OPRD1,COUNT ;带进位的左循环移位指令.

        RCR OPRD1,COUNT ;带进位的右循环移位指令.

说明:

1. 本指令组只影响标志CF、OF.OF由移入CF的内容决定,OF取决于移位一次后符号位是否改变,如改变,则OF=1.

2. 由于是循环移位,所以对字节移位8次; 对字移位16次,就可恢复为原操作数.由于带CF的循环移位,可以将CF的内容移入,
   所以可以利用它实现多字节的循环.

43. ROR

循环移位指令
 
格式:
     ROL OPRD1,COUNT ;不含进位标志位CF在循环中的左循环移位指令.
     ROR OPRD1,COUNT ;不含进位示志位CF在循环中的右循环移位指令.
     RCL OPRD1,COUNT ;带进位的左循环移位指令.
     RCR OPRD1,COUNT ;带进位的右循环移位指令.

说明:

1. 本指令组只影响标志CF、OF.OF由移入CF的内容决定,OF取决于移位一次后符号位是否改变,如改变,则OF=1.

2. 由于循环移位,所以对字节移位8次; 对字移位16次,可恢复为原操作数.

Note: 如果位移大于1的话,使用cl存放位移

44. RCL

循环移位指令
 
格式:

      ROL OPRD1,COUNT ;不含进位标志位CF在循环中的左循环移位指令.
      ROR OPRD1,COUNT ;不含进位示志位CF在循环中的右循环移位指令.
      RCL OPRD1,COUNT ;带进位的左循环移位指令.
      RCR OPRD1,COUNT ;带进位的右循环移位指令.

说明:

1. 本指令组只影响标志CF、OF.OF由移入CF的内容决定,OF取决于移位一次后符号位是否改变,如改变,则OF=1.

2. 由于是循环移位,所以对字节移位8次; 对字移位16次,就可恢复为原操作数.由于带CF的循环移位,可以将CF的内容移入,

   所以可以利用它实现多字节的循环.

45. RCR

循环移位指令
 
格式:

      ROL OPRD1,COUNT ;不含进位标志位CF在循环中的左循环移位指令.

      ROR OPRD1,COUNT ;不含进位示志位CF在循环中的右循环移位指令.

      RCL OPRD1,COUNT ;带进位的左循环移位指令.

      RCR OPRD1,COUNT ;带进位的右循环移位指令.

 

说明:

1. 本指令组只影响标志CF、OF.OF由移入CF的内容决定,OF取决于移位一次后符号位是否改变,如改变,则OF=1.

2. 由于是循环移位,所以对字节移位8次; 对字移位16次,就可恢复为原操作数.由于带CF的循环移位,可以将CF的内容移入,所以可以利用它实现多字节的循环.

注意: 以上程序中的指令SHR AL,CL如改为SAR AL,CL,虽然最高4位可移入低4位,但最高位不为0,故应加入一条指令AND AL,0FH.否则,若最高位不为0时,将得到错误结果.

46. JMP

无条件转移指令JMP

格式: JMP OPRD

功能: JMP指令将无条件地控制程序转移到目的地址去执行.当目的地址仍在同一个代码段内,称为段内转移;当目标地址不在同一个代码段内,则称为段间转移.这两种情况都将产生不同的指令代码,以便能正确地生成目的地址,在         段内转移时,指令只要能提供目的地址的段 内偏移量即够了;而在段间转移时,指令应能提供目的地址的段地址及段内偏移地址值.

说明:

1. 其中OPRD为转移的目的地址.程序转移到目的地址所指向的指令继续往下执行.

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

3. <1> 段内直接转移指令: JMP NEAR 标号

   <2> 段内间接转移指令: JMP OPRD

    <3> 段间直接转移指令: JMP FAR 标号

    <4> 段间间接转移指令:JMP OPRD其中的OPRD为存储器双字操作数.段间间接转移只能通过存储器操作数来实现.

47. JC

条件转移指令 JC

格式: JC 标号

功能: CF=1,转至标号处执行

说明: JC为根据标志位CF进行转移的指令

48. JNC

条件转移指令JNC

格式: JNC标号

功能: CF=0,转至标号处执行

说明: JNC为根据标志位CF进行转移的指令

49. JE

条件转移指令JE/JZ

格式: JE/JZ标号

功能: ZF=1,转至标号处执

说明:

1. 指令JE与JZ等价,它们是根据标志位ZF进行转移的指令

2. JE,JZ均为一条指令的两种助记符表示方法

50. JZ

条件转移指令JE/JZ

格式: JE/JZ标号

功能: ZF=1,转至标号处执

说明:

1. 指令JE与JZ等价,它们是根据标志位ZF进行转移的指令

2. JE,JZ均为一条指令的两种助记符表示方法

51. JNE

条件转移指令JNE/JNZ

格式: JNE/JNZ 标号

功能: ZF=0,转至标号处执行

说明:

1. 指令JNE与JNZ等价,它们是根据标志位ZF进行转移的指令

2. JNE,JNZ均为一条指令的两种助记符表示方法

52. JNZ

条件转移指令JNE/JNZ

格式: JNE/JNZ 标号

功能: ZF=0,转至标号处执行

说明:

1. 指令JNE与JNZ等价,它们是根据标志位ZF进行转移的指令

2. JNE,JNZ均为一条指令的两种助记符表示方法

53. JS

条件转移指令JS

格式: JS 标号

功能: SF=1,转至标号处执行, 为正

说明: JS是根据符号标志位SF进行转移的指令

54. JNS

条件转移指令JNS
 
格式: JNS 标号

功能: SF=0,转至标号处执行

说明: JNS是根据符号标志位SF进行转移的指令

55. JO

条件转移指令JO

格式: JO 标号

功能: OF=1,转至标号处执行

说明: JO是根椐溢出标志位OF进行转移的指令

56. JNO

条件转移指令JNO

格式: JNO 标号

功能: OF=0,转至标号处执行

说明: JNO是根椐溢出标志位OF进行转移的指令

57. JP

条件转移指令JP/JPE

格式: JP/JPE 标号

功能: PF=1,转至标号处执行

说明:

1. 指令JP与JPE,它们是根据奇偶标志位PF进行转移的指令

2. JP,JPE均为一条指令的两种助记符表示方法

58. JPE

      同JP指令(同一条指令两种记法)

59. JNP

条件转移指令JNP/JPO
 
格式: JNP/JPO 标号

功能: PF=0,转至标号处执行

说明:

1. 指令JNP与JPO,它们是根据奇偶标志位PF进行转移的指令

2. JNP,JPO均为一条指令的两种助记符表示方法

60. JPO

 

条件转移指令JNP/JPO JNP 和 JPO指令一样
 
格式: JNP/JPO 标号

功能: PF=0,转至标号处执行

说明:

1. 指令JNP与JPO,它们是根据奇偶标志位PF进行转移的指令

2. JNP,JPO均为一条指令的两种助记符表示方法

posted @ 2013-07-21 16:32  Ares_  阅读(975)  评论(0编辑  收藏  举报