【问题标题】:Assembly Language: Where to place .txt file so that the program can read it? (DOSBox)汇编语言:在哪里放置 .txt 文件以便程序可以读取它? (DOS框)
【发布时间】: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


【解决方案1】:

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 中找到源代码。

您可以使用dosbox-0.74.conf 自动执行这些步骤。在文本编辑器中加载它并移至[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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-13
    • 1970-01-01
    • 2011-11-16
    • 1970-01-01
    • 2010-11-18
    • 2019-03-28
    • 2015-10-31
    相关资源
    最近更新 更多