我正在尝试使用以下代码打印一条消息:
org 100h
start:
jmp begin
begin:
mov ah, 9
mov dx, msg
msg db 'Ascii sign:.$'
int 21h
finish:
mov ax, 4c00h
int 21h它可以编译,但它根本不显示任何内容。但是如果我将行"msg db 'Ascii sign:.$'“移到"jmp begin”下面,消息就可以显示了。
我想知道这背后的逻辑。我在哪里声明消息会有区别吗?
这只是出于好奇,谢谢!
发布于 2012-02-05 15:04:06
是。现在,msg是在代码中间定义的,CPU将尝试在其中执行它。通常,您希望在数据段中单独定义数据。我不记得FASM的语法,但是使用MASM或TASM,您通常会这样做:
.model small
.data
msg db 'ASCII sign: .$'
.code
main proc
mov ah, 9
mov dx, offset msg
int 21h
mov ax, 4c00h
int 21h
main endp
end main发布于 2012-02-11 08:51:46
如果你真的需要把字符串放在代码部分,那么就跳过它们。
begin:
mov ah, 9
mov dx, msg
jmp overstring
msg db 'Ascii sign:.$'
overstring:
int 21h
finish:
mov ax, 4c00h
int 21hhttps://stackoverflow.com/questions/9147515
复制相似问题