【问题标题】:Unable to perform near conditional jump in MASM无法在 MASM 中执行近乎条件跳转
【发布时间】:2014-06-25 20:23:33
【问题描述】:

请注意, 我整天都在用头撞墙: 这段代码有什么问题?为什么 MASM 报错?

LookupLoop:
        and ecx, edx
        movzx   ecx, word ptr [edi + ecx*2]
        cmp ecx, ebp
        lea ebx, LeaveNowProxy
       js ebx ;;;This is it. Here it fails.
        jmp LeaveNowProxyEnd
 LeaveNowProxy:
        jmp LeaveNow
 LeaveNowProxyEnd:
 LoopEntry:  movzx   eax, word ptr [esi + ecx - 1]
         cmp eax, ebx

它说:>....\masmx86\match686.asm(357):错误 A2077:指令不允许 NEAR 间接寻址。我尝试 lea 注册然后通过注册,然后我做了这个代理跳转,然后我尝试了 js cs:ebx sythax。每次我几乎都会遇到 smae 错误。

【问题讨论】:

    标签: assembly x86 masm


    【解决方案1】:

    替换

    lea ebx, LeaveNowProxy
    js ebx
    

    js LeaveNowProxy
    

    【讨论】:

      【解决方案2】:

      我认为不支持基于寄存器的条件跳转。

      你可以试试

        jns skip
        jmp ebx
      skip:
      

      【讨论】:

      • 同样的效果LookupLoop: and ecx, edx movzx ecx, word ptr [edi + ecx*2] cmp ecx, ebp jns DontLeaveLeaveNowProxyEnd jmp LoopEntry DontLeaveLeaveNowProxyEnd: jmp LeaveNow LoopEntry: movzx eax, word ptr [esi + ecx - 1] cmp eax, ebx jnz short LookupLoop mov eax, [window] movzx eax, word ptr [eax + ecx] cmp eax, [scanstart] jnz short LookupLoop ;;; Store the current value of chainlen. mov [chainlenwmask], edx
      • 嘿伙计,我几乎按照你提议的方式重新制作了跳跃 - 这些错误消失了。 10 倍。
      猜你喜欢
      • 1970-01-01
      • 2015-11-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-03
      相关资源
      最近更新 更多