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

请求修复NASM x86汇编代码的语法及有效地址错误

修复NASM汇编代码的语法错误

逐个解决你遇到的三个错误:

1. 第10行mov bx, test无效语法

test是NASM的保留指令(用于位测试操作),不能用作变量名。把这个变量名改成check_arr之类的非保留名称即可。

2. 第15行mov dx, [array + cx]无效有效地址

16位x86实模式下,基址/变址寻址仅支持bx/bp(基址寄存器)或si/di(变址寄存器)参与计算,cx不允许直接用于有效地址拼接。可以先把cx的值转移到bx中,再用[array + bx]访问数组元素。

3. 第38行je ends无效语法

ends是NASM的保留关键字(用于标记段结束),不能用作标签名。把标签ends改成done,同时原代码里的end:标签建议改为exit:——因为end也是NASM的伪指令关键字,避免冲突。

修复后的完整代码

[org 0x100]

jmp start

start:
mov si, 0
jmp outer

outer:
mov bx, check_arr  ; 修复:变量名从test改为check_arr
mov ax, [bx+si]
mov cx, 0
jmp inner

inner:
mov bx, cx         ; 修复:将cx的值转入bx用于寻址
mov dx, [array + bx]
cmp ax, dx
je increase
add cx, 2
cmp cx, 8
je found
jmp inner

increase:
add si, 2
cmp si, 10
je done            ; 修复:标签名从ends改为done
jmp outer

found:
mov dx, ax

exit:              ; 修复:标签名从end改为exit
mov ax, 0x4c00
int 0x21

array: dw 2,1,5,4
check_arr: dw 1,2,3,4,5  ; 修复:变量名从test改为check_arr

补充说明:修复后的代码逻辑保持原有思路——遍历check_arr的每个元素,在array中查找匹配项,找不到的即为缺失数字,现在可以正常编译运行。

内容的提问来源于stack exchange,提问作者Muzammil Bin Sohail

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 13:26:00