汇编 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=,转到指定地址执行
说明:
. 指令JE与JZ等价,它们是根据标志位ZF进行转移的指令
. JE,JZ均为一条指令的两种助记符表示方法 printf("begin\n");
int a=;
if (a!=)
{
printf("do code\n");
}
printf("end");
条件跳转指令
二、 不等于转移指令 JNE/JNZ (等于JE/JZ)
、 JNE/JNZ功能
条件转移指令JNE/JNZ //不等于转移
格式: JNE/JNZ 标号
功能: ZF=,转至标号地址处执行
、代码测试
printf("begin\n");
int a=;
//if (a==3) //ZF=0
//{
// printf("未跳转ZF==1\n");
//}
//printf("ZF==0跳转\n");
__asm
{ mov eax,
sub eax,a //3-4
jz end; //ZF=1
}
printf("未跳转\n");
end:
printf("跳转\n");
printf("end\n");
getchar();
|. F4204000 PUSH JNE_JNZ.004020F4 ; /format = "begin\n"
|. FF15 A4204000 CALL DWORD PTR DS:[<&MSVCR90.printf>] ; \printf
0040100F |. 83C4 ADD ESP,
|. C745 FC >MOV DWORD PTR SS:[EBP-], ; a=
|. B8 MOV EAX, ; eax=
0040101E |. 2B45 FC SUB EAX,DWORD PTR SS:[EBP-] ; - cmp eax,[ebp-]
|. 0E JE SHORT JNE_JNZ.
|. FC204000 PUSH JNE_JNZ.004020FC ; /format = "未跳转"
|. FF15 A4204000 CALL DWORD PTR DS:[<&MSVCR90.printf>] ; \printf
0040102E |. 83C4 ADD ESP,
|> PUSH JNE_JNZ. ; /format = "跳转"
|. FF15 A4204000 CALL DWORD PTR DS:[<&MSVCR90.printf>] ; \printf
0040103C |. 83C4 ADD ESP,
0040103F |. 0C214000 PUSH JNE_JNZ.0040210C ; /format = "end\n"
|. FF15 A4204000 CALL DWORD PTR DS:[<&MSVCR90.printf>] ; \printf
0040104A |. 83C4 ADD ESP,
0040104D |. FF15 9C204000 CALL DWORD PTR DS:[<&MSVCR90.getchar>] ; MSVCR90.getchar
一、GOTO与JMP
无条件跳转指令
格式: JMP A
. 其中A为转移的目的地址。程序转移到目的地址所指向的指令继续往下执行。
// JZ/JE JNZ/JNE 都需要一个条件,条件成立才跳转,而jmp不需要。
. 本组指令对标志位无影响.
、代码测试
//goto jmp
printf("begin\n");
goto end;
printf("do this");
end:
printf("end\n");
getchar();
二、优化后的指令
/0d 禁用优化
/ 最小化大小
/ 最大化速度
/0x 完全优化
一、指令格式
条件转移指令 JL/JNGE
格式: JL/JNGE 标号地址
功能: 小于/不大于等于时转移 标号地址
JNGE 有符号 不大于等于 则跳转 //Jump if Not Greater or Equal
JL 有符号 小于 则跳转 //Jump if Less SF=; 符号标志位为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=,ZF=,OF= //其中一个或者多个为1 则跳转
二、代码测试
{
printf("begin\n");
int a=;
int b=;
if (a>b) //JLE/JNG 小于等于/不大于时转移
{
printf("do this");
}
//JNG 不大于
printf("end;\n");
return ;
}
一、指令格式
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=;
//if (a<=3)
//if (!(a>3))
//
//{
// printf("小于等于");
//}//大于时跳转//不小于等于跳转 __asm
{
cmp a,
JNLE end //JG end
}
printf("do this\n");
printf("小于等于");
end:
printf("end");
return ;
PWS 寄存器
CF(进位标志位):当执行一个加法(减法)运算时,最高位产生进位(或借位)时,CF为1,否则为0。
ZF零标志位:若当前的运算结果为零,则ZF为1,否则为0。
SF符号标志位:该标志位与运算结果的最高位相同。即运算结果为负,则SF为1,否则为0。
OF溢出标志位:若运算结果超出机器能够表示的范围称为溢出,此时OF为1,否则为0。判断是否溢出的方法是:进行二进制运算时,最高位的进位值与次高位的进位值进行异或运算,若运算结果为1则表示溢出OF=,否则OF=
PF奇偶标志:当运算结果的最低16位中含1的个数为偶数则PF=1否则PF=
AF辅助进位标志:一个加法(减法)运算结果的低4位向高4位有进位(或借位)时则AF=1否则AF= 另外还有三个控制标志位用来控制CPU的操作,可以由程序进行置位和复位。
TF跟踪标志:该标志位为方面程序调试而设置。若TF=,/8088CPU处于单步工作方式,即在每条指令执行结束后,产生中断。
IF中断标志位:该标志位用来控制CPU是否响应可屏蔽中断。若IF=1则允许中断,否则禁止中断。
DF方向标志:该标志位用来控制串处理指令的处理方向。若DF=1则串处理过程中地址自动递减,否则自动递增。 OD里能查看到 除IF标志外的 8个标志位
总结

无符号 条件转移指令

汇编 sub减法指令 比较指令CMP JZ条件跳转指令的更多相关文章
- OllyDbg---比较、条件跳转指令
		比较和条件跳转 CMP 比较两个操作数,相当于SUB指令,但是相减的结果不保存到第一个操作数,而是根据相减的结果来改变零标志位.当两个操作数相等时,零标志位Z置为1. 两个操作数不相等时,零标志位Z被 ... 
- 汇编:jmp系列跳转指令总结
		助记方法: J:跳转C: 进位位置位N: 否S: 符号位置位o: 溢出位置位Z: 零标志位置位E: 等于P:奇偶位置位A: AboveB: BelowL: Less (Little的比较级)G: Gr ... 
- x86汇编 条件跳转
		条件跳转表 汇编语言-条件跳转指令 直接转移指令 指令格式 机器码 测试标志 条件说明 符号 JO OPR 70 OF=1 结果有溢出 JNO OPR 71 OF= ... 
- 学 Win32 汇编[28] - 跳转指令: JMP、JECXZ、JA、JB、JG、JL、JE、JZ、JS、JC、JO、JP 等
		http://www.cnblogs.com/del/archive/2010/04/16/1713886.html 跳转指令分三类:一.无条件跳转: JMP;二.根据 CX.ECX 寄存器的值跳转: ... 
- tst、cmp、bne、beq指令
		1.tst:逻辑处理指令,用于把一个寄存器的内容和另一个寄存器的内容或立即数进行按位的与运算,并根据运算结果更新CPSR中条件标志位的值.当前运算结果为1,则Z=0:当前运算结果为0,则Z=1 cmp ... 
- 关于ARM中的tst、cmp、bne、beq指令
		一.关于cmp的详细用法 假设现在AX寄存器中的数是0002H,BX寄存器中的数是0003H. 执行的指令是:CMP AX, BX 执行这条指令时,先做用AX中的数减去BX中的数的减法运算. 列出二进 ... 
- arm学习之汇编跳转指令总结
		目前所知道的跳转指令有 b,bl,bep,bne.他们共同点是都是以b开头,首先从字面上分析:b:是Branch,表示分支.bl:是Branch Link表示带连接的分支.bep:Branch ,Eq ... 
- ARM 汇编指 跳转指令 b , bl
		1. 跳转指令 [ b ] [ bl ] 指令格式:<opcode><cond> <address> 不带返回的跳转指令:b mov r0, #0x12 mov ... 
- ARM指令集——条件执行、内存操作指令、跳转指令
		ARM 汇编指令条件执行 在ARM模式下,任何一条数据处理指令可以选择是否根据操作的结果来更新CPSR寄存器中的ALU状态标志位.在数据处理指令中使用S后缀来实现该功能. 不要在CMP,CMN,TST ... 
随机推荐
- Oracle EBS OPM 创建生产批
			--创建生产批 --created by jenrry DECLARE x_message_count NUMBER; x_message_list VARCHAR2 (2000); x_return ... 
- Percona MySQL5.7内存OOM案例导致重启的memory和thread分析
			前言 在一个阳光明媚的下午,电脑右下角传来一片片邮件提醒,同时伴随着微信钉钉的震动,打开一看,应用各种出错,天兔告警,数据库服务器内存爆红,Mysql数据库实例挂掉了. 排查 先交代一下数据库版本: ... 
- python设计模式之工厂模式
			一.理解工厂模式 在面向对象编程中,术语“工厂”表示一个负责创建替他类型对象的类.通常情况下,作为一个工厂的类有一个对象以及与它关联的多个方法.客户端使用某些参数调用此方法,之后,工厂会据此创建所需类 ... 
- 大数据开发实战:HDFS和MapReduce优缺点分析
			一. HDFS和MapReduce优缺点 1.HDFS的优势 HDFS的英文全称是 Hadoop Distributed File System,即Hadoop分布式文件系统,它是Hadoop的核心子 ... 
- MySQL递归查询父节点或递归查询子节点-陈远波
			根据id查询父节点,具体需要修改的地方笔者已在注释中给大家作了注解 DELIMITER $$ USE `yjlc_platform`$$ -- getCompanyParent 为函数名 DROP F ... 
- idea本地将本地现有的项目和gitlab进行管理并提交到线上
			备注:通过这个操作可以让本地的项目与远程gitlab进行关联,并将本地的代码提交到gitlab上面 1.在idea的菜单项选择 VCS>Import into Version Control&g ... 
- 关于服务器端的Json文件的接收,踩了一早上的坑的问题
			JSON文件的发送和接收 服务器端接收的JSON文件也是String型的文件,因此不可以直接写成如下的格式,此错误格式下无法找到发送的{}内的数据,服务器会报错提示无法找到你需要的类型数据,也就是根本 ... 
- 团队作业——Alpha冲刺 4/12
			团队作业--Alpha冲刺 冲刺任务安排 杨光海天 今日任务:着手进行编辑界面的布局,插入控件,并进行参数调整. 明日任务:继续完善编辑界面控件,学习控件交互功能. 郭剑南 今日任务:上网查阅学习了关 ... 
- [python][easygui]使用enterbox()方法,简体字会显示成繁体字了
- Spring Boot 扩展点应用之工厂加载机制
			Spring 工厂加载机制,即 Spring Factories Loader,核心逻辑是使用 SpringFactoriesLoader 加载由用户实现的类,并配置在约定好的META-INF/spr ... 
