Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.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 汇编语言:在哪里放置.txt文件以便程序可以读取?(DOSBox)_Assembly_Tasm_Dosbox_Emu8086 - Fatal编程技术网

Assembly 汇编语言:在哪里放置.txt文件以便程序可以读取?(DOSBox)

Assembly 汇编语言:在哪里放置.txt文件以便程序可以读取?(DOSBox),assembly,tasm,dosbox,emu8086,Assembly,Tasm,Dosbox,Emu8086,我需要读取并显示作业的文本文件。基本上,它需要读取并显示名为“textfile.txt”的文件中的文本。在EMU8086中,我知道将文件放在哪里,程序运行良好。然而,在DOSBox中,我不知道“textfile.txt”放在哪里 当我运行这个程序时,它什么都不做 .model small org 100h .data .code org 100h ;.com memory layout ;****FOR EMU8086: PLACE THE FILE named "textfile.txt"

我需要读取并显示作业的文本文件。基本上,它需要读取并显示名为“textfile.txt”的文件中的文本。在EMU8086中,我知道将文件放在哪里,程序运行良好。然而,在DOSBox中,我不知道“textfile.txt”放在哪里

当我运行这个程序时,它什么都不做

.model small
org 100h  
.data
.code
org 100h ;.com memory layout
;****FOR EMU8086: PLACE THE FILE named "textfile.txt" IN C:\EMU8086\vdrive\C***
mov dx, offset file 
mov al,0 
mov ah,3dh
int 21h 
jc terminate
mov bx,ax

mov cx, 99 
mov dx, offset buf
mov ah, 3fh 
int 21h
JZ terminate 


MOV SI, offset buf 
print:
mov al, [SI]
mov ah,0eh 
int 10h
INC SI
CMP BYTE PTR [SI], 0  ;CMP [SI], 0
JNE print 


terminate:

;mov ah, 0 
;int 16h

ret


file db "C:\TASM\textfile.txt",0 ;****PLACE THE FILE IN C:\EMU8086\vdrive\C***
buf db 99 dup(0)
counter db 0



end    

当我使用EMU8086时,我将.txt文件放在
C:\EMU8086\vdrive\C
目录中。在上面的代码中,我将.txt文件放在
C:\TASM
目录中,但它不起作用。需要注意的是,此代码也位于
C:\TASM
中。我应该将.txt文件放在哪里,以便程序在DOSBox中工作

默认情况下,DOSBox不知道驱动器
C:
。您可以将其装载到任何物理路径。在DOSBox提示下输入:

mount C C:\EMU8086\vdrive\C
现在,文件位于EMU8086和DOSBox的相同位置。要查找TASM,我建议:

mount T C:\TASM
path T:\BIN;
要查找EMU8086,请通过编译后的代码
PATH

mount E C:\EMU80856
path E:\MyBuild;
DOSBox在E:\MySource中找到源代码

您可以使用自动化这些步骤。将其加载到文本编辑器中并移动到部分
[autoexec]
。插入上面的行:

...
[autoexec]
# Lines in this section will be run at startup.
# You can put your MOUNT lines here.

path T:\BIN;E:\MyBuild
mount C C:\EMU8086\vdrive\C
mount E C:\EMU8086
mount T C:\TASM
...
这些命令将在DOSBox的每次启动时执行

您的代码不能与TASM一起使用。这一个将起作用:

.model tiny
.code
org 100h
start:

mov dx, offset file
mov al,0
mov ah,3dh
int 21h
jc terminate
mov bx,ax

mov cx, 99
mov dx, offset buf
mov ah, 3fh
int 21h
JZ terminate


MOV SI, offset buf
print:
mov al, [SI]
mov ah,0eh
int 10h
INC SI
CMP BYTE PTR [SI], 0  ;CMP [SI], 0
JNE print

terminate:

mov ax, 4C00h
int 21h

file db "C:\textfile.txt",0 ;****PLACE THE FILE IN C:\EMU8086\vdrive\C***
buf db 99 dup(0)
counter db 0

end start

e:
cd \mysource
tasm mycode.asm
tlink /t mycode.obj

默认情况下,DOSBox不知道驱动器
C:
。您可以将其装载到任何物理路径。在DOSBox提示下输入:

mount C C:\EMU8086\vdrive\C
现在,文件位于EMU8086和DOSBox的相同位置。要查找TASM,我建议:

mount T C:\TASM
path T:\BIN;
要查找EMU8086,请通过编译后的代码
PATH

mount E C:\EMU80856
path E:\MyBuild;
DOSBox在E:\MySource中找到源代码

您可以使用自动化这些步骤。将其加载到文本编辑器中并移动到部分
[autoexec]
。插入上面的行:

...
[autoexec]
# Lines in this section will be run at startup.
# You can put your MOUNT lines here.

path T:\BIN;E:\MyBuild
mount C C:\EMU8086\vdrive\C
mount E C:\EMU8086
mount T C:\TASM
...
这些命令将在DOSBox的每次启动时执行

您的代码不能与TASM一起使用。这一个将起作用:

.model tiny
.code
org 100h
start:

mov dx, offset file
mov al,0
mov ah,3dh
int 21h
jc terminate
mov bx,ax

mov cx, 99
mov dx, offset buf
mov ah, 3fh
int 21h
JZ terminate


MOV SI, offset buf
print:
mov al, [SI]
mov ah,0eh
int 10h
INC SI
CMP BYTE PTR [SI], 0  ;CMP [SI], 0
JNE print

terminate:

mov ax, 4C00h
int 21h

file db "C:\textfile.txt",0 ;****PLACE THE FILE IN C:\EMU8086\vdrive\C***
buf db 99 dup(0)
counter db 0

end start

e:
cd \mysource
tasm mycode.asm
tlink /t mycode.obj

它是你开始程序的地方,而不是你的源代码所在的地方,然而,你似乎有一条绝对的路径,所以不管你从哪里开始,它都应该工作。您应该尝试将它放在c的根目录中,并将文件更改为“c:\textfile.txt”。您是用TASM编译的吗?如果是这样,您应该将.model更改为tiny,删除.data,在
mov-dx、偏移文件
之前定义一个
start:
标签,并将最后一行更改为
end-start
,以定义link@fuz如果程序应该在其他地方运行,那么仍然应该使用int
21/4c
dosbox@Tommylee2k对因为它是MS-DOS1的一部分,许多程序都使用它,所以它保证在所有DOS实现上都能工作。我想它可以追溯到CP/M,但我不太确定。@Tommylee2k
ret
可以“保证”在任何DOS for COM文件上工作(尽管我打赌曾经存在一些DOS不兼容)。对于EXE文件,
4Ch
绝对更安全,或者
int20h
。我不记得EXE中的
ret
应该工作。它是程序的启动位置,而不是源代码所在的位置,但是,您似乎有一个绝对路径,因此无论从何处启动,它都应该工作。您应该尝试将它放在c的根目录中,并将文件更改为“c:\textfile.txt”。您是用TASM编译的吗?如果是这样,您应该将.model更改为tiny,删除.data,在
mov-dx、偏移文件
之前定义一个
start:
标签,并将最后一行更改为
end-start
,以定义link@fuz如果程序应该在其他地方运行,那么仍然应该使用int
21/4c
dosbox@Tommylee2k对因为它是MS-DOS1的一部分,许多程序都使用它,所以它保证在所有DOS实现上都能工作。我想它可以追溯到CP/M,但我不太确定。@Tommylee2k
ret
可以“保证”在任何DOS for COM文件上工作(尽管我打赌曾经存在一些DOS不兼容)。对于EXE文件,
4Ch
绝对更安全,或者
int20h
。我不记得EXE中的
ret
应该工作。