汇编程序报错!

来源:百度知道 编辑:UC知道 时间:2024/09/25 03:27:34
assume cs:code

data segment
db 'welcome to masm!'
db 00000010b,00100100b,01110001b
data ends

stack segment
dw 0
stack ends

code segment
start:
mov ax,b800h
mov es,ax
mov ax,data
mov ds,ax
mov cx,3
mov ax,stack
mov ss,ax
mov sp,2
mov si,0720h
mov di,16
s:push cx
mov bx,0
mov cx,16
s1:mov al,[bx]
mov es:[si+bx],al
mov al,[di]
mov es:[si+bx+1],al
add bx,2
loop s1
add si,00a0h
inc di
pop cx
loop s

mov ax,4c00h
int 21h

code ends

end start

我很纳闷的是,第一句mov ax,b800h就报错。说是b800h未定义。他妈的这怎么回事阿。ax,4c00h可以用,为什么b800h就不行?真是奇怪

mov ax,0b800h

汇编语言中,十六进制数若以字母开头,前面应该缀以数字“0”来明确表示其后的内容是数值;否则,编译器会认为这个不是数值,而是把它当作一个变量或标号。若这个变量或标号在其它地方有定义,则不会出错;否则,就会给出“未定义”的提示。
把mov ax,b800h改成:mov ax,0b800h
就好了。

在B800H前面加一个0试一试