我正在学习x86汇编语言,遵循Kip Irvine的汇编语言书。
在书中,作者说:
3.4.4定义BYTE和SBYTE数据
BYTE(定义字节)和SBYTE(定义有符号字节)指令为一个或多个分配存储 未签名或签名的值。每个初始化器必须适合8位 存储
我只是想知道,如果我不小心为存储区域分配了一个太大的值,该怎么办?我应该期待什么样的行为?
由于我的经验不足,我无法想出一个证明行为的例子,所以如果有人能提供代码示例的解释那就太棒了。
答案 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