2009-01-26 78 views
3

在我的彙編語言課程中,我們的第一項任務是編寫一個程序在DOS中打印出一個簡單的以美元結尾的字符串。它看起來是這樣的:以美元結尾的字符串

BITS 32 
    global _main 

section .data 
    msg db "Hello, world!", 13, 10, ’$’ 

section .text 
_main: 
mov ah, 9 
mov edx, msg 
int 21h 
ret 

據我瞭解,$符號用來像空確實在C.但是,我該怎麼辦終止刺痛,如果我想要把一個美元符號的字符串(如我想打印出「它需要30美元」)?這看起來像一個簡單的問題,但我的教授不知道答案,我似乎沒有找到它使用谷歌搜索。

回答

7

不能使用DOS的0x09服務以顯示$跡象,你將需要使用0x02。見here

+1

看起來0x40的應該工作以及:http://www.uv.tietgen.dk/staff/mlha/PC/Prog/asm/int/21/40.htm – 2009-01-26 21:26:31

+0

或者,你可以使用0x40,但是這要求你指定要寫入的字節數(即它不使用分隔字符串)。 – 2009-01-26 21:26:33

+0

@Jason - 嘿,打我一秒鐘。 :-) – 2009-01-26 21:27:49

0

嗯。您可以編寫彙編,以考慮轉義的$,例如\$? 但隨後你\成爲一個特殊符號過了,你需要使用\\打印\

-3

嘗試 '$$', '\ 044'(八進制)或 '\ X24'(十六進制)

3

或使自己的print_string使用無證INT 29H(打印字符的打印NULL結束的字符串AL)。

; ds:si = address of string to print 
print_string: 
    lodsb     ; load next character from ds:si 
    or al, al    ; test for NULL-character 
    jz .end_of_string  ; end of string encountered, return. 
    int 29h     ; print character in AL on screen 
    jmp print_string  ; print next character 
.end_of_string: 
    ret      ; return to callers cs:ip 

(假設你使用NASM)

0

一種方法是找到打印單個字符的呼叫。你可以打印任何字符。打破字符串並打印「費用」,然後打印「$」,最後打印「30」。更多的工作,但它完成了工作。

0

您可以使用INT 21H的02服務而不是09服務

下面是示例。

mov dl, '$' 

mov ah,02 

int 21h