美好的一天!我在这里有一个TASM代码,当我再次运行程序时它不会附加新字符串。添加的代码行是什么?非常感谢你!
; This example program creates a file and then writes to it.
.model small
.stack
.data
CR equ 13
LF equ 10
StartMessage DB "This program creates a file called NEW.TXT"
DB ,"on the C drive.$"
EndMessage DB CR,LF,"File create OK, look at file to"
DB ,"be sure.$"
WriteMessage DB "An error has occurred (WRITING)$"
OpenMessage DB "An error has occurred (OPENING)$"
CreateMessage DB "An error has occurred (CREATING)$"
WriteMe DB "HELLO, THIS IS A TEST, HAS IT WORKED?",0
FileName DB "new.txt",0 ; name of file to open
Handle DW ? ; to store file handle
.code
START:
mov ax,@data ; base address of data segment
mov ds,ax ; put it in ds
mov dx,offset StartMessage
mov ah,09h
int 21h
mov dx,offset FileName ; put offset of filename in dx
xor cx,cx ; clear cx - make ordinary file
mov ah,3Ch ; function 3Ch - create a file
int 21h ; call DOS service
jc CreateError ; jump if there is an error
mov dx,offset FileName ; put offset of filename in dx
mov al,2 ; access mode -read and write
mov ah,3Dh ; function 3Dh - open the file
int 21h ; call dos service
jc OpenError ; jump if there is an error
mov Handle,ax ; save value of handle
mov dx,offset WriteMe ; address of information to write
mov bx,Handle ; file handle for file
mov cx,38 ; 38 bytes to be written
mov ah,40h ; function 40h - write to file
int 21h ; call dos service
jc WriteError ; jump if there is an error
cmp ax,cx ; was all the data written?
jne WriteError ; no it wasn't - error!
mov bx,Handle ; put file handle in bx
mov ah,3Eh ; function 3Eh - close a file
int 21h ; call dos service
mov dx,offset EndMessage
mov ah,09h
int 21h
ReturnToDOS:
mov ax,4C00h ; terminate program
int 21h
WriteError:
mov dx,offset WriteMessage
jmp EndError
OpenError:
mov dx,offset OpenMessage
jmp EndError
CreateError:
mov dx,offset CreateMessage
EndError:
mov ah,09h
int 21h
mov ax,4C01h
int 21h
END START
此外,在将字符串放入文件之前是否需要终止程序?非常感谢你!
修改
@ us2012:按照你的回答,我应该替换
mov bx,Handle ; file handle for file
mov cx,38 ; 38 bytes to be written
mov ah,40h ; function 40h - write to file
int 21h ; call dos service
与
mov dx,offset WriteMe ; address of information to write
mov bx,Handle ; file handle for file
mov cx,38 ; 38 bytes to be written
;xor dx, dx
mov ah,40h ; function 40h - write to file
mov al, 02h
int 21h ; call dos service
?当我再次运行程序时,它仍然不会附加。还是一个HELLO, THIS IS A TEST, HAS IT WORKED?
。
答案 0 :(得分:1)
int21h引用说要移动文件指针,你可以使用函数42h
。详细信息为here,因此以下内容适用于在写入之前寻找文件的末尾:
mov bx, Handle
xor cx, cx
xor dx, dx
mov ah, 42h
mov al, 02h
int 21h
答案 1 :(得分:-4)
.data
filename db 'myfile.txt',0
handler dw ?
msg db "hello$"
buffer db 1000 dup (?)
writeme db "world$"
.code
;;;;;;;;;;APPENDING
append proc
mov dx,offset writeme
mov bx,handler
mov cx,5 ;length of appended string
mov ah,42h
mov ah,09h
int 21h
append endp
end