Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 在汇编程序中写入文件_Assembly_Nasm_Dosbox - Fatal编程技术网

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终止程序,所有打开的文件也将最终关闭,并且不会丢失任何数据。