zhangleierli
驱动小牛
驱动小牛
  • 注册日期2007-01-31
  • 最后登录2017-05-24
  • 粉丝1
  • 关注0
  • 积分3分
  • 威望158点
  • 贡献值0点
  • 好评度146点
  • 原创分0分
  • 专家分0分
  • 社区居民
阅读:10157回复:5

汇编指令JB和JL有什么区别?

楼主#
更多 发布于:2007-10-15 11:05
两条指令不都是小于就跳转么?为什么非要设两条相同的?
zhangleierli
驱动小牛
驱动小牛
  • 注册日期2007-01-31
  • 最后登录2017-05-24
  • 粉丝1
  • 关注0
  • 积分3分
  • 威望158点
  • 贡献值0点
  • 好评度146点
  • 原创分0分
  • 专家分0分
  • 社区居民
沙发#
发布于:2007-10-15 11:33
刚刚查了下,JB用于无符号计算,JL用于有符号计算.  JB的测试条件CF=1 ; JL的测试条件是SF不等于OF??? 这个又如何理解?
ysy
ysy
驱动中牛
驱动中牛
  • 注册日期2002-02-18
  • 最后登录2008-08-25
  • 粉丝0
  • 关注0
  • 积分201分
  • 威望29点
  • 贡献值0点
  • 好评度19点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2007-10-16 10:35
举个例子
对于-1 = 0xffffffff, 1=0x01
如果-1和1比较那么是jl,显然1大
如果0xffffffff和0x1比较那么是0x1使用jb,显然0xffffffff大
c语言描述

int a = -1;
int b = 1;
if(a > b)
    printf("a > b\n");
esle
显然 a < b //

unsigned int a = (unsigned int) -1;
un
ysy
ysy
驱动中牛
驱动中牛
  • 注册日期2002-02-18
  • 最后登录2008-08-25
  • 粉丝0
  • 关注0
  • 积分201分
  • 威望29点
  • 贡献值0点
  • 好评度19点
  • 原创分0分
  • 专家分0分
地板#
发布于:2007-10-16 10:38
int a = -1;
int b = 1;
if(a < b) // jl
    printf("a < b\n");
esle
    printf("a > b\n");

打印结果a < b

unsigned int a = (unsigned int) -1;
unsigned int b = (unsigned int) 1;
if(a < b) // jb
    printf("a < b\n");
esle
    printf("a > b\n");

打印结果a > b
ysy
ysy
驱动中牛
驱动中牛
  • 注册日期2002-02-18
  • 最后登录2008-08-25
  • 粉丝0
  • 关注0
  • 积分201分
  • 威望29点
  • 贡献值0点
  • 好评度19点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2007-10-16 10:43
-1 - 1 = -2
上面的计算式在计算机内部表现为
0xffffffff - 0x00000001 = 0xfffffffe
那么没有进(借)位,但是符号位1
也就是jb判断大于零,jl判断小于零
也就是0xffffffff > 0x00000001但是-1 < 1
zhangleierli
驱动小牛
驱动小牛
  • 注册日期2007-01-31
  • 最后登录2017-05-24
  • 粉丝1
  • 关注0
  • 积分3分
  • 威望158点
  • 贡献值0点
  • 好评度146点
  • 原创分0分
  • 专家分0分
  • 社区居民
5楼#
发布于:2007-10-16 13:24
非常感谢楼上的回答。
游客

返回顶部