程序集 8086 - 溢出
assembly 8086 - Getting an overflow
我有一个非常基本的问题。我是用汇编写的,需要在数据段声明一个字,所以我写了:
.model small
.stack 32h
.data
X DW A0B0h
但是,它不会编译。编译器说 "overflow! cannot be evaluated," 我不明白为什么。一个字是 2 个字节,A0b0h
是 2 个字节(每个六角有 4 个半字节,有 4 个字符,所以 16 个半字节,也就是 2 个字节)。
还有,为什么有些人会这样写值:
A DB 0120h
而不是:
A DB 120h
会不会和我的错误有关?
汇编程序在处理您的源代码时所做的第一步是对其进行标记化。将文件内容拆分为可识别的标记类别,然后解析器对其进行解释。如关键字、数字、符号、字符串、标点符号。以数字 0..9 开头的数字被识别。符号以字母开头。
所以"A0B0h"是不是被识别为数字,它是一个符号。喜欢"X"。你必须把它写成0A0B0h
,现在它是一个数字。
您并没有得到很好的错误消息,"overflow" 当然令人困惑。汇编程序可能会抢先一步,直到第二遍之前它都不会抱怨未知的标识符。也许在第一次传递时就已经决定不能将 32 位地址粘贴到 16 位变量中,诸如此类。
我有一个非常基本的问题。我是用汇编写的,需要在数据段声明一个字,所以我写了:
.model small
.stack 32h
.data
X DW A0B0h
但是,它不会编译。编译器说 "overflow! cannot be evaluated," 我不明白为什么。一个字是 2 个字节,A0b0h
是 2 个字节(每个六角有 4 个半字节,有 4 个字符,所以 16 个半字节,也就是 2 个字节)。
还有,为什么有些人会这样写值:
A DB 0120h
而不是:
A DB 120h
会不会和我的错误有关?
汇编程序在处理您的源代码时所做的第一步是对其进行标记化。将文件内容拆分为可识别的标记类别,然后解析器对其进行解释。如关键字、数字、符号、字符串、标点符号。以数字 0..9 开头的数字被识别。符号以字母开头。
所以"A0B0h"是不是被识别为数字,它是一个符号。喜欢"X"。你必须把它写成0A0B0h
,现在它是一个数字。
您并没有得到很好的错误消息,"overflow" 当然令人困惑。汇编程序可能会抢先一步,直到第二遍之前它都不会抱怨未知的标识符。也许在第一次传递时就已经决定不能将 32 位地址粘贴到 16 位变量中,诸如此类。