开发者

Create a pointer to a specific location

开发者 https://www.devze.com 2023-03-04 14:59 出处:网络
I need a pointer to location which is always the same. So, how can I create a pointer to.. lets say memory address 0x20 and store it in some way to be able to access it开发者_StackOverflow社区 later.

I need a pointer to location which is always the same. So, how can I create a pointer to.. lets say memory address 0x20 and store it in some way to be able to access it开发者_StackOverflow社区 later. Note: I do NOT want to store the result, but the actual pointer to the memory address (since I want to point to the beginning of an array).

Thanks in advance.

--

I think I have fixed it now. I use bios interrupt 0x15 to get a memory map. Every interrupt returns 1 entry and you provide a pointer in es:di to a place where the bios can store it. I let the bios build it up from 050h:0h. I needed a pointer to 0x50:0x0 (0x500 linear) to use the map later. I still have to test, but I did the following:

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

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

And mmr is declared this way:

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


A pointer is just a memory address and a memory address is just a number. Assembly is not a typed language so there is no difference.

Also assembly doesn't really have variables. It has registers and memory locations, both of which can be used for storing values, including addresses/pointers.

So basically there are many variants of the x86 MOV instruction that can store a pointer such as 0x20 in an address or a register. You certainly want to think about whether you're doing 32-bit or 64-bit x86 assembly though (or 16-bit or even 8-bit for that matter).


x86:

suppose you have an array called list

mov bx, offset list

now, in the bx register you will have a pointer to the first memory location of list

to refer to the data in the memory location you would use [bx]


here's an brief example using intel syntax:

;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

If you want to use the pointer later you can do this:

push bx then pop bx when you want to use it

or

mov point, bx ; declared in mmr

0

精彩评论

暂无评论...
验证码 换一张
取 消