Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 8086 ASM:从DosBox中的输入文件读取常量_Assembly_X86 16_Dosbox_Emu8086 - Fatal编程技术网

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?