我需要幫助在MASM中編寫一個程序,要求用戶輸入和輸出ASCII特殊字符。例如,如果用戶寫道:程序集:程序輸出特殊的ASCII字符
hello \01 i missed you \03.
將輸出爲:
hello ☺ i missed you ♥.
我知道,打印笑臉,我可以使用下面的代碼:
MOV AH, 6
MOV DL, 1; print ☺
INT 21H
但是我不知道如何在用戶輸入\01
時自動完成。任何援助將欣然讚賞。
我需要幫助在MASM中編寫一個程序,要求用戶輸入和輸出ASCII特殊字符。例如,如果用戶寫道:程序集:程序輸出特殊的ASCII字符
hello \01 i missed you \03.
將輸出爲:
hello ☺ i missed you ♥.
我知道,打印笑臉,我可以使用下面的代碼:
MOV AH, 6
MOV DL, 1; print ☺
INT 21H
但是我不知道如何在用戶輸入\01
時自動完成。任何援助將欣然讚賞。
如果您通過DOS服務讀取輸入,則"\01"
被編碼爲三個字節:92,48,49(如果您不明白這些值來自哪裏,請檢查ASCII表)。
所以你需要的是用值爲1的單個字節替換字符串中的這三個字節,並將字符串的剩餘部分移動兩個字節「left」來壓縮它(即字符串替換)。
現在要知道哪部分字符串應該替換爲必須編寫的某種解析器,它將檢測'\'
字符,然後讀取一些數字/字符(必須定義什麼是正確的語法,如如果在\
之後總是有兩個字符形成十六進制字節值,即"\4A"
會變成J
或者形成十進制值的最多三位0-9,即"\122"
會變成z
),那麼將這些數字/字符轉換爲字節值,並使用該字節值替代解析的部分。
亦作「親」品質的解決方案,確保您的解析器足夠強大的生存無效語法像\<EOF>
,並有一些合理的語法,就像\\01
變成\01
不必解析數字,等等(見C/C++ string-literal-in-source語法規則的靈感)。因此,可能首先使用字符串替換函數開始,然後編寫觸發序列檢測器,然後編寫值解析器(如果可能,將它們編寫爲單獨的函數+在移到下一個主題之前調試/驗證它們),然後將它們組合在一起進入完整解決方案
謝謝,我會盡力做到這一點。 – MrGamez22