从程序集中的文件中读取一个字节后,将更新当前文件位置。我怎么能想修改那个字节,而不是把它写在我从中读取的相同位置的文件中?我在x8086上的tasm工作
READ_LOOP:
MOV AH,3FH
MOV BX, HANDLE
MOV CX, 1
LEA DX, BUFFER
INT 21H
INC SI
;if no byte was read we reached the end of file or an error occured
CMP AL, 1
JB EOF_END_ERR
;write the read content to output
;MOV AH, 02H
;MOV DL, BUFFER
;INT 21H
JMP ENCRYPTING
JMP FINAL
ENCRYPTING:
XOR AX,AX
MOV DL, BUFFER[0]
ADD DL, NUMBER[0]
MOV TEMP, DL
MOV AH, 42H
MOV BX, HANDLE
MOV CX,0FFFFH
MOV DX, 0FFFFH
MOV AL,1
INT 21H
XOR DX,DX
MOV DL, 65
MOV BX, HANDLE
MOV CX,1
MOV AH, 40H
INT 21H
JMP READ_LOOP
我尝试使用上面的代码,只需将NUMBER [0]添加到读取字节的ASCII代码中,然后将其写回文件中。但它没有在文件中写出它应该写的内容
答案 0 :(得分:1)
您可以使用服务AH=42h。从文件中读取一个字节后,文件指针将被更新。现在要将文件中的先前读取字节替换为其他内容,您需要先将文件指针向后移动一个字节(使其指向要替换的字节),这可以通过以下代码完成:
将文件指针从当前位置向后移动一个字节的代码:
mov al, 1 ; relative to current file position
mov ah, 42h ; service for seeking file pointer
mov bx, handle
mov cx, -1 ; upper half of lseek 32-bit offset (cx:dx)
mov dx, -1 ; moves file pointer one byte backwards (This is important)
int 21h
执行上述代码后,您现在可以用新字节覆盖该字节,这可以通过以下代码完成:
从文件指针的当前位置写入的代码:
mov ah, 40h ; service for writing to a file
mov bx, handle
mov cx, 1 ; number of bytes to write
mov dx, offset char ; buffer that holds the new character to be written
int 21h
有关文件操作的更多信息,请转到here。