考虑一个非常简单的汇编语言程序中的以下两条语句:
DATA1 DB +200
DATA2 DB -130
当我尝试组装它时,汇编器在第 2 条语句上给出错误,因为一个字节可以容纳超过十进制 -128。但是为什么汇编程序没有在 no 1 语句上给出错误?毕竟,一个字节最多可以容纳 127 个正符号整数。相反,汇编程序将值 C8 放在该字节中。
也许它不知道文字是有符号还是无符号。对于汇编程序,我觉得这并不奇怪,两者都有用例。
-130 从不适合一个字节,因为它必须有符号并且小于 -128。另一方面,200 正好适合无符号字节,这似乎是汇编程序所采用的观点,如果将 0xC8 解释为无符号字节,则为 200。
任何数字在组装到可执行文件中时都会转换为位数组。例如,-1 是 0xFF,-2 是 0xFE,等等。-1 和 255 之间的唯一区别是它在代码中的使用方式。汇编器不在乎,它只是想存储数据供您使用。
所以要点是:
字段的内容意味着您想要它们的意思。所有这一切的结果是,您必须对程序将处理的数字的大小有一个很好的了解,并且您必须相应地定义字段大小。
Peter Abel 的“IBM PC 汇编语言和编程”。
同样来自同一作者“ADD 和 SUB 指令不区分无符号和有符号数据,实际上,只是简单地加减位”