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