2015-04-17 81 views
-1

我正在使用程序集8086語言中的一些文件夾中斷,我需要讀取一個ascii字符串並將它轉換爲asciz之一以便指定一些參數。 - 如何在字符串的末尾添加空字符? - 如果我用ah = 9讀取字符串int 21h是否添加回車符? 我真的需要幫助!感謝您的關注。ASCII字符串到asciiz(程序集8086)

+0

'ah = 9'和'int 21h' *將一個字符串寫入標準輸出。它沒有閱讀。有'int 21h'函數在讀取一個字符的時候,你可以這樣做,在你看到回車的時候計數它們。然後你會知道長度。 – lurker

回答

1

從中斷21h服務0AH(09H用於顯示)的鍵盤捕獲字符串。捕獲的字符串以chr(13)結尾。爲了顯示這個字符串,需要用'$'來代替chr(13),或者用字符串作爲文件名(例如創建一個文件並寫入),用chr(0)代替chr(13) 。

捕獲的字符串與0AH需要數據段具有三個DB的變量,下一圖像解釋的邏輯:

enter image description here

前兩個字符是用於控制(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指定爲最大長度。

+0

嗨,何塞,我感謝您的答案,但它不起作用,它甚至不顯示「輸入文件名」消息。我試圖解決它,但結果不好,你能解決它嗎?非常感謝 –

+0

它不顯示字符串。它的作用是用chr(0)替換chr(13),打開文件,寫入並關閉它。 –

+0

數據段初始化後,程序應該寫一個字符串來標準化,但是當我運行它時,沒有輸出,也沒有創建任何文件。 –