2012-02-05 49 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