2012-02-05 62 views
0

我尝试使用下面的代码打印消息:印刷用FASM

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:。$'”行,则可以显示消息。

我想知道这背后的逻辑。我在宣布信息的地方是否有所作为?

这只是出于好奇,谢谢!

回答

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 
2

如果你真的必须有你的字符串代码段,然后就跳过去了。

begin: 
    mov ah, 9 
    mov dx, msg 
    jmp overstring 
    msg db 'Ascii sign:.$' 
overstring: 
    int 21h 

finish: 
    mov ax, 4c00h 
    int 21h