创建指向特定位置的指针

时间:2011-05-06 11:53:09

标签: memory variables pointers assembly nasm

我需要一个指向位置的指针,它始终是相同的。那么,我怎么能创建一个指针...让我们说内存地址0x20并以某种方式存储它以便以后能够访问它。 注意: 我不想存储结果,而是存储地址的实际指针(因为我想指向数组的开头)。

提前致谢。

-

我想我现在已经修好了。我使用bios中断0x15来获取内存映射。每个中断返回1个条目,并在es:di中提供指针,指向bios可以存储它的位置。我让bios从050h:0h建立起来。我需要一个指向0x50:0x0(0x500线性)的指针以便稍后使用地图。我仍然要测试,但我做了以下事情:

    mov ax, 0x50
    mov es, ax
    xor di, di

    shl ax, 4
    add ax, di
    mov [mmr], ax

mmr以这种方式宣布:

mmr:
    dw 0 ; pointer to the first entry
    db 0 ;entry count
    db 24 ; entry size

2 个答案:

答案 0 :(得分:3)

指针只是一个内存地址,内存地址只是一个数字。汇编不是一种打字语言,因此没有区别。

此外,汇编并没有真正的变量。它有寄存器和存储单元,两者都可用于存储值,包括地址/指针。

因此,基本上有许多x86 MOV指令的变体可以将0x20之类的指针存储在地址或寄存器中。您当然想要考虑是否正在进行32位或64位x86汇编(或16位或甚至8位)。

答案 1 :(得分:2)

86:

假设您有一个名为list

的数组
mov bx, offset list

现在,在bx寄存器中,您将有一个指向list的第一个内存位置的指针

引用您将使用的内存位置中的数据[bx]


这是使用intel语法的简短示例:

;declare list in .data
list dw 0123h

;move 01h from memory to ax register (16-bit)
mov bx, offset list
mov al, [bx] ; al = 23h

如果您想稍后使用指针,可以执行以下操作:

push bx然后pop bx当你想要使用它时

mov point, bx ; declared in mmr