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

8086 ASM: Reading constants from input file in DosBox

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

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 中这可能吗?
对不起我的英语,提前谢谢你;)。

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

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

我怀疑这是否可能 - 除非在组装 之前创建一个单独的字典 - 因为 cal 和 [=12= 之间的文本->值关系] 被预处理器用于组装前的文本替换,甚至 assembler 都不知道 。因此,它也不会出现在 Debug-info(如 .PDB 左右的文件)中。

即使 Debug-info 包含在二进制文件中或随二进制文件一起交付,从中重建这样的关系也会非常复杂。


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