2017-04-11 31 views
-1

我需要幫助在MASM中編寫一個程序,要求用戶輸入和輸出ASCII特殊字符。例如,如果用戶寫道:程序集:程序輸出特殊的ASCII字符

hello \01 i missed you \03. 

將輸出爲:

hello ☺ i missed you ♥. 

我知道,打印笑臉,我可以使用下面的代碼:

MOV AH, 6 
MOV DL, 1; print ☺ 
INT 21H 

但是我不知道如何在用戶輸入\01時自動完成。任何援助將欣然讚賞。

回答

0

如果您通過DOS服務讀取輸入,則"\01"被編碼爲三個字節:92,48,49(如果您不明白這些值來自哪裏,請檢查ASCII表)。

所以你需要的是用值爲1的單個字節替換字符串中的這三個字節,並將字符串的剩餘部分移動兩個字節「left」來壓縮它(即字符串替換)。

現在要知道哪部分字符串應該替換爲必須編寫的某種解析器,它將檢測'\'字符,然後讀取一些數字/字符(必須定義什麼是正確的語法,如如果在\之後總是有兩個字符形成十六進制字節值,即"\4A"會變成J或者形成十進制值的最多三位0-9,即"\122"會變成z),那麼將這些數字/字符轉換爲字節值,並使用該字節值替代解析的部分。

亦作「親」品質的解決方案,確保您的解析器足夠強大的生存無效語法像\<EOF>,並有一些合理的語法,就像\\01變成\01不必解析數字,等等(見C/C++ string-literal-in-source語法規則的靈感)。因此,可能首先使用字符串替換函數開始,然後編寫觸發序列檢測器,然後編寫值解析器(如果可能,將它們編寫爲單獨的函數+在移到下一個主題之前調試/驗證它們),然後將它們組合在一起進入完整解決方案

+0

謝謝,我會盡力做到這一點。 – MrGamez22