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

NASM中XOR比较结果匹配二进制值但条件跳转未触发问题排查

问题分析与修复方案

你的代码逻辑出错的核心原因是在计算完乘积后,错误地覆盖了乘积结果,导致后续的异或运算使用的不是(num1+9)*num2的值,而是num1+9本身的值。

关键错误点定位

我们一步步拆解你测试输入(num1=3、num2=5、num3=2)时的代码执行流程:

  1. 正确计算出bl = 3+9 = 12,bh =5
  2. 执行mul bh后,ax = 12*5 =60(十进制,二进制00111100)
  3. 但你紧接着写了mov al, bl,这把al重新赋值为12(bl的值),直接丢弃了之前计算的乘积结果60!
  4. 后续xor al, cl计算的是12 XOR 2 =14(二进制00001110),而不是预期的60 XOR2=62
  5. 14和0b0000110按位与的结果是0b0000010,不等于0b0000110,所以自然不会触发je high_priority跳转

修复后的代码

我们需要保留mul指令的结果(存在ax中),用这个结果去和num3做异或运算。另外还有几个小细节需要优化(比如二进制数的规范写法、避免寄存器滥用):

section .data
    msg1 db 'High Priority', 0xA
    msg1len equ $ - msg1
    msg2 db 'Standard Priority', 0xA
    msg2len equ $ - msg2

section .bss
    num1 resb 2
    num2 resb 2
    num3 resb 2

section .text
global _start
_start:
    ; 读取num1
    mov eax, 3
    mov ebx, 0
    mov ecx, num1
    mov edx, 2
    int 0x80
    mov al, [num1]
    sub al, '0'
    add al, 9          ; num1 +9
    mov bl, al         ; 暂存到bl

    ; 读取num2
    mov eax, 3
    mov ebx, 0
    mov ecx, num2
    mov edx, 2
    int 0x80
    mov al, [num2]
    sub al, '0'
    mov bh, al         ; 暂存到bh

    ; 计算 (num1+9)*num2,结果存在ax中
    mov al, bl
    mov ah, 0
    mul bh             ; ax = al * bh = (num1+9)*num2

    ; 读取num3
    mov ecx, num3
    mov edx, 2
    mov ebx, 0
    mov eax, 3
    int 0x80
    mov cl, [num3]
    sub cl, '0'        ; 转换为数字

    ; 用乘积结果和num3做异或
    xor ax, cx         ; ax = (乘积) XOR num3
    ; 按位与固定值0b0000110
    and ax, 0b0000110
    ; 比较结果是否等于0b0000110
    cmp ax, 0b0000110
    je high_priority

standard_priority:
    mov eax, 4
    mov ebx, 1
    mov ecx, msg2
    mov edx, msg2len
    int 0x80
    jmp exit_program

high_priority:
    mov eax, 4
    mov ebx, 1
    mov ecx, msg1
    mov edx, msg1len
    int 0x80

exit_program:
    mov eax, 1
    int 0x80

其他优化说明

  1. 二进制数在NASM中规范写法是0bxxxxxx,而非xxxxxxb,这样兼容性更好
  2. 读取num3时可以复用寄存器,减少重复的指令赋值
  3. 用ax保存乘积结果,避免覆盖关键数据;异或和按位与操作直接对ax进行,确保使用的是正确的计算值

现在用你的测试输入运行修复后的代码,就能正确触发high_priority分支了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 12:42:47