Assembly 8086 ASM:从DosBox中的输入文件读取常量
我在程序上面声明了常量,比如Assembly 8086 ASM:从DosBox中的输入文件读取常量,assembly,x86-16,dosbox,emu8086,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
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中可能吗?对不起,我的英语不好,先谢谢你;) 看来你把很多事情弄糊涂了。在汇编时(汇编程序时),通过
eq
将上面定义的常量从文本字符串转换为整数值。您试图从文本文件读取的字符串不是整数值-它们仍然只是文本(没有任何到所需整数值的映射)
如果可能的话,从二进制文件重建此映射将非常复杂
我甚至怀疑这是可能的,除非在汇编之前创建一个单独的字典,因为预处理器在汇编之前使用cal
和16
之间的文本->值关系来替换文本,甚至汇编程序都不知道。因此,它也不会出现在调试信息中(如.PDB
-文件等)
即使调试信息包含在二进制文件中或随二进制文件一起提供,从二进制文件重建这种关系也会相当复杂
因此,简单的答案是:
您必须自己创建一个从
cal
(string)到16
(int)的字典或其他映射,以解析.txt
文件并获得所需的值 您的工作是将字符串cal
转换为值。就像其他语言一样。您需要编写类似于if(strcmp(token,“cal”)==0)tab[i]=cal代码>我不确定“读取常量”是什么意思。您当然可以使用常量来检查特定值:cmp-cx,cal
,基本上是指cmp-cx,16
。但我不知道“c的ascii值”(99)如何映射到16?