答案是从以下博文中搜到的,原文链接如下。【感谢原作者】。
【汇编BUG】ML Nonfatal Error A2008_*木易先生*的博客-CSDN博客_汇编a2008
但我遇到此报错时的代码,与原作者不同,故将我的情况也贴上来,算是一个补充,方便大家后续查询。
我遇到此报错时的代码,来自《汇编语言(第4版)》实验5第(5)题。完整代码为:
assume cs:code
a segment
db 1, 2, 3, 4, 5, 6, 7, 8
a ends
b segment
db 1, 2, 3, 4, 5, 6, 7, 8
b ends
c segment
db 0, 0, 0, 0, 0, 0, 0, 0
c ends
code segment
start:
mov ax, c
mov es, ax
mov bx, 0
mov cx, 8
s:
; Set ds to fetch a:[bx]
mov ax, a
mov ds, ax
mov dl, [bx]
; Set ds to fetch b:[bx]
mov ax, b
mov ds, ax
; Add b:[bx] to a:[bx]
add dl, [bx]
; Write the sum to c:[bx]
mov es:[bx], dl
inc bx
loop s
mov ax, 4c00h
int 21h
code ends
end start
如果使用Dosbox中的ASM编译,则如上程序不会出现编译错误。但如果使用VSCode安装的MASM扩展来编译,则会出现如下报错:
错误出现在源程序的这一段:
关于错误原因,转载的原文中已经说明——VSCode的MASM扩展,会将C(不区分大小写)当作保留字,故如上代码将c作为段名使用,是不合法的。
解决方法很简单:将c改为其他标识符即可。