【发布时间】:2016-03-14 08:42:46
【问题描述】:
我是 ASM 的新手。我对数据如何保存在内存中存有疑问。
这是我的 ASM 16 位代码
;db.com
.model small
.code
org 100h
start:
jmp proses
A db '123'
B dw 0abcdh
proses:
int 20h
end start
然后我尝试使用-d 命令进行调试
上图显示A变量在十六进制值中的顺序正确,但B变量在CD然后是AB。
我的问题是为什么 A 变量中的数据与 B 变量保存的不同,你能解释一下吗?
【问题讨论】:
-
您正在观察会发生什么,因为 x86 是一个小端系统。
A db '123'只是连续存储 3 个字节。当您超出大小超过一个字节的数据元素时,字节以相反的顺序存储。B dw 0abcdh是一个 16 位的值,因此字的字节以相反的顺序存储在内存中,因此在内存中它显示为cd ab。如果您有C dd 11223344h,则字节将以相反的顺序存储为44 33 22 11 -
参见维基百科中的endianness。
-
指令序列的情况稍微复杂一些。它以指令操作码开始,如果有一个 16 位操作数,它将按 little-endian 顺序排列,即最低有效字节在前。指令序列总是以操作码开头(不管字节序),否则处理器将不知道指令包含多少字节。