汇编 sub减法指令 比较指令CMP JZ条件跳转指令

汇编 sub减法指令 比较指令CMP JZ条件跳转指令

二、SUB指令

减法指令SUB (SUBtract)

格式: SUB A,B //A=A-B;

功能: 两个操作数的相减,即从A中减去B,其结果放在A中.

二、CMP 和JZ 指令

比较指令CMP

格式: CMP A,B // A-B;

功能: 两个操作数的相减,即从A中减去B,其结果会影响标志位, 对标志位的影响与SUB指令相同。本条指令主要是用于配合条件转移指令使用。如JZ ZF=0时,跳转

条件转移指令 JE/JZ

格式: JE/JZ标号 //等于跳转

功能: ZF=1,转到指定地址执行

说明:

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

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

printf("begin\n");

int a=3;

if (a!=3)

{

printf("do code\n");

}

printf("end");

条件跳转指令

二、 不等于转移指令 JNE/JNZ (等于JE/JZ)

1、 JNE/JNZ功能

条件转移指令JNE/JNZ //不等于转移

格式: JNE/JNZ 标号

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

2、代码测试

printf("begin\n");

int a=4;

//if (a==3) //ZF=0

//{

// printf("未跳转ZF==1\n");

//}

//printf("ZF==0跳转\n");

__asm

{ mov eax,3

sub eax,a //3-4

jz end; //ZF=1

}

printf("未跳转\n");

end:

printf("跳转\n");

printf("end\n");

getchar();

00401004 |. 68 F4204000 PUSH JNE_JNZ.004020F4 ; /format = "begin\n"

00401009 |. FF15 A4204000 CALL DWORD PTR DS:[<&MSVCR90.printf>] ; \printf

0040100F |. 83C4 04 ADD ESP,4

00401012 |. C745 FC 04000>MOV DWORD PTR SS:[EBP-4],4 ; a=4

00401019 |. B8 03000000 MOV EAX,3 ; eax=3

0040101E |. 2B45 FC SUB EAX,DWORD PTR SS:[EBP-4] ; 3-4 cmp eax,[ebp-4]

00401021 |. 74 0E JE SHORT JNE_JNZ.00401031

00401023 |. 68 FC204000 PUSH JNE_JNZ.004020FC ; /format = "未跳转"

00401028 |. FF15 A4204000 CALL DWORD PTR DS:[<&MSVCR90.printf>] ; \printf

0040102E |. 83C4 04 ADD ESP,4

00401031 |> 68 04214000 PUSH JNE_JNZ.00402104 ; /format = "跳转"

00401036 |. FF15 A4204000 CALL DWORD PTR DS:[<&MSVCR90.printf>] ; \printf

0040103C |. 83C4 04 ADD ESP,4

0040103F |. 68 0C214000 PUSH JNE_JNZ.0040210C ; /format = "end\n"

00401044 |. FF15 A4204000 CALL DWORD PTR DS:[<&MSVCR90.printf>] ; \printf

0040104A |. 83C4 04 ADD ESP,4

0040104D |. FF15 9C204000 CALL DWORD PTR DS:[<&MSVCR90.getchar>] ; MSVCR90.getchar

一、GOTO与JMP

无条件跳转指令

格式: JMP A

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

// JZ/JE JNZ/JNE 都需要一个条件,条件成立才跳转,而jmp不需要。

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

3、代码测试

//goto jmp

printf("begin\n");

goto end;

printf("do this");

end:

printf("end\n");

getchar();

二、优化后的指令

/0d 禁用优化

/01 最小化大小

/02 最大化速度

/0x 完全优化

一、指令格式

条件转移指令 JL/JNGE

格式: JL/JNGE 标号地址

功能: 小于/不大于等于时转移 标号地址

JNGE 有符号 不大于等于 则跳转 //Jump if Not Greater or Equal

JL 有符号 小于 则跳转 //Jump if Less

SF=1; 符号标志位为1 则跳转到标号地址执行

二、代码测试

printf("begin\n");

//>=

int a=0xA;

int b=0x20;

//if (a>=b) //jl

//{

// printf("do this");

//}

__asm

{

mov ebx,b

sub a,ebx

jnge end

mov ebx,ebx

jl end

}

//<

end:

printf("end\n");

一、指令格式

条件转移指令 JLE/JNG

格式: JLE/JNG 标号地址

功能: 小于等于/不大于 时转到标号地址

JNG 有符号 不大于 则跳转 //Jump if Not Greater

JLE 有符号 小于等于 则跳转 //Jump if Less or Equal

SF=1,ZF=1,OF=1 //其中一个或者多个为1 则跳转

二、代码测试

{

printf("begin\n");

int a=3;

int b=5;

if (a>b) //JLE/JNG 小于等于/不大于时转移

{

printf("do this");

}

//JNG 不大于

printf("end;\n");

return 0;

}

一、指令格式

JG/JNLE 标号地址 //不<= //大于 > // ZF=0 && SF=0 && OF=0

JGE/JNL 标号地址 //不< //大于等于 >=

JG : Jump if Greater // > 跳

JNLE:Jump if Not Less or Equal //不<= 跳

JGE :Jump if Greater or Equal // >= 跳

JNL: Jump if Not Less //不< 跳

二、代码测试

printf("begin\n");

int a=4;

//if (a<=3)

//if (!(a>3))

//

//{

// printf("小于等于");

//}//大于时跳转//不小于等于跳转

__asm

{

cmp a,3

JNLE end //JG end

}

printf("do this\n");

printf("小于等于");

end:

printf("end");

return 0;

PWS 寄存器CF(进位标志位):当执行一个加法(减法)运算时,最高位产生进位(或借位)时,CF为1,否则为0。

ZF零标志位:若当前的运算结果为零,则ZF为1,否则为0。

SF符号标志位:该标志位与运算结果的最高位相同。即运算结果为负,则SF为1,否则为0。

OF溢出标志位:若运算结果超出机器能够表示的范围称为溢出,此时OF为1,否则为0。判断是否溢出的方法是:进行二进制运算时,最高位的进位值与次高位的进位值进行异或运算,若运算结果为1则表示溢出OF=1,否则OF=0

PF奇偶标志:当运算结果的最低16位中含1的个数为偶数则PF=1否则PF=0

AF辅助进位标志:一个加法(减法)运算结果的低4位向高4位有进位(或借位)时则AF=1否则AF=0

另外还有三个控制标志位用来控制CPU的操作,可以由程序进行置位和复位。

TF跟踪标志:该标志位为方面程序调试而设置。若TF=1,8086/8088CPU处于单步工作方式,即在每条指令执行结束后,产生中断。

IF中断标志位:该标志位用来控制CPU是否响应可屏蔽中断。若IF=1则允许中断,否则禁止中断。

DF方向标志:该标志位用来控制串处理指令的处理方向。若DF=1则串处理过程中地址自动递减,否则自动递增。

OD里能查看到 除IF标志外的 8个标志位

总结

无符号 条件转移指令

相关推荐

金主是什么意思(含义、造句)
365足球体育亚洲版

金主是什么意思(含义、造句)

📅 07-06 👁️ 4546
火王燃气灶质量怎么样 火王燃气灶好不好
365bet线上足球

火王燃气灶质量怎么样 火王燃气灶好不好

📅 08-01 👁️ 3081
普洱茶3g有多少茶叶量?
365bet线上足球

普洱茶3g有多少茶叶量?

📅 08-02 👁️ 3318
地铁wifi怎么连
365bet线上足球

地铁wifi怎么连

📅 07-15 👁️ 3119
肚的成语
365bet网络娱乐

肚的成语

📅 09-30 👁️ 2785
魔兽世界8.0希女王烧树时间
365足球体育亚洲版

魔兽世界8.0希女王烧树时间

📅 12-31 👁️ 7272
怎样在手机上进行加油卡的绑定及相关操作?
365足球体育亚洲版

怎样在手机上进行加油卡的绑定及相关操作?

📅 10-01 👁️ 6910
优迈怎么样?,优迈好不好?
365bet网络娱乐

优迈怎么样?,优迈好不好?

📅 07-08 👁️ 3353
魔兽世界周卓在哪
365足球体育亚洲版

魔兽世界周卓在哪

📅 10-31 👁️ 3086