我试图将指针存储在内存上的变量中。我怎样才能取消引用它? 我正在尝试这样做:
pointer: db 0 ; the pointer variable
var: db 44 ; the normal variable
dereferenced: db 0 ; the result of dereferencing the value on `pointer`
start:
mov al, var ; move `var`'s address to `al` register
mov [pointer], al ; storing the previously moved `var`'s address on `pointer`
; dereferencing should go here
PS:我在Linux上使用
nasm
我已经尝试过
[[pointer]]
,但它给了我一个错误。
PPS:仅在尝试取消引用时才会出现错误。
pointer: db 0 ; the pointer variable
db
是一个字节,这意味着:8 位。
您正在 x86 上运行程序。这意味着“正常”指针的大小至少为 16 位(如果您在 16 位模式下运行)。
我已经尝试过
,但它给了我一个错误。[[pointer]]
在汇编语言中,一条指令对应CPU可以执行的一条指令。
1959 年,IBM 制造了一台可以在一条指令中取消引用多层指针(您可以将其写为
[[[pointer]]]
)的计算机。然而,据我所知,没有现代计算机能够做到这一点。几乎所有 CPU 都需要多条指令来取消引用多级指针:
首先,他们用一条指令将指针加载到寄存器中;然后他们在第二条指令中使用寄存器中的地址。
示例:
mov eax, [pointer]
mov ebx, [eax]
并且由于一条汇编指令通常对应于一条 CPU 指令,因此您还需要使用汇编语言来执行此操作。