有没有办法取消引用存储在内存中的指针?

问题描述 投票:0回答:1

我试图将指针存储在内存上的变量中。我怎样才能取消引用它? 我正在尝试这样做:

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:仅在尝试取消引用时才会出现错误。

assembly x86 nasm dereference addressing-mode
1个回答
0
投票
pointer: db 0 ; the pointer variable

db
是一个字节,这意味着:8 位。

您正在 x86 上运行程序。这意味着“正常”指针的大小至少为 16 位(如果您在 16 位模式下运行)。

我已经尝试过

[[pointer]]
,但它给了我一个错误。

在汇编语言中,一条指令对应CPU可以执行的一条指令。

1959 年,IBM 制造了一台可以在一条指令中取消引用多层指针(您可以将其写为

[[[pointer]]]
)的计算机。然而,据我所知,没有现代计算机能够做到这一点。几乎所有 CPU 都需要多条指令来取消引用多级指针:

首先,他们用一条指令将指针加载到寄存器中;然后他们在第二条指令中使用寄存器中的地址。

示例:

mov eax, [pointer]
mov ebx, [eax]

并且由于一条汇编指令通常对应于一条 CPU 指令,因此您还需要使用汇编语言来执行此操作。

© www.soinside.com 2019 - 2024. All rights reserved.