【发布时间】:2019-07-04 15:05:33
【问题描述】:
我想知道当您尝试将对于 8 位寄存器来说太大的值存储到 8 位寄存器中时会发生什么。
高 8 位会发生什么?这些数据是丢失了,还是例如转移到 bx 中? mov 指令是否关心,或者它只是将 00ffh 存储到 al 中?
例子:
xor bl,bl
add bl,0fffh
mov al,bl
【问题讨论】:
-
理想情况下,汇编器会阻止您这样做,因为它是不可编码的指令。
-
add bl,ffffh不存在 -
它是不可编码的,但是已知一些汇编程序会通过警告将其截断为所需的大小,而有些汇编程序会以静默方式进行。大多数汇编程序会产生一个硬错误。啊,我看到你正在使用 NASM。 NASM 默认发出警告。它所做的是将 0ffffh 截断为低位 0ffh 并将其存储在 8 位寄存器中。
-
为了清楚起见,cpu 永远不会看到你的常量太大,所以它不是
mov指令在运行时做一些魔术。 -
显然您使用的 NASM 版本将其视为默认警告。您可以通过与
-Werror=number-overflow(或简单的-Werror)组合将其视为错误。