汇编指令

来源:互联网 发布:java localdatetime 编辑:程序博客网 时间:2024/06/05 04:27

汇编指令大全

零、状态寄存器

MOVE 数据传送指令 MOV

格式: MOV OPRD1,OPRD2

功能: 本指令将一个源操作数送到目的操作数

中,即OPRD1<--OPRD2.

说明:

1. OPRD1 为目的操作数,可以是

寄存器、存储器、累加器.

OPRD2 为源操作数,可以是寄存

器、存储器、累加器和立即数.

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

况:

<1> 寄存器与寄存器之间的数据

传送指令

<2> 立即数到通用寄存器数据传

送指令

<3> 寄存器与存储器之间的数据

传送指令

<4> 立即数到存储器的数据传送

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

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指令对状态标志位

没有影响.

XCHG 数据交换指令 XCHG

格式: XCHG OPRD1,OPRD2 其中的OPRD1为目的操作

数,OPRD2为源操作数

功能: 将两个操作数相互交换位置,该指令把源操

作数OPRD2与目的操数OPRD1交换.

说明:

1. OPRD1及OPRD2可为通用寄存

器或存储器,但是两个存储器之

间是不能用XCHG指令实现的.

2. 段寄存器内容不能用XCHG指

令来交换.

3. 若要实现两个存储器操作数

DATA1及DATA2的交换,可用以下

指令实现:

示例: PUSH DATA1

星尘-易尘

页码,1/22

PUSH DATA2

POP DATA1

POP DATA2

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

XLAT 查表指令 XLAT

格式: XLAT TABLE其中TABLE为一待查表格的首地

址.

功能: 把待查表格的一个字节内容送到AL累加器

中.

说明:

1. 在执行该指令前,应将TABLE

先送至BX寄存器中,然后将待查

字节与在表格中距表首地址位移

量送AL,即 (AL)<--((BX)+

(AL)).

2. 本指令不影响状态标位,表格

长度不超过256字节.

LAHF 标志传送指令 LAHF

格式: LAHF

功能: 取FLAG标志寄存器低8位至AH寄存器.(AH)<-

-(FLAG)7~0

说明: 该指令不影响FLAG的原来

内容,AH只是复制了原FLAG的低8

位内容.

SAHF 标志传送指令 SAHF

格式: SAHF

功能: 将AH存至FLAG低8位

说明: 本指令将用AH的内容改写

FLAG标志寄存器中的SF、ZF、

AF、PF、和CF标志,从而改变原

来的标志位.

PUSHF 标志传送指令 PUSHF

格式: PUSHF

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

中去

POPF 标志传送指令 POPF

格式: POPF

功能: 本指令的功能与PUSHF相反,在子程序调用和

中断服务程序中,往往用PUSHF指令保护FLAG的内

容,用POPF指令将保护的FLAG内容恢复.

说明: 如果对堆栈中的原FLAG内

容进行修改,如对TF等标志位进

行修改,然后再弹回标志位寄存

器FLAG.这是通过指令修改TF标

志的唯一方法.

10 LEA 有效地址传送指令 LEA

格式: LEA OPRD1,OPRD2

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

寄存器中.

说明:

1. OPRD1 为目的操作数,可为任

意一个16位的通用寄存器.

OPRD2 为源操作数,可为变量

名、标号或地址表达式.

示例: LEA BX,DATA1

LEA DX,BETA[BX+SI]

LEA BX BX,[BP],[DI]

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

11 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,偏移地址送入

星尘-易尘

页码,2/22

DI.

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

13 ADD 加法指令 ADD(Addition)

格式: ADD OPRD1,OPRD2

功能: 两数相加

说明:

1. OPRD1为任一通用寄存器或存

储器操作数,可以是任意一个通

用寄存器,而且还可以是任意一

个存储器操作数.

OPRD2为立即数,也可以是任意一

个通用寄存器操作数.立即数只

能用于源操作数.

2. OPRD1和OPRD2均为寄存器是

允许的,一个为寄存器而另一个

为存储器也是允许的, 但不允许

两个都是存储器操作数.

3. 加法指令运算的结果对CF、

SF、OF、PF、ZF、AF都会有影

响.以上标志也称为结果标志.加

法指令适用于无符号数或有符号

数的加法运算.

14 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

指令.

15 INC 加1指令 INC(INCrement by 1)

格式: INC OPRD

功能: OPRD<--OPRD+1

说明:

1. OPRD 为寄存器或存储器操作

数.

2. 这条指令执行结果影响AF、

OF、PF、SF、ZF标志位,但不影

响CF标志位.

星尘-易尘

页码,3/22

3. 示例:

INC SI;(SI)<--(SI)+1

INC WORD PTR[BX]

INC BYTE PTR[BX+DI]

INC CL;(CL)<--(CL)+1

注意: 上述第二,三两条指令,是

对存储字及存储字节的内容加1

以替代原来的内容.

16 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

17 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)

299 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

300 SBB 带借位减去指令 SBB(SuBtraction with Borrow)

格式: SBB OPRD1,OPRD2

功能: 是进行两个操作数的相减再减去CF进位标志

位,即从OPRD1<--OPRD1-OPRD2-CF,其结果放在OPDR

1中.

说明:

示例 SBB DX,CX

SBB AX,DATA1

SBB BX,2000H

SBB ALFA[BX+SI],SI

SBB BETAP[DI,030AH

301 DEC 减一指令 DEC(Decrement by 1)

格式: DEC OPRD

功能: OPRD<--OPRD-1

说明:

1. OPRD 为寄存器或存储器操作

数.

2. 这条指令执行结果影响AF、

OF、PF、SF、ZF标志位,但不影

响CF标志位.

星尘-易尘

页码,4/22

3. 示例 DEC AX

DEC CL

DEC WORD PTR[DI]

DEC ALFA[DI+BX]

302 NEG 取补指令 NEG(NEGate)

格式: NEG OPRD

功能: 对操作数OPRD进行取补操作,然后将结果送

回OPRD.取补操作也叫作求补操作,就是求一个数的

相反数的补码.

说明:

1. OPRD为任意通用寄存器或存

储器操作数.

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

(AL)=0BCH(-44H).

3. 本指令影响标志位CF、OF、

SF、PF、ZF及AF.

303 CMP 比效指令 CMP(CoMPare)

格式: CMP OPRD1,OPRD2

功能: 对两数进行相减,进行比较.

说明:

1. OPRD1为任意通用寄存器或存

储器操作数.

OPRD2为任意通用寄存器或存储

器操作数,立即数也可用作源操

作数OPRD2.

2. 对标志位的影响同SUB指令,

完成的操作与SUB指令类似,唯一

的区别是不将OPRD1-OPRD2的结

果送回OPRD1,而只是比较.

3. 在8088/8086指令系统中,专

门提供了一组根据带符号数比较

大小后,实现条件转移的指令.

304 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 0

FH,

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

305 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

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

格式: MUL OPRD

功能: 乘法操作.

说明:

1. OPRD为通用寄存器或存储器

操作数.

2. OPRD为源操作数,即作乘数.

目的操作数是隐含的,即被乘数

总是指定为累加器AX或AL的内

容.

3. 16位乘法时,AX中为被乘数.8

位乘法时,AL为被乘数.当16位乘

法时,32位的乘积存于DX及AX中;

星尘-易尘

页码,5/22

8位乘法的16位乘积存于AX中.

4. 操作过程: 字节相乘:(AX)<-

-(AL)*OPRD,当结果的高位字节

(AH)不等于0时,则CF=1、OF=1

.

307 IMUL 带符号数乘法指令 IMUL(Integer MULtiply)

格式: IMUL OPRD

功能: 完成两个带符号数的相乘

说明:

1. 其中OPRD为任一通用寄存器

或存储器操作数.

2. MUL指令对带符号相乘时,不

能得到正确的结果.

例如: (AL)=255

(CL)=255

MUL CL

(AX)=65025

注意: 这对无符号数讲,结果是

正确的,但对带符号数讲,相当于

(-1)*(-1)结果应为+1,而65025

对应的带符号数为-511,显然是

不正确的.

308 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整除的余数(即个位数).

309 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

310 IDIV 带符号数除法指定 IDIV(Interger DIVision)

格式: IDIV OPRD

功能: 这实现两个带符号数的二进制除法运算.

说明:

1. 其中OPRD为任一通用寄存器

或存储器操作数.

2. 理由与IMUL相同,只有IDIV指

令,才能得到符号数相除的正确

结果.

3. 当被除数为8位,在进行字节

除法前,应把AL的符号位扩充至

星尘-易尘

页码,6/22

AH中.在16位除法时,若被除数为

16位,则应将AX中的符号位扩到

DX中.

311 CBW 字节扩展指令 CBW(Convert Byte to Word)

格式: CBW

功能: 将字节扩展为字,即把AL寄存器的符号位扩

展到AH中.

说明:

1. 两个字节相除时,先使用本指

令形成一个双字节长的被除数.

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

3. 示例: MOV AL,25

CBW

IDIV BYTE PTR DATA1

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

格式: CWD

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

扩展到DX中.

说明:

1. 两个字或字节相除时,先用本

指令形成一个双字长的的被除

数.

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

3. 示例: 在B1、B2、B3字节类

型变量中,分别存有8们带符号数

a、b、c,实现(a*b+c)/a运算。

313 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).

314 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

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

值为假

315 OR 逻辑或指令 OR

格式: OR OPRD1,OPRD2

功能: OR指令完成对两个操作数按位的‘或’运

算,结果送至目的操作数中,本指令可以进行字节或

字的‘或’运算.

OPRD1<--OPRD1 OR OPRD2.

说明:

1. 其中OPRD1,OPRD2含义与AND

指令相同,对标志位的影响也与

AND指令相同.

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

为真.

316 NOT 逻辑非运算指令 NOT

格式: NOT OPRD

功能: 完成对操作数按位求反运算(即0变1,1变0),

说明:

1. 其中OPRD可为任一通用寄存

器或存储器操作数.

星尘-易尘

页码,7/22

结果关回原操作数. 2. 本指梳令可以进行字或字节

‘非’运算.

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

317 XOR 逻辑异或运算指令 XOR

格式: XOR OPRD1,OPRD2

功能: 实现两个操作数按位‘异或’运算,结果送

至目的操作数中.

OPRD1<--OPRD1 XOR OPRD2

说明:

1. 其在OPRD1、OPRD2的含义与

AND指令相同,对标志位的影响与

与AND指令相同.

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

318 TEST 测试指令 TEST

格式: TEST OPRD1,OPRD2

功能: 其中OPRD1、OPRD2的含义同AND指令一样,也

是对两个操作数进行按位的'与'运算,唯一不同之

处是不将'与'的结

果送目的操作数,即本指令对两个操作数 的内容均

不进行修改,仅是在逻辑与操作后,对标志位重新置

位.

说明: TEST与AND指令的关系,有

点类似于CMP与SUB指令之间的关

系.

319 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

320 SHR 逻辑右移指令 SHR

格式: SHR OPRD1,COUNT

功能: 本指令实现由COUNT决定次数的逻辑右移操

作,每次移位时,最高位补0,最低位移至标志位CF

中.

说明:

1. 其中OPRD1为目的操作数,可

以是通用寄存器或存储器操作

数.

2. COUNT代表移位的次数(或位

数).移位一次,COUNT=1;移位多

于1次时,COUNT=(CL),(CL)中为

移位的次数.

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

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

格式: SAL OPRD1,COUNT

功能: 其中OPRD1,COUNT与指令SHL相同.本指令与

SHL的功能也完全相同,这是因为逻辑左移指令与算

术左移指令所要完成的操作是一样的.

说明:

1. 其中OPRD1为目的操作数,可

以是通用寄存器或存储器操作

数.

2. COUNT代表移位的次数(或位

数).移位一次,COUNT=1;移位多

于1次时,COUNT=(CL),(CL)中为

移位的次数.

322 SAR 算术右移指令 SAR

格式: SAR OPRD1,COUNT

说明:

1. 其中OPRD1为目的操作数,可

以是通用寄存器或存储器操作

星尘-易尘

页码,8/22

功能: 本指令通常用于对带符号数减半的运算中,

因而在每次右移时,保持最高位(符号位)不变,最低

位右移至CF中.

数.

2. COUNT代表移位的次数(或位

数).移位一次,COUNT=1;移位多

于1次时,COUNT=(CL),(CL)中为

移位的次数.

323 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的内容移入,

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

环.

324 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次,可恢复为

原操作数.

325 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的内容移入,

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

环.

326 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,0

FH.否则,若最高位不为0时,将得

到错误结果.

327 JMP 无条件转移指令JMP

格式: JMP OPRD

说明:

1. 其中OPRD为转移的目的地址.

程序转移到目的地址所指向的指

星尘-易尘

页码,9/22

功能: JMP指令将无条件地控制程序转移到目的地

址去执行.当目的地址仍在同一个代码段内,称为段

内转移;当目标地址不在同一个代码段内,则称为段

间转移.这两种情况都将产生不同的指令代码,以便

能正确地生成目的地址,在 段内转移时,指令只要

能提供目的地址的段 内偏移量即够了;而在段间转

移时,指令应能提供目的地址的段地址及段内偏移

地址值.

令继续往下执行.

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

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

NEAR 标号

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

OPRD

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

FAR 标号

<4> 段间间接转移指令:JMP

OPRD其中的OPRD为存储器双字操

作数.段间间接转移只能通过存

储器操作数来实现.

328 JC 条件转移指令 JC

格式: JC 标号

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

说明: JC为根据标志位CF进行转

移的指令

329 JNC 条件转移指令JNC

格式: JNC标号

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

说明: JNC为根据标志位CF进行

转移的指令

330 JE 条件转移指令JE/JZ

格式: JE/JZ标号

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

说明:

1. 指令JE与JZ等价,它们是根据

标志位ZF进行转移的指令

2. JE,JZ均为一条指令的两种助

记符表示方法

331 JZ 条件转移指令JE/JZ

格式: JE/JZ标号

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

说明:

1. 指令JE与JZ等价,它们是根据

标志位ZF进行转移的指令

2. JE,JZ均为一条指令的两种助

记符表示方法

332 JNE 条件转移指令JNE/JNZ

格式: JNE/JNZ 标号

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

说明:

1. 指令JNE与JNZ等价,它们是根

据标志位ZF进行转移的指令

2. JNE,JNZ均为一条指令的两种

助记符表示方法

333 JNZ 条件转移指令JNE/JNZ

格式: JNE/JNZ 标号

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

说明:

1. 指令JNE与JNZ等价,它们是根

据标志位ZF进行转移的指令

2. JNE,JNZ均为一条指令的两种

助记符表示方法

334 JS 条件转移指令JS

格式: JS 标号

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

说明: JS是根据符号标志位SF进

行转移的指令

335 JNS 条件转移指令JNS

格式: JNS 标号

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

说明: JNS是根据符号标志位SF

进行转移的指令

星尘-易尘

页码,10/22

336 JO 条件转移指令JO

格式: JO 标号

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

说明: JO是根椐溢出标志位OF进

行转移的指令

337 JNO 条件转移指令JNO

格式: JNO 标号

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

说明: JNO是根椐溢出标志位OF

进行转移的指令

338 JP 条件转移指令JP/JPE

格式: JP/JPE 标号

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

说明:

1. 指令JP与JPE,它们是根据奇

偶标志位PF进行转移的指令

2. JP,JPE均为一条指令的两种

助记符表示方法

339 JPE 条件转移指令JP/JPE

格式: JP/JPE 标号

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

说明:

1. 指令JP与JPE,它们是根据奇

偶标志位PF进行转移的指令

2. JP,JPE均为一条指令的两种

助记符表示方法

340 JNP 条件转移指令JNP/JPO

格式: JNP/JPO 标号

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

说明:

1. 指令JNP与JPO,它们是根据奇

偶标志位PF进行转移的指令

2. JNP,JPO均为一条指令的两种

助记符表示方法

341 JPO 条件转移指令JNP/JPO

格式: JNP/JPO 标号

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

说明:

1. 指令JNP与JPO,它们是根据奇

偶标志位PF进行转移的指令

2. JNP,JPO均为一条指令的两种

助记符表示方法

342 JA 条件转移指令JA/JNBE

格式: JA/JNBE标号

功能: 为高于/不低于等于的转移指令

说明:

1. 例如两个符号数a,b比较

时,a>b(即CF=0,ZF=0)时转移.因

为单一标志位CF=0,只表示a>=b.

2. JA/JNBE是同一条指令的两种

不同的助记符.

3. 该指令用于无符号数进行条

件转移

343 JNBE 条件转移指令JA/JNBE

格式: JA/JNBE标号

功能: 为高于/不低于等于的转移指令

说明:

1. 例如两个符号数a,b比较

时,a>b(即CF=0,ZF=0)时转移.因

为单一标志位CF=0,只表示a>=b.

2. JA/JNBE是同一条指令的两种

不同的助记符.

3. 该指令用于无符号数进行条

件转移

344 JAE 条件转移指令JAE/JNB

格式: JAE/JNB 标号

说明:

1. JAE/JNB是同一条指令的两种

不同的助记符.

星尘-易尘

页码,11/22

功能: 为高于等于/不低于的转移指令

2. 该指令用于无符号数进行条

件转移.

345 JNB 条件转移指令JAE/JNB

格式: JAE/JNB 标号

功能: 为高于等于/不低于的转移指令

说明:

1. JAE/JNB是同一条指令的两种

不同的助记符.

2. 该指令用于无符号数进行条

件转移.

346 JB 条件转移指令JB/JNAE

格式: JB/JNAE 标号

功能: 低于/不高于等于时转移

说明: 该指令用于无符号数的条

件转移

347 JNAE 条件转移指令JB/JNAE

格式: JB/JNAE 标号

功能: 低于/不高于等于时转移

说明: 该指令用于无符号数的条

件转移

348 JBE 条件转移指令JBE/JNA

格式: JBE/JNA 标号

功能: 低于等于/不高于时转移

说明: 该指令用于无符号数的条

件转移

349 JNA 条件转移指令JBE/JNA

格式: JBE/JNA 标号

功能: 低于等于/不高于时转移

说明: 该指令用于无符号数的条

件转移

350 JG 条件转移指令JG/JNLE

格式: JG/JNLE 标号

功能: 大于/不小于等于时转移

说明: 用于带符号数的条件转移

指令

351 JNLE 条件转移指令JG/JNLE

格式: JG/JNLE 标号

功能: 大于/不小于等于时转移

说明: 用于带符号数的条件转移

指令

352 JGE 条件转移指令JGE/JNL

格式: JGE/JNL标号

功能: 大于等于/不小于时转移

说明: 用于带符号数的条件转移

指令

353 JNL 条件转移指令JGE/JNL

格式: JGE/JNL标号

功能: 大于等于/不小于时转移

说明: 用于带符号数的条件转移

指令

354 JL 条件转移指令JL/JNGE

格式: JL/JNGE标号

功能: 小于/不大于等于时转移

说明: 用于带符号数的条件转移

指令

355 JNGE 条件转移指令JL/JNGE

格式: JL/JNGE标号

功能: 小于/不大于等于时转移

说明: 用于带符号数的条件转移

指令

356 JLE 条件转移指令JLE/JNG

格式: JLE/JNG 标号

功能: 小于等于/不大于时转移

说明: 用于带符号数的条件转移

指令

星尘-易尘

页码,12/22

357 JNG 条件转移指令JLE/JNG

格式: JLE/JNG 标号

功能: 小于等于/不大于时转移

说明: 用于带符号数的条件转移

指令

358 LOOP 循环控制指令LOOP

格式: LOOP 标号

功能: (CX)<--(CX)-1,(CX)<>0,则转移至标号处循

环执行, 直至(CX)=0,继续执行后继指令.

说明:

1. 本指令是用CX寄存器作为计

数器,来控制程序的循环.

2. 它属于段内SHORT短类型转

移,目的地址必须距本指令在-

128到+127个字节的范围内.

359 LOOPZ 循环控制指令LOOPZ/LOOPE

格式: LOOPZ/LOOPE 标号

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

号处循环

说明:

1. 本指令是用CX寄存器作为计

数器,来控制程序的循环.

2. 它属于段内SHORT短类型转

移,目的地址必须距本指令在-

128到+127个字节的范围内.

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

360 LOOPE 循环控制指令LOOPZ/LOOPE

格式: LOOPZ/LOOPE 标号

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

号处循环

说明:

1. 本指令是用CX寄存器作为计

数器,来控制程序的循环.

2. 它属于段内SHORT短类型转

移,目的地址必须距本指令在-

128到+127个字节的范围内.

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

361 LOOPNZ循环控制指令LOOPNZ/LOOPNE

格式: LOOPNZ/LOOPNE 标号

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

号处循环

说明:

1. 本指令是用CX寄存器作为计

数器,来控制程序的循环.

2. 它属于段内SHORT短类型转

移,目的地址必须距本指令在-

128到+127个字节的范围内.

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

362 LOOPNE循环控制指令LOOPNZ/LOOPNE

格式: LOOPNZ/LOOPNE 标号

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

号处循环

说明:

1. 本指令是用CX寄存器作为计

数器,来控制程序的循环.

2. 它属于段内SHORT短类型转

移,目的地址必须距本指令在-

128到+127个字节的范围内.

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

363 CALL 过程调用指令 CALL

格式: CALL OPRD

功能: 过程调用指令

说明:

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

2. 过程调用可分为段内调用和

段间调用两种.寻址方式也可以

分为直接寻址和间接寻址两种.

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

364 RET 返回指令 RET

格式: RET

说明:

由于在过程定义时,已指明其近

星尘-易尘

页码,13/22

功能: 当调用的过程结束后实现从过程返回至原调

用程序的下一条指令,本指令不影响标志位.

(NEAR)或远(FAR)的属性,所以

RET指令根据段内调用与段间调

用,执行不同的操作

对段内调用: 返回时,由堆栈弹

出一个字的返回地址的段内偏移

量至IP.

对段外调用: 返回时,由堆栈弹

出的第一个字为返回地址的段内

偏移量,将其送入IP中,由堆栈弹

出第二个字为返回地址的段基

址,将其送入CS中.

365 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. 本指令不影响标志位.

366 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. 本指令不影响标志位.

367 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. 本指令不影响标志位.

368 CMPS 字符串比较指令

格式: CMPS OPRD1,OPRD2

CMPSB

CMPSW

说明:

1. 其中OPRD2为源串符号地

址,OPRD1为目的串符号地址.

星尘-易尘

页码,14/22

功能: 由SI寻址的源串中数据与由DI寻址的目的串

中数据进行比较,比较结果送标志位,而不改变操作

数本身.

同时SI,DI将自动调整.

2. 本指令影响标志位AF、CF、

OF、SF、PF、ZF.本指令可用来

检查二个字符串是否相同,可以

使用循环控制方法对整串进行比

较.

3. 与MOVS相似,CMPS指令也可以

不使用操作数,此时可用指令

CMPSB或CMPSW分别表示字节串比

较或字串比较.

369 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分别表示字节串比

较或字串比较.

370 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分别表示字节串比

较或字串比较.

371 SCAS 字符串搜索指令 SCAS

格式: SCAS OPRD

SCASB

SCASW

功能: 把AL(字节串)或AX(字串)的内容与由DI寄存

器寻址的目的串中的数据相减,结果置标志位,但不

改变任一操作数本身.

地址指针DI自动调整.

说明:

1. 其中OPRD为目的串符号地址.

2. 本指令影响标志AF、CF、

OF、PF、SF、ZF.该指令可查找

字符串中的一个关键字,只需在

本指令执行前,

把关键字放在AL(字节)或AX(字

串 )中,用重复前缀可在整串中

查找.

指令中不使用操作数时,可用指

令格式SCASB,SCASW,分别表示字

节串或字串搜索指令.

372 SCASB 字符串搜索指令 SCAS

格式: SCAS OPRD

SCASB

SCASW

功能: 把AL(字节串)或AX(字串)的内容与由DI寄存

器寻址的目的串中的数据相减,结果置标志位,但不

改变任一操作数本身.

说明:

1. 其中OPRD为目的串符号地址.

2. 本指令影响标志AF、CF、

OF、PF、SF、ZF.该指令可查找

字符串中的一个关键字,只需在

本指令执行前,

星尘-易尘

页码,15/22

地址指针DI自动调整.

把关键字放在AL(字节)或AX(字

串 )中,用重复前缀可在整串中

查找.

指令中不使用操作数时,可用指

令格式SCASB,SCASW,分别表示字

节串或字串搜索指令.

373 SCASW 字符串搜索指令 SCAS

格式: SCAS OPRD

SCASB

SCASW

功能: 把AL(字节串)或AX(字串)的内容与由DI寄存

器寻址的目的串中的数据相减,结果置标志位,但不

改变任一操作数本身.

地址指针DI自动调整.

说明:

1. 其中OPRD为目的串符号地址.

2. 本指令影响标志AF、CF、

OF、PF、SF、ZF.该指令可查找

字符串中的一个关键字,只需在

本指令执行前,

把关键字放在AL(字节)或AX(字

串 )中,用重复前缀可在整串中

查找.

指令中不使用操作数时,可用指

令格式SCASB,SCASW,分别表示字

节串或字串搜索指令.

374 LODS 取字符串元素指令 LODS

格式: LODS OPRD 其中OPRD为源字符串符号地址.

功能: 把SI寻址的源串的数据字节送AL或数据字送

AX中去, 并根据DF的值修改地址指针SI进行自动调

整.

说明:

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

2. 当不使用操作数时,可用LODS

(字节串)或LODSW(字串)指令.

375 STOS 字符串存储指令 STOS

格式: STOS OPRD

功能: 把AL(字节)或AX(字)中的数据存储到DI为目

的串地址指针所寻址的存储器单元中去.指针DI将

根据DF的值进行自动调整.

说明:

1. 其中OPRD为目的串符号地址.

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

用操作数时,可用STOSB或STOSW

分别表示字节串或字串的操作.

376 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)时,

继续重复执行串比较指令.

377 REPZ 重复前缀的说明

格式: REP ;CX<>0 重复执行字符串指令

REPZ/REPE ;CX<>0 且ZF=1重复执行字符串指令

REPNZ/REPNE ;CX<>0 且ZF=0重复执行字符串指令

说明:

1. REPZ/REPE常用与CMPS串操作

指令结合使用, 可以完成两组字

符串的比较.

2. REPZ/REPE常与SCAS指令结合

星尘-易尘

页码,16/22

功能: 在串操作指令前加上重复前缀,可以对字符

串进重复处理.由于加上重复前缀后,对应的指令代

码是不同的,所以指令的功能便具有重复处理的功

能,重复的次数存放在CX寄存器中.

使用,可以完成在一个字符串中

搜索一个关键字.

3. REPNZ/REPNE与CMPS指令结合

使用,表示当串未结束(CX=1)且

当对应串元素不相同(ZF=0)时,

继续重复执行串比较指令.

4. REPNZ/REPNE与SCAS指令结合

使用,表示串未结束(CX=1)且当

关键字与串元素不相同(ZF=0)

时,继续重复执行串搜索指令.

378 REPE 重复前缀的说明

格式: REP ;CX<>0 重复执行字符串指令

REPZ/REPE ;CX<>0 且ZF=1重复执行字符串指令

REPNZ/REPNE ;CX<>0 且ZF=0重复执行字符串指令

功能: 在串操作指令前加上重复前缀,可以对字符

串进重复处理.由于加上重复前缀后,对应的指令代

码是不同的,所以指令的功能便具有重复处理的功

能,重复的次数存放在CX寄存器中.

说明:

1. REPZ/REPE常用与CMPS串操作

指令结合使用, 可以完成两组字

符串的比较.

2. REPZ/REPE常与SCAS指令结合

使用,可以完成在一个字符串中

搜索一个关键字.

3. REPNZ/REPNE与CMPS指令结合

使用,表示当串未结束(CX=1)且

当对应串元素不相同(ZF=0)时,

继续重复执行串比较指令.

4. REPNZ/REPNE与SCAS指令结合

使用,表示串未结束(CX=1)且当

关键字与串元素不相同(ZF=0)

时,继续重复执行串搜索指令.

379 REPNZ 重复前缀的说明

格式: REP ;CX<>0 重复执行字符串指令

REPZ/REPE ;CX<>0 且ZF=1重复执行字符串指令

REPNZ/REPNE ;CX<>0 且ZF=0重复执行字符串指令

说明:

1. REPZ/REPE常用与CMPS串操作

指令结合使用, 可以完成两组字

符串的比较.

2. REPZ/REPE常与SCAS指令结合

使用,可以完成在一个字符串中

搜索一个关键字.

3. REPNZ/REPNE与CMPS指令结合

使用,表示当串未结束(CX=1)且

当对应串元素不相同(ZF=0)时,

继续重复执行串比较指令.

4. REPNZ/REPNE与SCAS指令结合

使用,表示串未结束(CX=1)且当

关键字与串元素不相同(ZF=0)

时,继续重复执行串搜索指令.

380 REPNE 重复前缀的说明

格式: REP ;CX<>0 重复执行字符串指令

REPZ/REPE ;CX<>0 且ZF=1重复执行字符串指令

REPNZ/REPNE ;CX<>0 且ZF=0重复执行字符串指令

说明:

1. REPZ/REPE常用与CMPS串操作

指令结合使用, 可以完成两组字

符串的比较.

2. REPZ/REPE常与SCAS指令结合

使用,可以完成在一个字符串中

搜索一个关键字.

3. REPNZ/REPNE与CMPS指令结合

使用,表示当串未结束(CX=1)且

当对应串元素不相同(ZF=0)时,

继续重复执行串比较指令.

4. REPNZ/REPNE与SCAS指令结合

星尘-易尘

页码,17/22

使用,表示串未结束(CX=1)且当

关键字与串元素不相同(ZF=0)

时,继续重复执行串搜索指令.

381 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

,在串操作指令执行时,按增量的

方式修改吕指针.

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

格式:

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

,在串操作指令执行时,按增量的

方式修改吕指针.

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

格式:

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

,在串操作指令执行时,按增量的

方式修改吕指针.

384 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

,在串操作指令执行时,按增量的

方式修改吕指针.

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

格式:

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

,在串操作指令执行时,按增量的

方式修改吕指针.

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

格式:

说明: 例如串操作中的程序,经

常用CLD指令清方向标志使DF=0

,在串操作指令执行时,按增量的

星尘-易尘

页码,18/22

CLC ;置CF=0

STC ;置CF=1

CMC ;置CF=(Not CF)进位标志求反

CLD ;置DF=0

STD ;置DF=1

CLI ;置IF=0,CPU禁止响应外部中断

STI ;置IF=1,使CPU允许向应外部中断

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

方式修改吕指针.

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

格式:

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

,在串操作指令执行时,按增量的

方式修改吕指针.

388 HLT 处理器暂停指令 HLT

格式: HLT

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

说明:

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

2. 由执行HLT引起的暂停,只有

RESET(复位)、NMI(非屏蔽中断

请求)、INTR(可屏蔽的外部中断

请求)信号可以使

其退出暂停状态.它可用于等待

中断的到来或多机系统的同步操

作.

389 WAIT 处理器等待指令 WAIT

格式: WAIT

功能: 本指令将使处理器检测TEST端脚,当TEST有

效时,则退出等待状态执行下条指令,否则处理器处

于等待状态,直到TEST有效.

说明: 本指令不影响标志位.

390 ESC 处理器交权指令 ESC

格式: ESC EXTOPRD,OPRD

功能: 使用本指令可以实现协处理器出放在ESC指

令代码中的6位常数,该常数指明协处理器要完成的

功能.

当源操作数为存储器变量时,则取出该存储器操作

数传送给协处理器.

说明:

1. 其中EXTOPRD为外部操作

码,OPRD为源操作数.

2. 本指不影响标志位.

391 NOP 空操作指令 NOP

格式: NOP

功能: 本指令不产生任何结果,仅消耗几个时钟周

期的时间,接着执行后续指令,常用于程序的延时

等.

说明: 本指令不影响标志位.

392 LOCK 封锁总线指令 LOCK

格式: LOCK

功能: 指令是一个前缀,可放在指令的前面,告诉

CPU在执行该指令时,不允许其它设备对总线进行访

问.

无可用信息!用户可自行添加!

393 IN 输入指令 IN

说明:

星尘-易尘

页码,19/22

一、状态寄存器

PSW(Program Flag)程序状态字寄存器,是一个16位寄存器,由条件码标志(flag)和控制标

志构成,如下所示:

条件码:

①OF(Overflow Flag)溢出标志。溢出时为1,否则置0。

②SF(Sign Flag)符号标志。结果为负时置1,否则置0.

③ZF(Zero Flag)零标志,运算结果为0时ZF位置1,否则置0.

④CF(Carry Flag)进位标志,进位时置1,否则置0.

⑤AF(Auxiliary carry Flag)辅助进位标志,记录运算时第3位(半个字节)产生的进位置。

有进位时1,否则置0.

⑥PF(Parity Flag)奇偶标志。结果操作数中1的个数为偶数时置1,否则置0.

控制标志位:

格式: 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)]表示.

394 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. 输入指令及输出指令对标志

位都不影响.

395 INTO 溢出中断指令 INTO(INTerrupt if Overflow)

格式: INTO

功能: 本指令检测OF标志位,当OF=1时,说明已发生

溢出,立即产生一个中断类型4的中断,当OF=0时,

本指令不起作用.

说明:

1. 本指令影响标志位IF及TF.

2. 本指令可用于溢出处理,当

OF=1时,产生一个类型4的软中

断.在中断处理程序中完成溢出

的处理操作.

396 INT 软中断指令 INT

格式: INT n 其中n为软中断的类型号.

功能: 本指令将产生一个软中断,把控制转向一个

类型号为n的软中断,该中断处理程序入口地址在中

断向量表的n*4地址

处的二个存储器字(4个单元)中.

说明: 操作过程与INTO指令雷

同,只需将10H改为n*4即可.所

以,本指令也将影响标志位IF及

TF.

397 IRET 中断返回指令 IRET

格式: IRET

功能: 用于中断处理程序中,从中断程序的断点处

返回,继续执行原程序.

说明:

1. 本指令将影响所有标志位.

2. 无论是软中断,还是硬中断,

本指令均可使其返回到中断程序

的断点处继续执行原程序.

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0

OF DF IF TF SF ZF AF PF CF

星尘-易尘

页码,20/22

⑦DF(Direction Flag)方向标志,在串处理指令中控制信息的方向。

⑧IF(Interrupt Flag)中断标志。

⑨TF(Trap Flag)陷井标志。

二、 直接标志转移(8位寻址)

三、间接标志转移(8位寻址)

四、无条件转移指令

五、16位/32位寻址方式

指令格

机器码

测试条

如...则转移

指令格式 机器码 测试条件 如...则转移

JC 72 C=1 有进位 JNS 79 S=0 正号

JNC 73 C=0 无进位 JO 70 O=1 有溢出

JZ/JE 74 Z=1 零/等于 JNO 71 O=0 无溢出

JNZ/JNE 75 Z=0 不为零/不等于 JP/JPE 7A P=1 奇偶位为偶

JS 78 S=1 负号 JNP/IPO 7B P=0 奇偶位为奇

指令格式 机器码 测试格式 如...则转移

JA/JNBE(比较无符号数) 77 C或Z=0 > 高于/不低于或等于

JAE/JNB(比较无符号数) 73 C=0 >= 高于或等于/不低于

JB/JNAE(比较无符号数) 72 C=1 < 低于/不高于或等于

JBE/JNA(比较无符号数) 76 C或Z=1 <= 低于或等于/不高于

JG/JNLE(比较带符号数) 7F (S异或O)或Z=0 > 大于/不小于或等于

JGE/JNL(比较带符号数) 7D S异或O=0 >= 大于或等于/不小于

JL/JNGE(比较带符号数) 7C S异或O=1 < 小于/不大于或等于

JLE/JNG(比较带符号数) 7E (S异或O)或Z=1 <= 小于或等于/不大于

操作码 伪码指令含义

EB cb JMP rel8 相对短跳转(8位),使rel8处的代码位下一条指令

E9 cw JMP rel16 相对跳转(16位),使rel16处的代码位下一条指令

FF /4 JMP r/m16 绝对跳转(16位),下一指令地址在r/m16中给出

FF /4 JMP r/m32 绝对跳转(32位),下一指令地址在r/m32中给出

EA cb JMP ptr16:16 远距离绝对跳转, 下一指令地址在操作数中

EA cb JMP ptr16:32 远距离绝对跳转, 下一指令地址在操作数中

FF /5 JMP m16:16 远距离绝对跳转, 下一指令地址在内存m16:16中

FF /5 JMP m16:32 远距离绝对跳转, 下一指令地址在内存m16:32中

操作码 伪码指令 跳转含义 跳转类型 跳转的条件(标志位)

0F 87 cw/cd JA rel16/32 大于 near (CF=0 and ZF=0)

0F 83 cw/cd JAE rel16/32 大于等于 near (CF=0)

0F 82 cw/cd JB rel16/32 小于 near (CF=1)

0F 86 cw/cd JBE rel16/32 小于等于 near (CF=1 or ZF=1)

0F 82 cw/cd JC rel16/32 进位 near (CF=1)

0F 84 cw/cd JE rel16/32 等于 near (ZF=1)

0F 84 cw/cd JZ rel16/32 为0 near (ZF=1)

0F 8F cw/cd JG rel16/32 大于 near (ZF=0 and SF=OF)

0F 8D cw/cd JGE rel16/32 大于等于 near (SF=OF)

0F 8C cw/cd JL rel16/32 小于 near (SF<>OF)

0F 8E cw/cd JLE rel16/32 小于等于 near (ZF=1 or SF<>OF)

0F 86 cw/cd JNA rel16/32 不大于 near (CF=1 or ZF=1)

0F 82 cw/cd JNAE rel16/32 不大于等于 near (CF=1)

0F 83 cw/cd JNB rel16/32 不小于 near (CF=0)

0F 87 cw/cd JNBE rel16/32 不小于等于 near (CF=0 and ZF=0)

0F 83 cw/cd JNC rel16/32 不进位 near (CF=0)

0F 85 cw/cd JNE rel16/32 不等于 near (ZF=0)

0F 8E cw/cd JNG rel16/32 不大于 near (ZF=1 or SF<>OF)

0F 8C cw/cd JNGE rel16/32 不大于等于 near (SF<>OF)

星尘-易尘

页码,21/22

注:一些指令操作数的含义说明:

rel8 表示 8 位相对地址

rel16 表示 16 位相对地址

rel16/32 表示 16或32 位相对地址

r/m16 表示16位寄存器

r/m32 表示32位寄存器

test逻辑与运算结果为零,就把ZF(零标志)置1;

cmp 算术减法运算结果为零,就把ZF(零标志)置1

0F 8D cw/cd JNL rel16/32 不小于 near (SF=OF)

0F 8F cw/cd JNLE rel16/32 不小于等于 near (ZF=0 and SF=OF)

0F 81 cw/cd JNO rel16/32 未溢出 near (OF=0)

0F 8B cw/cd JNP rel16/32 不是偶数 near (PF=0)

0F 89 cw/cd JNS rel16/32 非负数 near (SF=0)

0F 85 cw/cd JNZ rel16/32

非零(不等

于)

near (ZF=0)

0F 80 cw/cd JO rel16/32 溢出 near (OF=1)

0F 8A cw/cd JP rel16/32 偶数 near (PF=1)

0F 8A cw/cd JPE rel16/32 偶数 near (PF=1)

0F 8B cw/cd JPO rel16/32 奇数 near (PF=0)

0F 88 cw/cd JS rel16/32 负数 near (SF=1)

0F 84 cw/cd JZ rel16/32 为零(等于) near (ZF=1)

星尘-易尘

页码,22/22__

 

0

推荐

名称 解释 格式 
a (Assemble) 逐行汇编 a [address] 
c (Compare) 比较两内存块 c range address 
d (Dump) 内存16进制显示 d [address]或 d [range] 
e (Enter) 修改内存字节 e address [list] 
f (fin) 预置一段内存 f range list 
g (Go) 执行程序 g [=address][address...] 
h (Hexavithmetic) 制算术运算 h value value 
i (Input) 从指定端口地址输入 i pataddress 
l (Load) 读盘 l [address [driver seetor> 
m (Move) 内存块传送 m range address 
n (Name) 置文件名 n filespec [filespec...] 
o (Output) 从指定端口地址输出 o portadress byte 
q (Quit) 结束 q 
r (Register) 显示和修改寄存器 r [register name] 
s (Search) 查找字节串 s range list 
t (Trace) 跟踪执行 t [=address] [value] 
u (Unassemble) 反汇编 u [address ]或range 
w (Write) 存盘 w [address[driver sector secnum> 
? 联机帮助 ? 

debug小汇编a命令 

debug小汇编a命令是一个很有用的功能,许多的小程序都要他来做。 

编一些小程序比汇编要来得方便,快洁。 
在Debug中,中断是非常有用的,首先,让我们先了解一下中断。 
所谓中断,其实,就是,当你做某事时,有人过来找你有其他事,你先放下手中的事(计算机中,称为保护现场) 
,再去与叫你的那个人办事去,等完了,你又回,接着做刚才的事。这是个很通俗的讲法。 
计算机在运行时,也会出现这种情况,我们叫之中断。 
下面是他的一些常用中断向量的入口值详解:(记住哦,很用的...呵呵) 

 


IBM PC 中断 int10 
ooH 屏幕方式设置 

入口:AH=0,AL=显示方式代码(0--6) 
0:40*25 黑白 
1:40*25 彩色 
2:80*25 黑白 
3:80*25 彩色文本 
4:320*200 彩色 
5:320*200 黑白 
6:640*200 黑白图形模式 
7:80*25 单色字符(单色显示器) 

0BH 色彩设置 
入口:AH=0B,BL=0 设背景色,BH=0--15 BL=1 设调色码,BH=0--1 
0CH 写图形点 
入口:AH=0C,CX:DX=列号:行号,AL=颜色 
ODH 读图形点 
入口:AH=0D,CX:DX=列号:行号 
返回:AL=颜色 
0EH 在当前页、当前光标处写字符 
入口:AH=0E,AL=字符的ASCII码,BL=前景色 
OFH 显示器状态 
入口:AH=0F 
返回:AL=当前显示器方式,AH=屏幕列数,BH=当前页号 

01H 光标设置 
入口:AH=1,CH=光标起始行号(00--0C),CL=光标结束行号(00--0C) 
注:CH > CL 
02H 光标定位 
入口:AH=2,BH=页号,DH:DL=起始行:列 
03H 读光标位置 
入口:AH=3,BH=页号。 
返回:DH:DL=起始行:列 
06H 窗口上卷 
入品:AH=6,AL=窗口上卷行数,CH:CL-DH:DL 窗口坐标 
注:AL=0 卷动整个窗口 
07H 窗口下卷 
入口:AH=7,AL=窗口下卷行数,CH:CL-DH:DL 窗口坐标 
08H 读当前光标处字符和属性 
入口:AH=8,BH=页号。 
返回:AH:AL=字符的颜色:字符的ASCII码 
注:颜色代码见下对照表 
09H:在当前光标处写字符和属性 
注:光标不下移 
入口:AH=9,BH=页号,BL:AL=字符的颜色:字符的ASCII码,CX=重复次数 
1 2 3 4 5 6 7 8 
BL R G B I R G B 
闪烁 字符底色 加亮 字符颜色 

中断向量号表 

中断号 解释 中断号 解释 
0 除数为0错 19 引导装入程序 
1 音步中断 1A 日时调用 
2 不可屏蔽中断NMI 1B 键盘阻断时得到控制权 
3 断电中断(CCH) 1C 时钟中断时得到控制权 
4 溢出中断 1D 指向CRT初始参数表 
5 屏幕打印中断 1E 指向盒带参数表 
6-7 保留 1F 1KB图形模式 
8 计时器中断(18.2秒) 20 结束DOS程序 
9 键盘中断 21 DOS功能调用 
A-D 保留 22 结束地址(建义用EXEC) 
E 软盘机中断 23 DOS Crtl-Break退出地址 
F 保留 24 DOS致命错向量 
10 屏幕I/O调用 25 DOS绝对磁盘读 
11 设备检查调用 26 DOS绝对磁盘写 
12 存储器检查调用 27 结束程序并驻留(建义用31h) 
13 软盘机I/O调用 28-3F DOS保留 
14 RS-233I/O调用 40-7F 未用 
15 盒带机I/O调用 80-85 BASIC保留 
16 键盘I/O调用 86-F0 BASIC解释程序用 
17 打印机I/O调用 F1-FF 未用 
18 ROM-BASIC入口 


指令名详解 
call 指令(过程调用)(控制指令-长转移) 

详解: 

段内直接调用 

段内间接调用(寄存器) 

段内间接调用(存储器) 

段间直接调用 

段间间接调用 

指令名 
jmp 指令(无条件转移指令)(控制指令-长转移) 

详解: 
段内直接跳转 

短段内直接跳转 

段内间接跳转(寄存器) 

段内间接跳转(存储器) 

段间直接跳转 

段间间接跳转 

指令名 
ret 指令(过程返回)(控制指令-长转移) 

详解: 

段内返回 

段内返回立即数加于sp 

段间返回 

段间返回立即数加于sp 

na/jnbe 指令(控制指令-短转移) 不小于或不等于时转移 

jae/jnb 指令 (控制指令-短转移) 大于或等于时转移 

jb/jnae 指令 (控制指令-短转移) 小于转移 

jbe/jna 指令 (控制指令-短转移) 小于或等 于转移 

jg/jnle 指令(控制指令-短转移) 大于转移 

jge/jnl 指令 (控制指令-短转移) 大于或等于转移 

jl/jnge 指令 (控制指令-短转移) 小于转移 

jle/jng 指令 (控制指令-短转移) 小于或等 于转移 

je/jz 指令 (控制指令-短转移) 等于转移 

jne/jnz 指令 (控制指令-短转移) 不等于转移 

jc 指令 (控制指令-短转移) 有进位时转移 

jnc 指令 (控制指令-短转移) 列进位时转移 
jno 指令 (控制指令-短转移) 不溢出时转移 
jnp/jpo 指令 (控制指令-短转移) 奇偶性为奇数时转移 

jns 指令 (控制指令-短转移) 符号位为"0"转移 

jo 指令 (控制指令-短转移) 溢出转移 

jp/jpe 指令 (控制指令-短转移) 奇偶性为偶数时转移 

js 指令 (控制指令-短转移) 符号位为"1"时转移 

loop 指令 (循环控制指令-短转移) cx 不为0时循环 

loope/loopz 指令 (循环控制指令-短转移) cx 不为0且标志 z=1 时循环 

loopne/loopnz 指令 (循环控制指令-短转移) cx 不为0且标志 z=0 时循环 

jcxz 指令 (循环控制指令-短转移) cx 为0时转移 

★int 指令 (中断指令) 中断指令(后详解) 

into 指令 (中断指令) 溢出中断 

iret 指令 (中断指令) 中断返回 


指令名 
shl 指令(逻辑左移) 
sal 指令(算术左移) 
shr 指令(逻辑右移) 
sar 指令(算术右移) 寄存器,1 
rol 指令(循环左移) 寄存器,cl 
ror 指令(循环右移) 存储器,1 
rcl 指令(通过进位的循环左移)存储器,cl 
rcr 指令(通过进位的循环右移)(逻辑运算) 


not 指令(取反运算)寄存器求反 

(逻辑运算)存储器求反 

and 指令(与运算) (逻辑运算) 

寄存器 and 寄存器 寄存器 
寄存器 and 存储器 寄存器 

存储器 and 寄存器 存储器 

立即数 and 存储器 存储器 

立即数 and 累加器 累加器 

or 指令(或运算)(逻辑运算) 

寄存器 or 寄存器 寄存器 
寄存器 or 存储器 寄存器 

存储器 or 寄存器 存储器 

立即数 or 存储器 存储器 

立即数 or 累加器 累加器 

test 指令(测试) (逻辑运算) 

寄存器 test 寄存器 
寄存器 test 存储器 
寄存器 test 立即数 
存储器 test 立即数 
累加器 test 立即数 

movs 指令(串传送)(字符串操作指令) 
单个传送 
重复传送 

cmps 指令(串比较) (字符串操作指令) 
单个比较 
重复比较 

scas 指令(串扫描)(字符串操作指令) 
单个搜索 
重复搜索 

lods 指令(装入串) 
(字符串操作指令) 
单个装载 
重复装载 

stos 指令(保存串) (字符串操作指令) 
单个存储 
重复存储 

mov 指令(传送字或字节)(数据传送命令) 
寄存器与寄存器间传送 
存储器与寄存器间传送 
立即数传送给存储器 
立即数传送给寄存器 
存储器传送给累加器 
累加器传送存储器 
寄存器传送给段寄存器 
存储器传送给段寄存器 
段寄存器传送给寄存器 
段寄存器传送给存储存器 

pop 指令(把字弹出堆栈) (数据传送命令) 

push 指令(把字压入堆栈) 
存储器 
寄存器 
段寄器 
xchg 指令(交换字或字节) (数据传送命令) 
寄存器与寄存器交换 
存储器与寄存器交换 
寄存器与累加器交换 

in 指令(端口输入) (数据传送命令) 
直接输入 
间接输入 

out 指令(端口输出) (数据传送指令) 
直接输出 
间接输出 

add 指令(加法)(算术指令) 
adc 指令(带进位加法) 
寄存器+寄存器 寄存器 
寄存器+存储器 寄存器 
存储器+寄存器 存储器 
立即数+存储器 存储器 
立即数+累加器 累加器 

inc 指令(加1)(算术指令) 
存储器增量 
寄存器增量 

sub 指令(减法) (算术指令) 
sbb 指令(带借位减法) 
寄存器-寄存器 寄存器 
寄存器-存储器 寄存器 
存储器-寄存器 存储器 
立即数-存储器 存储器 
立即数-累加器 累加器 

dec 指令(减1)(算术指令) 
存储器减量 
寄存器减量 

nec 指令(求反,以0减之) 
寄存器求补 
存储器求补 

cmp 指令(比较)(算术指令) 
寄存器与寄存器比较 
寄存器与存储器比较 
寄存器与立即数比较 
存储器与立即数比较 
累加器与立即数比较 

mul 指令(无符号乘法) (算术指令) 
imul 指令(整数乘法) 
与8位寄存器相乘 
与16位寄存器相乘 
与8位存储单元相乘 
与16位存储单元相乘 

div 指令(无符号除法)(算术指令) 
idiv 指令(整数除法) 
被8位寄存器除 
被16位寄存器除 
被8位存储单元除 
被16位存储单元除 


Debug实战 
1.查看主板的生产日期,版本 
D ffff:05 
D fe00:0e 

2.模拟Rest键功能 

:100 jmp ffff:0000 
:105 

3.快速格式化软盘 
L 100 0 0 * '插入一张己格式化软盘 
W 100 0 0 * '放入一张欲格式化软盘 
注:* 分别为:720K e |1.2M id |1.44M 21 

4.硬盘格式化两种方法 
(1)G=c800:05 
(2) A 100 
mov ax,0703 
mov cx,0001 
mov dx,0080 
int 13 
int 3 
g 100 
5.加速键盘 

mov ax,0305 
mov bx,0000 
int 16 
int 20 
rcx 
10 
n fast.com 

6.关闭显示器(恢复时,按任意键) 


mov ax,1201 
mov bl,36 
int 10 
mov ah,0 
int 16 
mov ax,1200 
int 10 
rcx 
10 
n crt-of.com 


7.硬盘DOS引导记录的修复 
在软驱中放入一张己格式化软盘 
debug 
-l 100 2 0 1 
-w 100 0 50 1 
把软盘放入故障机软驱中 
debug 
-l 100 0 50 1 
-w 100 2 0 1 
-q 
8.清coms中setup口令 
debug 
-a 
mov bx,0038 
mov cx,0000 
mov ax,bx 
out 70,al 
inc cx 
cmp cx,0006 
jnz 0106 
int 20 
-rcx 
:20 
-nclearpassword.com 
-w 
-q 
注:以上适合super与dtk机,对于ast机,因为他的口令放在coms的4ch-51h地址处,只要将:mov bx,0038 改为: mov 
bx,004c即可 
9.取消coms的密码(将coms数据清为初始化) 
-o 70,10 
-o 71,10 
-g 
-q 
10.将硬盘主引导记录保存到文件中 

debug 
-a 
mov ax,0201 
mov bx,0200 
mov cx,0001 
mov dx,0080 
mov int 13 
int 3 
-rcx 
:200 
-nboot.dat 
-w 
-q 
11.调用中断实现重启计算机(可以成文件) 
debug 
-a 
int 19 
int 20 
-rcx 
:2 
-nreset.com 
-w 
-q 

 


DEBUG主要命令 

DEBUG是为汇编语言设计的一种高度工具,它通过单步、设置断点等方式为汇编语言程序员提供了非常有效的调试手段。 
一、DEBUG程序的调用 
在DOS的提示符下,可键入命令: 
C:\DEBUG [D:][PATH][FILENAME[.EXT>[PARM1][PARM2] 
其中,文件名是被调试文件的名字。如用户键入文件,则DEBUG将指定的文件装入存储器中,用户可对其进行调试。如果未键入文件名,则用户可以用当前存储器的内容工作,或者用DEBUG命令N和L把需要的文件装入存储器后再进行调试。命令中的D指定驱动器PATH为路径,PARM1和PARM2则为运行被调试文件时所需要的命令参数。 
在DEBUG程序调入后,将出现提示符,此时就可用DEBUG命令来调试程序。 
二、DEBUG的主要命令 
1、显示存储单元的命令D(DUMP),格式为: 
_D[address]或_D[range] 
例如,按指定范围显示存储单元内容的方法为: 
-d100 120 
18E4:0100 c7 06 04 02 38 01 c7 06-06 02 00 02 c7 06 08 02 G...8.G.....G... 
18E$:0110 02 02 bb 04 02 e8 02 00-CD 20 50 51 56 57 8B 37 ..;..h..M PQVW. 

18E4:0120 8B 
其中0100至0120是DEBUG显示的单元内容,左边用十六进制表示每个字节,右边用ASCII字符表示每个字节,·表示不可显示的字符。这里没有指定段地址,D命令自动显示DS段的内容。如果只指定首地址,则显示从首地址开始的80个字节的内容。如果完全没有指定地址,则显示上一个D命令显示的最后一个单元后的内容。 
2、修改存储单元内容的命令有两种。 
·输入命令E(ENTER),有两种格式如下:第一种格式可以用给定的内容表来替代指定范围的存储单元内容。命令格式为: 
-E address [list] 
例如,-E DS:100 F3'XYZ'8D 
其中F3,'X','Y','Z'和各占一个字节,该命令可以用这五个字节来替代存储单元DS:0100到0104的原先的内容 
第二种格式则是采用逐个单元相继修改的方法。命令格式为: 
-E address 
例如,-E DS:100 
则可能显示为: 
18E4:0100 89.- 
如果需要把该单元的内容修改为78,则用户可以直接键入78,再按"空格"键可接着显示下一个单元的内容,如下: 
18E4:0100 89.78 1B.- 
这样,用户可以不断修改相继单元的内容,直到用ENTER键结束该命令为止。 
·填写命令F(FILL),其格式为: 
-F range list 
例如:-F 4BA:0100 5 F3'XYZ'8D 
使04BA:0100~0104单元包含指定的五个字节的内容。如果list中的字节数超过指定的范围,则忽略超过的项;如果list的字节数小于指定的范围,则重复使用list填入,直到填满指定的所有单元为止。 
3)检查和修改寄存器内容的命令R(register),它有三种格式如下: 
·显示CPU内所有寄存器内容和标志位状态,其格式为: 
-R 
例如,-r 
AX=0000 BX=0000 CX=010A DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000 
DS=18E4 ES=18E4 SS=18E4 CS=18E4 IP=0100 NV UP DI PL NZ NA PO NC 
18E4:0100 C70604023801 MOV WORD PTR [0204],0138 DS:0204=0000 
·显示和修改某个寄存器内容,其格式为: 
-R register name 
例如,键入 
-R AX 
系统将响应如下: 
AX F1F4 
: 
即AX寄存器的当前内容为F1F4,如不修改则按ENTER键,否则,可键入欲修改的内容,如: 

-R bx 
BX 0369 
:059F 
则把BX寄存器的内容修改为059F。 
·显示和修改标志位状态,命令格式为: 
-RF系统将响应,如: 
OV DN EI NG ZR AC PE CY- 
此时,如不修改其内容可按ENTER键,否则,可键入欲修改的内容,如: 
OV DN EI NG ZR AC PE CY-PONZDINV 
即可,可见键入的顺序可以是任意的。 
4)运行命令G,其格式为: 
-G[=address1][address2[address3…> 
其中,地址1指定了运行的起始地址,如不指定则从当前的CS:IP开始运行。后面的地址均为断点地址,当指令执行到断点时,就停止执行并显示当前所有寄存器及标志位的内容,和下一条将要执行的指令。 
5)跟踪命令T(Trace),有两种格式: 
·逐条指令跟踪 
-T [=address] 
从指定地址起执行一条指令后停下来,显示所有寄存器内容及标志位的值。如未指定地址则从当前的CS:IP开始执行。 
·多条指令跟踪 
-T [=address][value] 
从指定地址起执行n条指令后停下来,n由value指定。 
6)汇编命令A(Assemble),其格式为: 
-A[address] 
该命令允许键入汇编语言语句,并能把它们汇编成机器代码,相继地存放在从指定地址开始的存储区中。必须注意:DEBUG把键入的数字均看成十六进制数,所以如要键入十进制数,则其后应加以说明,如100D。 
7)反汇编命令U(Unassemble)有两种格式。 
·从指定地址开始,反汇编32个字节,其格式为: 
-U[address] 
例如: 
-u100 
18E4:0100 C70604023801 MOV WORD PTR[0204],0138 
18E4:0106 C70606020002 MOV WORD PTR[0206],0200 
18E4:010C C70606020202 MOV WORD PTR[0208],0202 
18E4:0112 BBO4O2 MOV BX,0204 
18E4:0115 E80200 CALL 011A 
18E4:0118 CD20 INT 20 
18E4:011A 50 PUSH AX 
18E4:011B 51 PUSH CX 
18E4:011C 56 PUSH SI 
18E4:011D 57 PUSH DI 
18E4:011E 8B37 MOV SI,[BX] 
如果地址被省略,则从上一个U命令的最后一条指令的下一个单元开始显示32个字节。 
·对指定范围内的存储单元进行反汇编,格式为: 
-U[range] 
例如: 
-u100 10c 
18E4:0100 C70604023801 MOV WORD PTR[0204],0138 
18E4:0106 C70606020002 MOV WORD PTR[0206],0200 
18E4:010C C70606020202 MOV WORD PTR[0208],0202 
或 
-u100 112 
18E4:0100 C70604023801 MOV WORD PTR[0204],0138 
18E4:0106 C70606020002 MOV WORD PTR[0206],0200 
18E4:010C C70606020202 MOV WORD PTR[0208],0202 

可见这两种格式是等效的。 
8)命名命令N(Name),其格式为: 
-N filespecs [filespecs] 
命令把两个文件标识符格式化在CS:5CH和CS:6CH的两个文件控制块中,以便在其后用L或W命令把文件装入存盘。filespecs的格式可以是: 
[d:][path] filename[.ext] 
例如, 
-N myprog 
-L 

可把文件myprog装入存储器。 
9)装入命令(Load),有两种功能。 
·把磁盘上指定扇区范围的内容装入到存储器从指定地址开始的区域中。其格式为: 
-L[address[drive sector sector] 
·装入指定文件,其格式为: 
-L[address] 
此命令装入已在CS:5CH中格式化了文件控制块所指定的文件。如未指定地址,则装入CS:0100开始的存储区中。 
10)写命令W(Write),有两种功能。 
·把数据写入磁盘的指定扇区。其格式为: 
-W address drive sector sector 
·把数据写入指定的文件中。其格式为: 
-W[address] 
此命令把指定的存储区中的数据写入由CS:5CH处的文件控制块所指定的文件中。如未指定地址则数据从CS:0100开始。要写入文件的字节数应先放入BX和CX中。 
11)退出DEBUG命令Q(Quit),其格式为: 
-Q 
它退出DEBUG,返回DOS。本命令并无存盘功能,如需存盘应先使用W命令。 

问题:初学者问一个低级问题,执行debug-a后,如果有一行输入错误,如何更改这一行? 

回答: 
加入进行如下输入: 
D:\PWIN95\Desktop>debug 
-a 
2129:0100movax,200 
2129:0103movbx,200 
2129:0106movcx,200 
2129:0109 
此时,发现movbx,200一句错误,应为movbx,20,可以敲回车返回"-"状态,然后输入: 
-a103 
2129:0103movbx,20 
如果多或者少若干行,不必重新输入,可以用M命令移动后面的程序来去掉或者增加程序空间. 


A.程序调用命令 

C>DEBUG [D:] [PATH] [FILENAME[.EXT> [PARM1] [PARM2] 

其中,文件名是被调试文件的名字。如未键入文件名。可用DEBUG命令N和L把需要文件装入存储器后再调试。D指定驱动器,PATH为路径,FILENAME为文件名,PARM为命令参数 

B.显示存储单元命令 

-D [ADDRESS]或 ;ADDRESS 地址 

-D [RANGE] ;RANGE 范围 

C.修改存储单元内容命令 

-E ADDRESS [LIST] 

D.检查和修改寄存器内容命令 

-R [REGISTER NAME] ;Register name 寄存器名字 

E.汇编命令 

-A [ADDRESS] 

F.跟踪命令 

-T [=ADDRESS] [VALUE] ;Value 变量值 

G.运行命令 

-G [=ADDRESS ] [ADDRESS2 [ADDRESS3] 

H.反汇编命令 

-U [ADDRESS] 

-U [RANGE] 

I.命名命令 

-N FILESPECS [FILESPECS] 

FILESPECS的格式可为[D:][PATH]FILENAME [.EXT] 

J.装入命令 

-L [ADDRESS[DRIVE SECTOR SECTOR> ;DRIVE SECTOR 磁盘 扇区 

K.写命令 

W ADDRESS DRIVE SECTOR 

L.退出命令 

-Q

 

 

 

.机械码,又称机器码.

ultraedit打开,编辑exe文件时你会看到

许许多多的由0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F组成的数码,这些数码

就是机器码.

修改程序时必须通过修改机器码来修改exe文件.

.需要熟练掌握的全部汇编知识(只有这么多)

不大容易理解,可先强行背住,混个脸儿熟,以后慢慢的就理解了

cmp a,b 比较ab

mov a,b b的值送给a

ret 返回主程序

nop 无作用,英文“no operation”的简写,意思是“do nothing(机器码90)***机器码的含义参看上面

(解释:ultraedit打开编辑exe文件时你看到90,等同于汇编语句nop)

call 调用子程序

je jz 若相等则跳(机器码74 0F84)

jnejnz 若不相等则跳(机器码750F85)

jmp 无条件跳(机器码EB)

jb 若小于则跳

ja 若大于则跳

jg 若大于则跳

jge 若大于等于则跳

jl 若小于则跳

jle 若小于等于则跳

pop 出栈

push 压栈

.常见修改(机器码)

74=>75 74=>90 74=>EB

75=>74 75=>90 75=>EB

jnz->nop

75->90(相应的机器码修改)

jnz -> jmp

75 -> EB(相应的机器码修改)

jnz -> jz

75->74 (正常) 0F 85 -> 0F 84(特殊情况下,有时,相应的机器码修改)

.两种不同情况的不同修改方法

1.修改为jmp

je(jne,jz,jnz) =>jmp相应的机器码EB (出错信息向上找到的第一个跳转)jmp的作用是绝对跳,无条件跳,从而跳过下面的出错信息

xxxxxxxxxxxx 出错信息,例如:注册码不对,sorry,未注册版不能…,”Function Not Avaible in Demo” 或 ”Command Not Avaible” 或 ”Cant save in Shareware/Demo”等 (我们希望把它跳过,不让它出现)

。。。

。。。

xxxxxxxxxxxx 正确路线所在

2.修改为nop

je(jne,jz,jnz) =>nop相应的机器码90 (正确信息向上找到的第一个跳转) nop的作用是抹掉这个跳转,使这个跳转无效,失去作用,从而使程序顺利来到紧跟其后的正确信息处

xxxxxxxxxxxx 正确信息,例如:注册成功,谢谢您的支持等(我们希望它不被跳过,让它出现,程序一定要顺利来到这里)

。。。

。。。

xxxxxxxxxxxx 出错信息(我们希望不要跳到这里,不让它出现)它们在存贮器和寄存器、寄存器和输入输出端口之间传送数据.

1. 通用数据传送指令.

MOV 传送字或字节.

MOVSX 先符号扩展,再传送.

MOVZX 先零扩展,再传送.

PUSH 把字压入堆栈.

POP 把字弹出堆栈.

PUSHA AX,CX,DX,BX,SP,BP,SI,DI依次压入堆栈.

POPA DI,SI,BP,SP,BX,DX,CX,AX依次弹出堆栈.

PUSHAD EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI依次压入堆栈.

POPAD EDI,ESI,EBP,ESP,EBX,EDX,ECX,EAX依次弹出堆栈.

BSWAP 交换32位寄存器里字节的顺序

XCHG 交换字或字节.( 至少有一个操作数为寄存器,段寄存器不可作为操作数)

CMPXCHG 比较并交换操作数.( 第二个操作数必须为累加器AL/AX/EAX )

XADD 先交换再累加.( 结果在第一个操作数里 )

XLAT 字节查表转换.

── BX 指向一张 256 字节的表的起点, AL 为表的索引值 (0-255,

0-FFH); 返回 AL 为查表结果. ( [BX+AL]->AL )

2. 输入输出端口传送指令.

IN I/O端口输入. ( 语法: IN 累加器, {端口号│DX} )

OUT I/O端口输出. ( 语法: OUT {端口号│DX},累加器 )

输入输出端口由立即方式指定时其范围是 0-255; 由寄存器 DX 指定时,

其范围是 0-65535.

3. 目的地址传送指令.

LEA 装入有效地址.

: LEA DX,string ;把偏移地址存到DX.

LDS 传送目标指针,把指针内容装入DS.

: LDS SI,string ;把段地址:偏移地址存到DS:SI.

LES 传送目标指针,把指针内容装入ES.

: LES DI,string ;把段地址:偏移地址存到ESI.

LFS 传送目标指针,把指针内容装入FS.

: LFS DI,string ;把段地址:偏移地址存到FSI.

LGS 传送目标指针,把指针内容装入GS.

: LGS DI,string ;把段地址:偏移地址存到GSI.

LSS 传送目标指针,把指针内容装入SS.

: LSS DI,string ;把段地址:偏移地址存到SSI.

4. 标志传送指令.

LAHF 标志寄存器传送,把标志装入AH.

SAHF 标志寄存器传送,AH内容装入标志寄存器.

PUSHF 标志入栈.

POPF 标志出栈.

PUSHD 32位标志入栈.

POPD 32位标志出栈.

二、算术运算指令

ADD 加法.

ADC 带进位加法.

INC 加 1.

AAA 加法的ASCII码调整.

DAA 加法的十进制调整.

SUB 减法.

SBB 带借位减法.

DEC 减 1.

NEC 求反(以 减之).

CMP 比较.(两操作数作减法,仅修改标志位,不回送结果).

AAS 减法的ASCII码调整.

DAS 减法的十进制调整.

MUL 无符号乘法.

IMUL 整数乘法.

以上两条,结果回送AHAL(字节运算),DXAX(字运算),

AAM 乘法的ASCII码调整.

DIV 无符号除法.

IDIV 整数除法.

以上两条,结果回送:

商回送AL,余数回送AH, (字节运算);

或 商回送AX,余数回送DX, (字运算).

AAD 除法的ASCII码调整.

CBW 字节转换为字. (AL中字节的符号扩展到AH中去)

CWD 字转换为双字. (AX中的字的符号扩展到DX中去)

CWDE 字转换为双字. (AX中的字符号扩展到EAX中去)

CDQ 双字扩展. (EAX中的字的符号扩展到EDX中去)

三、逻辑运算指令

AND 与运算.

OR 或运算.

XOR 异或运算.

NOT 取反.

TEST 测试.(两操作数作与运算,仅修改标志位,不回送结果).

SHL 逻辑左移.

SAL 算术左移.(=SHL)

SHR 逻辑右移.

SAR 算术右移.(=SHR)

ROL 循环左移.

ROR 循环右移.

RCL 通过进位的循环左移.

RCR 通过进位的循环右移.

以上八种移位指令,其移位次数可达255.

移位一次时可直接用操作码如 SHL AX,1.

移位>1次时则由寄存器CL给出移位次数.

如 MOV CL,04

SHL AX,CL

四、串指令

DS:SI 源串段寄存器 :源串变址.

ESI 目标串段寄存器:目标串变址.

CX 重复次数计数器.

AL/AX 扫描值.

D标志 0表示重复操作中SIDI应自动增量; 1表示应自动减量.

Z标志 用来控制扫描或比较操作的结束.

MOVS 串传送.

( MOVSB 传送字符. MOVSW 传送字. MOVSD 传送双字. )

CMPS 串比较.

( CMPSB 比较字符. CMPSW 比较字. )

SCAS 串扫描.

ALAX的内容与目标串作比较,比较结果反映在标志位.

LODS 装入串.

把源串中的元素(字或字节)逐一装入ALAX.

( LODSB 传送字符. LODSW 传送字. LODSD 传送双字. )

STOS 保存串.

LODS的逆过程.

REP CX/ECX0时重复.

REPE/REPZ ZF=1或比较结果相等,CX/ECX0时重复.

REPNE/REPNZ ZF=0或比较结果不相等,CX/ECX0时重复.

REPC CF=1CX/ECX0时重复.

REPNC CF=0CX/ECX0时重复.

五、程序转移指令

1>无条件转移指令 (长转移)

JMP 无条件转移指令

CALL 过程调用

RET/RETF过程返回.

2>条件转移指令 (短转移,-128+127的距离内)

当且仅当(SF XOR OF)=1,OP1循环控制指令(短转移)

LOOP CX不为零时循环.

LOOPE/LOOPZ CX不为零且标志Z=1时循环.

LOOPNE/LOOPNZ CX不为零且标志Z=0时循环.

JCXZ CX为零时转移.

JECXZ ECX为零时转移.

4>中断指令

INT 中断指令

INTO 溢出中断

IRET 中断返回

5>处理器控制指令

HLT 处理器暂停直到出现中断或复位信号才继续.

WAIT 当芯片引线TEST为高电平时使CPU进入等待状态.

ESC 转换到外处理器.

LOCK 封锁总线.

NOP 空操作.

STC 置进位标志位.

CLC 清进位标志位.

CMC 进位标志取反.

STD 置方向标志位.

CLD 清方向标志位.

STI 置中断允许位.

CLI 清中断允许位.

六、伪指令

DW 定义字(2字节).

PROC 定义过程.

ENDP 过程结束.

SEGMENT 定义段.

ASSUME 建立段寄存器寻址.

ENDS 段结束.

END 程序结束

 

 

 

 

 

 

汇编语言命令大全  

 汇编命令大全<---->MOVMOVe)   传送指令P28 

PUSH     入栈指令P32 

POP     出栈指令P33 

XCHGeXCHanG)   交换指令P34 

XLATTRANSLATE)   换码指令P34 

LEA Load Effective Address) 有效地址送寄存器指令P35 

LDSLoad DS with pointer) 指针送寄存器和DS指令P35 

LESLoad ES with pointer) 指针送寄存器和ES指令P35 

LAHFLoad AH with Flags) 标志位送AH指令P36 

SAHFStore AH into Flgs) AH送标志寄存器指令P36 

PUSHFPUSH the Flags)   标志进栈指令P36 

POPFPOP the Flags)   标志出栈指令P37 

ADD     加法指令P38 

ADC     带进位加法指令P39 

INC     1指令P39 

SUBSUBtract)   不带借位的减法指令P40 

SBBSuVtrach with borrow) 带借位的减法指令P40 

DECDECrement)   减1指领P41 

NEGNEGate)   求补指令P41 

CMPCoMPare)   比较指令P42 

MULunsinged MULtiple) 无符号数乘法指令P46 

IMULsIgned MUL tiple) 有符号数乘法指令P46 

DIVunsigned DIVide)   无符号数除法指令P48 

IDIVsIgned DIVide)   有符号数除法指令P48 

CBWCount Byte to Word) 字节转换为字指令P50 

CWDCount Word to Doble word) 字转换为双字指令P50 

DAA   压缩的BCD码加法十进制调整指令P53 

DAS   压缩的BCD码减法十进制调整指令P53 

AAA   非压缩的BCD码加法十进制调整指令P54 

AAS   非压缩的BCD码加法十进制调整指令P54 

AND     逻辑与指令P54 

OR     逻辑或指令P55 

XOR     逻辑异或指令P56 

NOT     逻辑非指令P56 

TEST     测试指令P57 

SHLSHift logical Letf)   逻辑左移指令P57 

SHRSHift logical Right)   逻辑右移指令P57 

ROLRotate Left )   循环左移指令P58 

RORRotate Right)   循环右移指令P58 

RCLRotate Left through Carry) 带进位循环左移P58 

RCRRotate Right through Carry) 带进位循环左移P58 

MOVSMOVe String)   串传送指令P58 

STOSSTOre into String) 存入串指令P60 

LODSLOad from string) 从串取指令P60 

REPREPeat)   重复操作前缀P61 

CLDCLear Direction flag) 清除方向标志指令P61 

STDSeT Direction flag)   设置方向标志指令P61 

CMPSCoMPare String)   串比较指令P62 

SCASSCAn String)   串扫描指令P63 

REPEREPZREPeat while Equal/Zero)相等/为零时重复操作前缀P63 

REPNEREPNZREPeat while Not Equal/Zero)不相等/不为零进重复前缀 

ININput)   输入指令P65 

OUTOUTput)   输出指令P65 

JMPJuMP)   无条件转移指令P66 

JZJNZJSJNSJOJNOJPJNPJBJNBJBEJNBEJLJNLJLEJNLEJCXZ   条件转移指令P67 

LOOP     循环指令P70 

LOOPZLOOPE   为零/相等时循环指令P70 

LOOPNZLOOPNE   不为零/不相等时循环指令P70 

CALL     子程序调用指令P71 

RETRETun)   子程序返回指令P72 

CLCCLear Carry)   进位位置0指令P77 

CMCCoMplement Carry) 进位位求反指令P77 

SRCSeT Carry)   进位位置1指令P77 

NOPNo OPeretion)   无操作指令P77 

HLTHaLT)   停机指令P77 

OFFSET   返回偏移地址P85 

SEG     返回段地址P85 

EQU(=)   等值语句P90 

PURGE   解除语句P91 

DUP     操作数字段用复制操作符P93 

SEGMENT,ENDS   段定义指令P95 

ASSUME   段地址分配指令P95 

ORG     起始偏移地址设置指令P96 

$     地址计数器的当前值P97 

PROCENDP   过程定义语句P97 

NAMETITLEEND   程序开始结束语句P98 

MACROENDM   宏定义指令P99 

 

-------------------------------------------------------------------------------- 

 

-- 作者:wutoyou 

-- 发布时间:2004-2-3 14:42:45 

 

--  

段内直接短跳转 JMP SHORT OPR  

段内直接近转移 JMP NEAR PTR OPR 

段内间接转移 JMP WORD PTR OPR  

段间直接转移 JMP FAR PTR OPR  

段间间接转移 JMP DWORD PTR OPR  

 

JZ   OPR //结果为零转移  

JNZ   OPR //结果不为零转移  

JS   OPR //结果为负转移  

JNS   OPR //结果为正转移  

JO   OPR //溢出转移 

JNO   OPR //不溢出转移  

JP   OPR //结果为偶转移 

JNP   OPR //结果为奇转移  

JC   OPR //有进位转移  

JNC   OPR //无进位转移  

 

MOV AA,BB  BB 放到 AA  
CALL 调用子程序 (相当于 BASIC  GOSUB) 
RET  RETF 返回程序 (相当于 BASIC  RETURN) 
CMP XX,YY 比较 XX  YY 
JZ 若相等则转移 
JNZ 若不相等则转移 
JB 若小于则转移 
JG 若大于则转移 
JMP 无条件转移 
J??? (各种转移指令) 
LOOP 循环直到CX0 
INT XX 类似 CALL 的中断涵数 
PUSH 推入栈(STACKESPPUSH AX  
POP 出栈ESPPOP CX  
XCHG 交换ESPXCHG AXBX  
INOUT PORT有关的IN/OUT  
XLAT 查表  
LEA 段内偏移量。ESPLEA AXAREA1=MOV AXOFFSET AREA1  
LAHFSAHF与棋标有关的寄存器 AH  
PUSHFPOPF将棋标入/出栈  
ADD ESP ADD AXCX AX=AX+CX  
ADC 加入棋标CADD  
INC ESP INC AXAX=AX+1  
AAA 加法校正  
SUBSBB 减法  
DEC ESP DEC AXAX=AX-1  
NEG 去补,  
MULIMUL   
DIVIDIV   
SHRSARSHL 算术、逻辑位移R=RIGHT L=LEFT  
ORXORAND 逻辑运算 ESP XOR AXAXAX=0  
直接标志转移 
指令格式 机器码 测试条件 ...则转移  
JC 72 C=1 有进位  
JNS 79 S=0 正号  
JNC 73 C=0 无进位  
JO 70 O=1 有溢出  
JZ/JE 74 Z=1 /等于 
JNO 71 O=0 无溢出  
JNZ/JNE 75 Z=0 不为零/不等于 
JP/JPE 7A P=1 奇偶位为偶  
JS 78 S=1 负号 
JNP/IPO 7B P=0 奇偶位为奇  
间接标志转移 
指令格式 机器码 测试格式 ...则转移  
JA/JNBE(比较无符号数) 77 CZ=0 > 高于/不低于或等于  
JAE/JNB(比较无符号数) 73 C=0 >= 高于或等于/不低于  
JB/JNAE(比较无符号数) 72 C=1 < 低于/不高于或等于  
JBE/JNA(比较无符号数) 76 CZ=1 <= 低于或等于/不高于  
JG/JNLE(比较带符号数) 7F (S异或O)或Z=0 > 大于/不小于或等于  
JGE/JNL(比较带符号数) 7D S异或O=0 >= 大于或等于/不小于  
JL/JNGE(比较带符号数) 7C S异或O=1 < 小于/不大于或等于  
JLE/JNG(比较带符号数) 7E (S异或O)Z=1 <= 小于或等于/不大于  
无条件转移指令JMP 
指令格式 执行操作 机器码 说明  
段内直接短转移Jmp short (IP)(IP)+8位位移量 EB 转移范围-128+127字节

 

0 0
原创粉丝点击