汇编指令学习_05
汇编指令学习_05
接上文: 汇编指令学习_04
61. JA
条件转移指令JA/JNBE
格式: JA/JNBE标号
功能: 为高于/不低于等于的转移指令
说明:
1. 例如两个符号数a,b比较时,a>b(即CF=0,ZF=0)时转移.因为单一标志位CF=0,只表示a>=b.
2. JA/JNBE是同一条指令的两种不同的助记符.3. 该指令用于无符号数进行条件转移
62. JNBE
请查看61 JA
63. JAE
条件转移指令JAE/JNB
格式: JAE/JNB 标号
功能: 为高于等于/不低于的转移指令
说明:
1. JAE/JNB是同一条指令的两种不同的助记符.
2. 该指令用于无符号数进行条件转移.
64. JNB
请查看63 JAE指令
65. JB
条件转移指令JB/JNAE
格式: JB/JNAE 标号
功能: 低于/不高于等于时转移
说明: 该指令用于无符号数的条件转移
66. JNAE
请查看65. JB
67. JBE
条件转移指令JBE/JNA
格式: JBE/JNA 标号
功能: 低于等于/不高于时转移
说明: 该指令用于无符号数的条件转移
68. JNA
请查看67. JNA
69. JG
条件转移指令JG/JNLE
格式: JG/JNLE 标号
功能: 大于/不小于等于时转移
说明: 用于带符号数的条件转移指令
70. JNLE
请查看69. JG
71. JGE
条件转移指令JGE/JNL
格式: JGE/JNL标号
功能: 大于等于/不小于时转移
说明: 用于带符号数的条件转移指令
72. JNL
请查看 71. JGE
73. JL
条件转移指令JL/JNGE
格式: JL/JNGE标号功能: 小于/不大于等于时转移
说明: 用于带符号数的条件转移指令
74. JNGE
请查看73. JL
75. JLE
条件转移指令JLE/JNG
格式: JLE/JNG 标号
功能: 小于等于/不大于时转移
说明: 用于带符号数的条件转移指令
76. JNG
请查看75. JLE
77. LOOP
循环控制指令LOOP
格式: LOOP 标号
功能: (CX)<--(CX)-1,(CX)<>0,则转移至标号处循环执行, 直至(CX)=0,继续执行后继指令.
说明:
1. 本指令是用CX寄存器作为计数器,来控制程序的循环.
2. 它属于段内SHORT短类型转移,目的地址必须距本指令在-128到+127个字节的范围内.
78. LOOPZ
循环控制指令LOOPZ/LOOPE
格式: LOOPZ/LOOPE 标号
功能: (CX)<--(CX)-1,(CX)<>0 且ZF=1时,转至标号处循环
说明:
1. 本指令是用CX寄存器作为计数器,来控制程序的循环.
2. 它属于段内SHORT短类型转移,目的地址必须距本指令在-128到+127个字节的范围内.
3. 以上两种助记符等价.
79. LOOPE
请查看78. LOOPZ
80. LOOPNZ
循环控制指令LOOPNZ/LOOPNE
格式: LOOPNZ/LOOPNE 标号
功能: (CX)<--(CX)-1,(CX)<>0 且ZF=0时,转至标号处循环
说明:
1. 本指令是用CX寄存器作为计数器,来控制程序的循环.
2. 它属于段内SHORT短类型转移,目的地址必须距本指令在-128到+127个字节的范围内.
3. 以上两种助记符等价.
81. LOOPNE
请查看LOOPNZ
82. CALL
过程调用指令 CALL
格式: CALL OPRD
功能: 过程调用指令
说明:
1. 其中OPRD为过程的目的地址.
2. 过程调用可分为段内调用和段间调用两种.寻址方式也可以分为直接寻址和间接寻址两种.
3. 本指令不影响标志位.
83. RET
返回指令 RET
格式: RET
功能: 当调用的过程结束后实现从过程返回至原调用程序的下一条指令,本指令不影响标志位.
说明:
由于在过程定义时,已指明其近(NEAR)或远(FAR)的属性,所以RET指令根据段内调用与段间调用,执行不同的操作
对段内调用: 返回时,由堆栈弹出一个字的返回地址的段内偏移量至IP.
对段外调用: 返回时,由堆栈弹出的第一个字为返回地址的段内偏移量,将其送入IP中,由堆栈弹出第二个字为返回地址的段基址,将其送入CS中.
84. 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, MOVSW, MOVSD
MOVS BYTE PTR ES:[DI], DS:[SI]
MOVS ES:BYTE PTR ES:[DI], DS:[SI]
85. MOVSB
请查看MOVS
86. MOVSW
请查看MOVS
87. CMPS
CMPS会根据数据类型翻译成CMPSB 跟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分别表示字节串比较或字串比较.
Sample:
cmps byte ptr ds:[si], es:[di]
88. CMPSB
请参看87. CMPS
89. CMPSW
请参看87. CMPS
90. SCAS
字符串搜索指令 SCAS
格式:
SCAS OPRD
SCASB
SCASW
功能: 把AL(字节串)或AX(字串)的内容与由DI寄存器寻址的目的串中的数据相减,结果置标志位,但不改变任一操作数本身.
地址指针DI自动调整.
说明:
1. 其中OPRD为目的串符号地址.
2. 本指令影响标志AF、CF、OF、PF、SF、ZF.该指令可查找字符串中的一个关键字,只需在本指令执行前,
把关键字放在AL(字节)或AX(字串 )中,用重复前缀可在整串中查找.
指令中不使用操作数时,可用指令格式SCASB,SCASW,分别表示字节串或字串搜索指令.
91. SCASB
请参看 90. SCAS
92. SCASW
请参看 90. SCASW
93. LODS
取字符串元素指令 LODS
格式: LODS OPRD 其中OPRD为源字符串符号地址.
功能: 把SI寻址的源串的数据字节送AL或数据字送AX中去, 并根据DF的值修改地址指针SI进行自动调整.
说明:
1. 本指令不影响标志位.
2. 当不使用操作数时,可用LODS(字节串)或LODSW(字串)指令.
94. STOS
字符串存储指令 STOS
格式: STOS OPRD
功能: 把AL(字节)或AX(字)中的数据存储到DI为目的串地址指针所寻址的存储器单元中去.指针DI将根据DF的值进行自动调整.
说明:
1. 其中OPRD为目的串符号地址.
2. 本指令不影响标志位.当不使用操作数时,可用STOSB或STOSW分别表示字节串或字串的操作.
95. REP
格式:
REP ;CX<>0 重复执行字符串指令
REPZ/REPE ;CX<>0 且ZF=1重复执行字符串指令
REPNZ/REPNE ;CX<>0 且ZF=0重复执行字符串指令
功能: 在串操作指令前加上重复前缀,可以对字符串进重复处理.由于加上重复前缀后,对应的指令代码是不同的,所以指令的功能便具有重复处理的功能,重复的次数存放在CX寄存器中.
说明:
1. REP与MOVS或STOS串操作指令相结合使用,完成一组字符的传送或建立一组相同数据的字符串.
2. REPZ/REPE常用与CMPS串操作指令结合使用, 可以完成两组字符串的比较.
3. REPZ/REPE常与SCAS指令结合使用,可以完成在一个字符串中搜索一个关键字.
4. REPNZ/REPNE与CMPS指令结合使用,表示当串未结束(CX=1)且当对应串元素不相同(ZF=0)时,继续重复执行串比较指令.
96. REPZ
请参看95. REP
97. REPE
请参看95. REP
98. REPNZ
请参看95. REP
99. REPNE
请参看95. REP
100. 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,在串操作指令执行时,按增量的方式修改吕指针.
101. STC
请参看100:CLC
102. CMC
请参看100:CLC
103. CLD
请参看100:CLC
104. STD
请参看100:CLC
105. CLI
请参看100:CLC
106. STI
请参看100:CLC
107. HLT
处理器暂停指令 HLT
格式: HLT
功能: 使处理器处于暂时停机状态.
说明:
1. 本指令不影响标志位.
2. 由执行HLT引起的暂停,只有RESET(复位)、NMI(非屏蔽中断请求)、INTR(可屏蔽的外部中断请求)信号可以使
其退出暂停状态.它可用于等待中断的到来或多机系统的同步操作.
108. WAIT
处理器等待指令 WAIT
格式: WAIT
功能: 本指令将使处理器检测TEST端脚,当TEST有效时,则退出等待状态执行下条指令,否则处理器处于等待状态,直到TEST有效.
说明: 本指令不影响标志位.
109. ESC
处理器交权指令 ESC
格式: ESC EXTOPRD,OPRD功能: 使用本指令可以实现协处理器出放在ESC指令代码中的6位常数,该常数指明协处理器要完成的功能.
说明:
1. 其中EXTOPRD为外部操作码,OPRD为源操作数.
2. 本指不影响标志位.
110. NOP
空操作指令 NOP
格式: NOP
功能: 本指令不产生任何结果,仅消耗几个时钟周期的时间,接着执行后续指令,常用于程序的延时等.
说明: 本指令不影响标志位.
111. LOCK
封锁总线指令 LOCK
格式: LOCK功能: 指令是一个前缀,可放在指令的前面,告诉CPU在执行该指令时,不允许其它设备对总线进行访问.
112. 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)]表示.
113. 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. 输入指令及输出指令对标志位都不影响.
114. INTO
溢出中断指令 INTO(INTerrupt if Overflow)
格式: INTO功能: 本指令检测OF标志位,当OF=1时,说明已发生溢出,立即产生一个中断类型4的中断,当OF=0时,本指令不起作用.
说明:
1. 本指令影响标志位IF及TF.
2. 本指令可用于溢出处理,当OF=1时,产生一个类型4的软中断.在中断处理程序中完成溢出的处理操作.
115. INT
软中断指令 INT
格式: INT n 其中n为软中断的类型号.
功能: 本指令将产生一个软中断,把控制转向一个类型号为n的软中断,该中断处理程序入口地址在中断向量表的n*4地址
说明: 操作过程与INTO指令雷同,只需将10H改为n*4即可.所以,本指令也将影响标志位IF及TF.
116. IRET
中断返回指令 IRET
格式: IRET功能: 用于中断处理程序中,从中断程序的断点处返回,继续执行原程序.
说明:
1. 本指令将影响所有标志位.
2. 无论是软中断,还是硬中断,本指令均可使其返回到中断程序的断点处继续执行原程序.