ASCII 字符串转 asciiz(汇编 8086)

ASCII string to asciiz (assembly 8086)

我正在使用汇编 8086 语言处理一些文件夹中断,我需要读取 ascii 字符串并将其转换为 asciz 字符串以指定一些参数。 - 如何在字符串末尾添加空字符? - 如果我用 ah=9 int 21h 读取字符串,它会添加回车 return 字符吗? 我真的需要帮助!感谢关注

使用中断21h服务0AH(09H用于显示)从键盘捕获字符串。捕获的字符串以 chr(13) 结尾。要显示此字符串,必须将 chr(13) 替换为“$”,或者将该字符串用作文件名(例如,创建文件并写入文件),将 chr(13) 替换为 chr(0) .

捕获0AH的字符串需要一个变量在三个DB的数据段,下图解释逻辑:

前两个字符用于控制(0AH 需要它们)。有用的字符串从位置 2(第三个字节)开始。

要找出结尾的chr(13)在哪里,我们要做的就是将长度(第二个字节)加到第三个字节capisci?

现在是代码。接下来的小程序向用户显示一条消息并等待字符串,将 chr(13) 替换为 chr(0)(以创建和 ASCIIZ 字符串),创建一个包含该字符串的文件,向其写入文本并关闭它。注意数据段中的变量filename,三个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 作为最大长度。