请求修复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
相关产品推荐
相关产品推荐

