如果我使用太大而不适合的值初始化BYTE或SBYTE会发生什么?

时间:2017-06-20 00:50:18

标签: assembly x86 masm irvine32

我正在学习x86汇编语言,遵循Kip Irvine的汇编语言书。

在书中,作者说:

  

3.4.4定义BYTE和SBYTE数据

     

BYTE(定义字节)和SBYTE(定义有符号字节)指令为一个或多个分配存储   未签名或签名的值。每个初始化器必须适合8位   存储

我只是想知道,如果我不小心为存储区域分配了一个太大的值,该怎么办?我应该期待什么样的行为?

由于我的经验不足,我无法想出一个证明行为的例子,所以如果有人能提供代码示例的解释那就太棒了。

1 个答案:

答案 0 :(得分:1)

所以,让我们说你有一个标签MyMemoryLocation,以及其他标签,你就这样写了:

.DATA 
Before           BYTE 0
MyMemoryLocation BYTE 0
After            BYTE 0

并且您有代码滥用标签并尝试在16位操作中使用它:

.CODE
MOV AX, 1234H
MOV MyMemoryLocation, AX

如果您没有收到汇编错误(MASM会给您"操作数大小不匹配"),AX中的值将写入从MyMemoryLocation开始的地址。 / p>

由于80x86为little-endian,因此将在MyMemoryLocation处首先写入最低有效字节。第二个字节将在After之后立即写入存储器。所以你最终会得到:

Before            BYTE 0
MyMemoryLocation  BYTE 34H
After             BYTE 12H