1.条件转移指令 JL/JNGE

 命令栏指令

一、OD调试
重新开始:Ctrl+F2
转到地址:CTRL+G
断点切换: F2
断点窗口: Alt+B
运行 : F9
暂停 : F12
单步步过: F8 //遇到CALL跳过
单步步入: F7 //遇到CALL进入
运行到选定位置 :F4 //这个主菜单上没有,右键菜单-断点-F4
反汇编窗口中跟随 :回车键enter
跟随: 回车键enter //进入某个地址

右键菜单--转到
+号:转到下一步 //Plus
-号:转到上一步 //Minus
*号:转到当前指令地址 //EIP
寄存器窗口:
二、命令栏指令
bp 下断点
bc 清除断点
dd 以双字方式显示数据
dw 以字方式显示数据
db 以字节方式显示数据
? 计算表达式的值

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个标志位

一、指令格式
条件转移指令 JL/JNGE
格式: JL/JNGE 标号地址
功能: 小于/不大于等于时转移 标号地址
JNGE 有符号 不大于等于 则跳转 //Jump if Not Greater or Equal
JL 有符号 小于 则跳转 //Jump if Less

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

// jlgoto.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"


int _tmain(int argc, _TCHAR* argv[])
{
    printf("begin\n");
    //>=
    int a=0xA;
    int b=0x20;
    //if (a>=b) //jl
    //{
    //  printf("do this");
    //}
        //S上方的代码为c语言代码 下方的代码为汇编语言代码 本质上是相同的
    __asm 
    {
        mov ebx,b
        sub a,ebx//在这时因为a-ebx等于负数了 所以符号标志位为1
        jnge end//jnge和jl所描述的是一个东西
        mov ebx,ebx
        jl  end
    }
    //<
end:
    printf("end\n");
    return 0;
}
image.png
001A1012  |.  83C4 04       add esp,0x4
001A1015  |.  C745 FC 0A000>mov dword ptr ss:[ebp-0x4],0xA           ;   a=0xA
001A101C  |.  C745 F8 20000>mov dword ptr ss:[ebp-0x8],0x20          ;  b=0x20;
001A1023  |.  8B5D F8       mov ebx,dword ptr ss:[ebp-0x8]           ;  ebx =0x20
001A1026  |.  295D FC       sub dword ptr ss:[ebp-0x4],ebx           ;  0xA-0x20这时会把符号标志位sf为1
001A1029  |.  7C 04         jl short jlgoto.001A102F                 ;  当符号标志位为1时 jl会跳转到地址  001A102F
001A102B  |.  8BDB          mov ebx,ebx
001A102D  |.  7C 00         jl short jlgoto.001A102F
001A102F  |>  68 FC201A00   push jlgoto.001A20FC                     ; /format = "end
"
001A1034  |.  FF15 A0201A00 call dword ptr ds:[<&MSVCR90.printf>]    ; \printf
001A103A  |.  83C4 04       add esp,0x4
001A103D  |.  33C0          xor eax,eax
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

二进制科学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值