【问题标题】:Will this set of instructions jump?这组指令会跳转吗?
【发布时间】:2014-04-13 07:43:36
【问题描述】:

这组指令会跳转吗? 我主要关心的是 CMP 表达式。 CMP 是否只处理无符号数字?如果是这样,它会跳跃,因为零标志会被设置。否则它不会跳跃,因为数字特别不同。

   mov  ax, -127d
   cmp  ax, 128d
   je   Target

【问题讨论】:

    标签: assembly x86 flags


    【解决方案1】:

    平等是无符号的。

    -127 = FF81 = 65409
     128 = 0080 =   128
    

    不相等的数字在有符号和无符号解释中都是不相等的。这直接源于减法对于有符号和无符号的过程是相同的这一事实 - 因为它是相同的过程,所以对于相同的输入,它不能导致一种解释为 0 而另一种解释为非 0。

    【讨论】:

      【解决方案2】:

      cmp 实际上同时处理有符号和无符号算术。在cmp 执行溢出后,进位、符号和零标志都将被适当地设置:这些标志的任何解释都取决于后续的条件指令。

      例如jz/jnz 对符号不敏感,ja/jb 表示无符号比较,jl/jg 表示有符号比较。有关条件代码的(广泛)详细信息,请参阅 x86 手册。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-05-18
        • 1970-01-01
        • 2014-09-17
        • 2014-05-19
        相关资源
        最近更新 更多