程序集8086 - 溢出

时间:2015-01-24 13:56:38

标签: assembly overflow x86-16

我有一个非常基本的问题。我是用汇编语言编写的,我需要在数据段中声明一个单词,所以我写道:

.model small
.stack 32h
.data
    X DW A0B0h

然而,它不会编译。编译器说"溢出!无法评估,"而且我不明白为什么。一个字是2个字节,A0b0h是2个字节(每个六进制字符有4个字节,有4个字符,所以有16个字节,即2个字节)。

而且,为什么有些人会写这样的价值观:

A DB 0120h

而不是:

A DB 120h

它可能与我的错误有关吗?

1 个答案:

答案 0 :(得分:3)

汇编程序在处理源代码时所做的第一步是对其进行标记。将文件内容拆分为可识别的标记类别,解析器然后解释它们。像关键字,数字,符号,字符串,标点符号。从数字0..9开始,数字被识别。符号以字母开头识别。

所以“A0B0h”被识别为数字,它是一个符号。像“X”。您必须将其写为0A0B0h,现在它是一个数字。

你没有得到一个非常好的错误信息,“溢出”当然令人困惑。汇编程序可能会跳枪,在第二次传递之前不能抱怨未知标识符。也许已经在第一遍中决定它不能将32位地址粘贴到16位变量中,就像那样。