我有一个非常基本的问题。我是用汇编语言编写的,我需要在数据段中声明一个单词,所以我写道:
.model small
.stack 32h
.data
X DW A0B0h
然而,它不会编译。编译器说"溢出!无法评估,"而且我不明白为什么。一个字是2个字节,A0b0h
是2个字节(每个六进制字符有4个字节,有4个字符,所以有16个字节,即2个字节)。
而且,为什么有些人会写这样的价值观:
A DB 0120h
而不是:
A DB 120h
它可能与我的错误有关吗?
答案 0 :(得分:3)
汇编程序在处理源代码时所做的第一步是对其进行标记。将文件内容拆分为可识别的标记类别,解析器然后解释它们。像关键字,数字,符号,字符串,标点符号。从数字0..9开始,数字被识别。符号以字母开头识别。
所以“A0B0h”不被识别为数字,它是一个符号。像“X”。您必须将其写为0A0B0h
,现在它是一个数字。
你没有得到一个非常好的错误信息,“溢出”当然令人困惑。汇编程序可能会跳枪,在第二次传递之前不能抱怨未知标识符。也许已经在第一遍中决定它不能将32位地址粘贴到16位变量中,就像那样。