【发布时间】:2015-04-03 18:18:39
【问题描述】:
我目前正在阅读 Kip R. Irvine 的 Assembly Language for x86 Processors 6th Edition。这很有趣,但有些事情让我感到困惑。
在本书的开头,显示了以下代码:
list BYTE 10,20,30,40
ListSize = ($ - list)
这对我来说很有意义。声明数组后,用数组的起始位置减去内存中的当前位置,得到数组使用的字节数。
然而,这本书后来做了:
.data
arrayB BYTE 10h,20h,30h
.code
mov esi, OFFSET arrayB
mov al,[esi]
inc esi
mov al,[esi]
inc esi
mov al,[esi]
据我了解,OFFSET 返回变量相对于程序段的位置。该地址存储在esi 寄存器中。然后使用立即数访问存储在esi 中表示的地址处的值。递增将地址移动到下一个byte。
那么在数组上使用OFFSET 和简单地调用数组变量有什么区别呢?我以前被引导相信简单地调用数组变量也会给我它的地址。
【问题讨论】:
-
根据您的汇编器语法,使用数组名将从内存中加载第一个元素,而不是地址。
标签: arrays assembly x86 offset