我需要一个指向位置的指针,它始终是相同的。那么,我怎么能创建一个指针...让我们说内存地址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
答案 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