2013-06-26 20 views
0

我正在爲大學做一個項目,發現自己處在一個以所有$爲起始值定義一個字符串是有用的情況。

這足以說明了類似的情況:

string DB 22 dup('$') ; I declare the string with dollar signs 
; Input to string 
lea dx, string 
mov ah, 0Ah 
int 21h      
mov bx, dx 
mov ah, 0 
mov al, ds:[bx+1] 

然後,如果我打印將在正確的字符結束的字符串,而無需在末尾手動添加一個「$」。

我現在處在這樣做的過程中容易得多,但我恐怕老師可能會指出這是不好的做法,或者反對這個做法。我並不想真正面對這種情況只是爲了實踐。這有什麼理由是不好的做法?

+3

沒有比使用NUL初始化C char *'分配更多的東西了。 –

回答

1

呃......如果您打印的字符串是int 21h/9,它纔會有用。例如,如果您將其用作打開的文件名,則您希望它以零結尾。

對於int21h/0Ah,第一個字節是要輸入的「最大長度」。但'$'將允許更多的輸入,而不是緩衝區來保存它。我會考慮這種「不好的做法」!中斷返回後(用戶點擊「輸入」),第二個字節是輸入的實際長度。我記得,這包括CR(13十進制或0Dh十六進制),並且dos總是將CR放在那裏。 (Linux以不同的方式執行,實際上可能導致問題)。實際的文本輸入開始於string + 2(你似乎已經想通了)。如果您要開始打印(使用int 21h/9string dos可能會將您的第一個「$」看作「字符串的結尾」,不會打印任何內容。 (試試吧!我不得不重新啓動才能嘗試dos。)

不管你的老師是否會認爲這是「不好的做法」,取決於你的老師。像CPU,操作系統和彙編程序一樣......它們並不完全相同! :)

相關問題