2015-04-17 73 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

数据段初始化后,程序应该写一个字符串来标准化,但是当我运行它时,没有输出,也没有创建任何文件。 –