【发布时间】:2017-01-21 18:51:08
【问题描述】:
我对 OFFSET 运算符的概念相当困惑。根据 Kip R. Irvine 的《x86 处理器的汇编语言》一书,他将偏移运算符定义为返回变量与其封闭段开头的距离的运算符。他还说,偏移运算符返回数据标签的偏移量,它表示标签与数据段开头的距离(以字节为单位)。什么是偏移量?标签到数据段开头的距离是什么意思? 还有,他是不是会得出这样的结果:
他声明了三种不同类型的变量:
.data
bVal BYTE ?
wVal WORD ?
dVal DWORD ?
dVal2 DWORD ?
如果 bVal 位于偏移量 00404000(十六进制),则 OFFSET 运算符将返回以下值:
mov esi, OFFSET bVal ;ESI = 00404000h
mov esi, OFFSET wVal ;ESI = 00404001h
mov esi, OFFSET dVal ;ESI = 00404003h
mov esi, OFFSET dVal2 ;ESI = 00404007h
他是从哪里得出这些价值观的?请帮忙。非常感谢!
【问题讨论】:
-
看看每个变量 bVal、wVal、dVal、dVal2 由多少字节组成,并想象它们都一个接一个地放在内存中。然后查看
ESI =的每个值。偏移量几乎说“给我标签的地址”。将偏移量 00404000h 视为任意并用于说明目的。
标签: assembly x86 nasm masm irvine32