You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TASM中JL指令跳转不符合预期问题求助

问题分析与解决

你的问题根源在于用错了比较跳转指令:JG和JL是有符号数专属的比较跳转指令,但你实际要做的是无符号16位数值的比较。

具体原因

当AX的值为FFFFh时,作为有符号数它代表-1,而BX的03E8h是有符号数1000。执行cmp ax, bx后,CPU会按照有符号数逻辑判定-1 < 1000,所以触发JL跳转到less段——这是指令的正常行为,但和你预期的无符号比较结果不符。

解决方法

把有符号比较指令替换为无符号比较指令:

  • 用JA(Jump if Above,无符号大于)替代JG
  • 用JB(Jump if Below,无符号小于)替代JL

修改后的代码片段:

mov ax, word ptr dd_buf
mov bx, word ptr powers_of_10[di]
cmp ax, bx
ja greater
jb less
greater:
    mov dx, offset greater_output_hint
    call putstr
    call clrf
    jmp end
less:
    mov dx, offset less_output_hint
    call putstr
    call clrf

补充说明

x86汇编的跳转指令严格区分有符号/无符号场景:

  • 有符号数比较:JG(大于)、JL(小于)、JGE(大于等于)、JLE(小于等于)
  • 无符号数比较:JA(高于)、JB(低于)、JAE(高于等于)、JBE(低于等于)
    需根据数值的实际含义选择对应指令。

内容的提问来源于stack exchange,提问作者ph1l1a

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 21:47:18