Assembly 在汇编程序中写入文件
我的任务是创建一个程序,将一些字符串写入文件。到目前为止,我想到了这个:Assembly 在汇编程序中写入文件,assembly,nasm,dosbox,Assembly,Nasm,Dosbox,我的任务是创建一个程序,将一些字符串写入文件。到目前为止,我想到了这个: org 100h mov dx, text mov bx, filename mov cx, 5 mov ah, 40h int 21h mov ax, 4c00h int 21h text db "Adam$" filename db "name.txt",0 但它什么也没用。我使用的是nasm和dosbox。您必须首先创建文件(如果已经存在,则打开
org 100h
mov dx, text
mov bx, filename
mov cx, 5
mov ah, 40h
int 21h
mov ax, 4c00h
int 21h
text db "Adam$"
filename db "name.txt",0
但它什么也没用。我使用的是nasm和dosbox。您必须首先创建文件(如果已经存在,则打开),然后写入字符串,最后关闭文件。下一个代码是MASM,是用EMU8086编写的,我发布它是因为它可以帮助您了解如何执行此操作,中断是相同的,以及参数,因此算法:
.stack 100h
.data
text db "Adam$"
filename db "name.txt",0
handler dw ?
.code
;INITIALIZE DATA SEGMENT.
mov ax,@data
mov ds,ax
;CREATE FILE.
mov ah, 3ch
mov cx, 0
mov dx, offset filename
int 21h
;PRESERVE FILE HANDLER RETURNED.
mov handler, ax
;WRITE STRING.
mov ah, 40h
mov bx, handler
mov cx, 5 ;STRING LENGTH.
mov dx, offset text
int 21h
;CLOSE FILE (OR DATA WILL BE LOST).
mov ah, 3eh
mov bx, handler
int 21h
;FINISH THE PROGRAM.
mov ax,4c00h
int 21h
在这一行:
mov处理程序,ax
有一个问题。Nasm告诉我“操作码和操作数的组合无效”。可能名称“handler”是一个保留字。更改变量的名称,例如,file_handler。我更改了名称,但仍然出现此错误。如果我只注释掉这一行,那么程序编译并创建文件(没有内容)。@SzwornyDziąch在NASM中,当从标记的内存位置读取/写入值时,标签需要放在括号中。因此,请尝试使用mov[handler]、ax
以及更进一步的mov bx[handler]
。仅引用名称处理程序
就是文本地址值。上面的答案是MASM,它使用不同的语法。我们可以在打开/创建文件后将文件句柄放入BX。写入功能(AH=40h)和读取功能(3Fh)不会破坏BX的竞争。但是,如果用AH=4Ch int 21h终止程序,所有打开的文件也将最终关闭,并且不会丢失任何数据。