【发布时间】:2018-05-24 00:32:11
【问题描述】:
我需要阅读并显示作业的文本文件。基本上,它需要读取并显示名为“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 中运行?
【问题讨论】:
-
它是您启动程序的位置,而不是您的源代码所在的位置,但是,您似乎有一个绝对路径,因此无论您从哪里开始,它都应该可以工作。您应该尝试将它放在 c 的根目录中,并将文件更改为 "C:\textfile.txt"
-
你是用TASM编译的吗?如果是这样,您应该将.model更改为tiny,删除.data,在
mov dx, offset file之前定义一个start:标签并将最后一行更改为end start以定义链接的入口点 -
@fuz 仍然应该使用 int
21/4c,如果程序应该在 dosbox 之外的其他地方运行 -
@Tommylee2k 是的,它保证适用于所有 DOS 实现,因为它是 MS-DOS 1 的一部分,许多程序都使用它。我认为它可以追溯到 CP/M,但我不太确定。
-
@Tommylee2k
ret是“保证”在任何 DOS 上工作的 COM 文件(尽管我敢打赌曾经存在一些不兼容的 DOS)。对于 EXE 文件,4Ch绝对更安全,或者int 20h。我不记得 EXE 中的ret应该可以工作。
标签: assembly tasm dosbox emu8086