flat assembler
Message board for the users of flat assembler.
Index
> Macroinstructions > Reserving strucs, then accessing fields using struc pointer |
Author |
|
Tomasz Grysztar 26 Jan 2019, 17:48
The general approach looks like this:
Code: ;------ Structure definition ----- struc dude { .height: db ? .weight: db ? .shortname: times 12 db ? .longname: times 128 db ? .portrait: times 8192 db ? } virtual at 0 dude dude end virtual ;-------- Code ------ ; [...] mov ax,mister_x mov [curr_dude_ptr],ax ; [...] mov di,[curr_dude_ptr] ; Retrieving a pointer to some "dude" struc ; Now, how are fields accessed by their labels? mov cl,[di+dude.height] ; Like this, for example ; [...] ;------- Uninitialized data ("BSS"): ------- curr_dude_ptr: dw ? ; Near pointer to some dude mister_x dude ; This space should be reserved, but specific mister_y dude ; fields should be accessible from outside more_data: ; ... Code: mov di,[curr_dude_ptr] virtual at di di_dude dude end virtual mov cl,[di_dude.height] Code: struc dude { .height: db ? .weight: db ? .shortname: times 12 db ? .longname: times 128 db ? .portrait: times 8192 db ? } virtual at 0 dude dude sizeof.dude = $ end virtual ; [...] array rb 100*sizeof.dude ; reserve space for 100 structures |
|||
26 Jan 2019, 17:48 |
|
revolution 26 Jan 2019, 17:58
Tomasz Grysztar wrote: Also, with "virtual at 0" approach you can easily add a size definition Code: virtual at some_offset dude dude sizeof.dude = $ - $$ end virtual |
|||
26 Jan 2019, 17:58 |
|
VileR 26 Jan 2019, 20:22
Very nice - works for me, thank you both.
|
|||
26 Jan 2019, 20:22 |
|
< Last Thread | Next Thread > |
Forum Rules:
|
Copyright © 1999-2025, Tomasz Grysztar. Also on GitHub, YouTube.
Website powered by rwasa.