我正在使用程序集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. 在程序集中生成声音8086
- 27. 8086程序集 - 划分溢出
- 28. DOS函数1程序集(8086)问题
- 29. 程序集8086光标的放置
- 30. 在程序集编程8086中添加十进制数字
'ah = 9'和'int 21h' *将一个字符串写入标准输出。它没有阅读。有'int 21h'函数在读取一个字符的时候,你可以这样做,在你看到回车的时候计数它们。然后你会知道长度。 – lurker