我正在尝试使用以下代码打印消息:
org 100h
start:
jmp begin
begin:
mov ah, 9
mov dx, msg
msg db 'Ascii sign:.$'
int 21h
finish:
mov ax, 4c00h
int 21h
它能够编译,但它根本不显示任何内容。但是如果我在“jmp begin”下面移动“msg db'Ascii sign:。$'”行,则可以显示该消息。
我想知道这背后的逻辑。这在我宣布消息的地方有所不同吗?
这只是出于好奇,谢谢!
答案 0 :(得分:4)
是。现在,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
答案 1 :(得分:2)
如果你真的必须在代码部分使用你的字符串,那么就跳过它们。
begin:
mov ah, 9
mov dx, msg
jmp overstring
msg db 'Ascii sign:.$'
overstring:
int 21h
finish:
mov ax, 4c00h
int 21h