我正在使用程序集8086語言中的一些文件夾中斷,我需要讀取一個ascii字符串並將它轉換爲asciz之一以便指定一些參數。 - 如何在字符串的末尾添加空字符? - 如果我用ah = 9讀取字符串int 21h是否添加回車符? 我真的需要幫助!感謝您的關注。ASCII字符串到asciiz(程序集8086)
回答
從中斷21h服務0AH(09H用於顯示)的鍵盤捕獲字符串。捕獲的字符串以chr(13)結尾。爲了顯示這個字符串,需要用'$'來代替chr(13),或者用字符串作爲文件名(例如創建一個文件並寫入),用chr(0)代替chr(13) 。
捕獲的字符串與0AH需要數據段具有三個DB的變量,下一圖像解釋的邏輯:
前兩個字符是用於控制(0AH需要它們)。有用的字符串從位置2開始(第三個字節)。
要找出結尾chr(13)的位置,我們所要做的就是將長度(第二個字節)添加到第三個字節capisci?
現在的代碼。接下來,小程序向用戶顯示一條消息並等待字符串,用chr(0)替代chr(13)(創建ASCIIZ字符串),用字符串創建一個文件,向它寫入文本並關閉它。在數據段注意變量名,三個DB:
.model small
.stack 100h
.data
handle dw ?
filename db 26 ;MAX NUMBER OF CHARACTERS ALLOWED (25).
db ? ;LENGTH (NUMBER OF CHARACTERS ENTERED BY USER).
db 26 dup(0) ;CHARACTERS ENTERED BY USER. END WITH CHR(13).
msj db 'ENTER FILE NAME HERE: $'
text db 'text for file' ;LENGTH = 13.
.code
;INITIALIZE DATA SEGMENT.
mov ax, @data
mov ds, ax
;DISPLAY MESSAGE.
mov dx, offset msj
mov ah, 9
int 21h
;CAPTURE FILENAME FROM KEYBOARD.
mov ah, 0Ah
mov dx, offset filename ;THIS VARIABLE REQUIRES THE 3-DB FORMAT.
int 21h
;CAPTURED STRING ENDS WITH CHR(13), BUT TO CREATE FILE WE NEED
;THE FILENAME TO END WITH CHR(0), SO LET'S CHANGE IT.
mov si, offset filename + 1 ;NUMBER OF CHARACTERS ENTERED.
mov cl, [ si ] ;MOVE LENGTH TO CL.
mov ch, 0 ;CLEAR CH TO USE CX.
inc cx ;TO REACH CHR(13).
add si, cx ;NOW SI POINTS TO CHR(13).
mov al, 0
mov [ si ], al ;REPLACE CHR(13) BY 0.
;CREATE FILE.
mov ah, 3Ch
mov cx, 0
mov dx, offset filename + 2 ;CHARACTERS START AT BYTE 2.
int 21h
mov handle, ax ;PRESERVE FILE HANDLER.
;WRITE SOME TEXT TO FILE.
mov ah, 40h
mov bx, handle ;THE FILE.
mov dx, offset text
mov cx, 13 ;LENGTH OF TEXT.
int 21h
;CLOSE FILE
mov ah, 3Eh
mov bx, handle
int 21h
;END PROGRAM.
mov ah, 4ch
int 21h
差點忘了:變量名錶示最大長度26,但我們預計25,一個額外的字節是必要的末CHR(13) 。例如,如果要捕獲10個字符,請將11指定爲最大長度。
嗨,何塞,我感謝您的答案,但它不起作用,它甚至不顯示「輸入文件名」消息。我試圖解決它,但結果不好,你能解決它嗎?非常感謝 –
它不顯示字符串。它的作用是用chr(0)替換chr(13),打開文件,寫入並關閉它。 –
數據段初始化後,程序應該寫一個字符串來標準化,但是當我運行它時,沒有輸出,也沒有創建任何文件。 –
- 1. 程序集:如何將字符串存儲在.asciiz中?
- 2. 程序集8086:字符計數
- 3. 程序集8086在字符串中添加空格
- 4. ASCIIZ字符串以零字節結尾
- 5. 如何閱讀ASCIIZ字節字符串
- 6. 如何將字符串轉換爲8086程序集中的數字?
- 7. 8086 ASM - 輸出字符串到屏幕
- 8. 8086程序集中的秒錶程序
- 9. C++字符的ASCII值到字符串
- 10. 我們如何計算程序集8086中字符串的元音數量?
- 11. 如何將字符串轉換爲十六進制8086程序集
- 12. 程序集:程序輸出特殊的ASCII字符
- 13. 獲取ascii字符集ascii字符集在servlet中
- 14. 我在8086/8088程序集中的程序打印多餘字符
- 15. 讀字符串ASCII
- 16. 數字到ASCII字符串轉換器
- 17. 轉換ASCII字符串到數字
- 18. ASCII到XML的字符集轉換
- 19. 將字符串轉換爲ascii和ascii爲字符串
- 20. 將字符串轉換爲ASCII和ASCII字符串
- 21. 反轉包含ASCII字符和非ASCII字符的字符串
- 22. 匹配如果字符串只包含ASCII字符集
- 23. 是ASCII字符集endian-safe?
- 24. 程序集8086:參考交換參數
- 25. 程序集8086:計數器問題
- 26. DOS函數1程序集(8086)問題
- 27. 程序集8086光標的放置
- 28. 在程序集中生成聲音8086
- 29. 8086程序集 - 劃分溢出
- 30. 在程序集編程8086中添加十進制數字
'ah = 9'和'int 21h' *將一個字符串寫入標準輸出。它沒有閱讀。有'int 21h'函數在讀取一個字符的時候,你可以這樣做,在你看到回車的時候計數它們。然後你會知道長度。 – lurker