8086 ASM:从DosBox中的输入文件中读取常量

时间:2017-01-21 00:27:46

标签: assembly x86-16 dosbox emu8086

我已经在程序上面声明了常量,比如

cal          equ    16  
length       equ    1000

我的问题是:我可以在我的.txt文件中声明常量:

cal,cal,cal   

要从我使用的文件中读取

mov bx, ax       ;file handler
mov ah, 3fh      ;interrupt number
mov cx, length
mov dx, offset music
int 21h

我在数据段中声明了

db  tab length dup (0)

读取时一切正常,但我们需要读取常量而不是ASCII字符数。例如,如果我有:

cal

它的内容如下:

tab[0]= ascii of c
tab[1]= ascii of a etc

但我需要

tab[0]= 16

这是否可以在带有ASM的DosBox中使用? 对不起我的英文,并提前感谢你;)。

1 个答案:

答案 0 :(得分:0)

看起来你很混淆了很多事情。您在上面定义的常量从文本字符串通过EQU转换为汇编时的整数值(当您汇编程序时)。您尝试从文本文件中读取的字符串不是整数值 - 它们仍然只是文本(没有任何映射到您想要的整数值)。

如果可能的话,从二进制文件重建这个映射会非常复杂。

我怀疑这甚至是可能的 - 除非在汇编之前创建一个单独的字典 - 因为cal16之间的text->值关系被使用在汇编之前用于文本替换的PreProcessor甚至汇编程序都不知道它的。因此,它也不会出现在Debug-info(如.PDB - 文件左右)中。

即使Debug-info将包含在二进制文件中或随其一起提供,从它重建这种关系也会非常复杂。

所以,简短的回答是:
您必须自己创建一个 Dictionary 或从cal(字符串)到16(int)的其他映射来解析.txt文件并得到您想要的值。