Assembly 如何读取ASCIIZ字节字符串
我正在尝试编写一个过程,从输入中读取一个字节字符串,并将其存储为ASCIIZ格式(字符串以Assembly 如何读取ASCIIZ字节字符串,assembly,input,x86,ascii,dos,Assembly,Input,X86,Ascii,Dos,我正在尝试编写一个过程,从输入中读取一个字节字符串,并将其存储为ASCIIZ格式(字符串以0结尾)。下面是我到目前为止的代码;读取字符串后,我无法确定如何访问字符串中的最后一个字节并将其设置为0 READ_ASCIIZ PROC PUSH BP MOV BP, SP MOV AH, 0AH MOV DX, 4H[BP] INT 21H POP BP RET 2H READ_ASCIIZ ENDP 您可以通过以下方式进行操作(使用nas
0
结尾)。下面是我到目前为止的代码;读取字符串后,我无法确定如何访问字符串中的最后一个字节并将其设置为0
READ_ASCIIZ PROC
PUSH BP
MOV BP, SP
MOV AH, 0AH
MOV DX, 4H[BP]
INT 21H
POP BP
RET 2H
READ_ASCIIZ ENDP
您可以通过以下方式进行操作(使用nasm语法,未经测试):
(注意,这不是最优化的方法)如果
bp+4
指向的缓冲区按要求格式化,则只需读取第二个字节以确定长度,并在末尾加一个零即可。你在哪一部分遇到了麻烦?@user786653我搞不懂数组第二个字节的索引语法。
; saved modified registers
push bx
push si
; get pointer to buffer
mov si, [bp+4]
; grab number of chars read
; (zero-extending as the length is stored as a byte)
movzx bx, byte [si+1]
; write zero at end of character buffer (overwriting the newline)
; (+2 since that's were the buffer starts)
mov byte [si+bx+2], 0
; restore registers
pop si
pop bx