NASM - The Netwide Assembler
NASM Forum => Using NASM => Topic started by: Alfonso V on December 03, 2004, 10:08:56 AM
-
It seems everybody is on holidays?
My question is:
Is there any way to get the label offset into a constant?.
I have next code:
ORG 100h
section .text
[...]
section .data
Array:
DW 0
DW 4000
DW 2400
DW -100
%define L Array + 2 ; <- ERROR
%rep 3
DW L
%define L L + 2
%endrep
Nasm doesn't allow to use "Array" into "%define" directive, how can i do this?
Regards
alfonso
-
I can't get Nasm to error out on that exact line, but I don't think you'd want "%define" for this. "%assign" is for variable numbers, "%define" is a text define - the L = L + 2 isn't going to work. What's more, a label offset is a relocatable value, not really a "constant". But I *think* something like this will do what you want...
%assign %%L 2
%rep 3
DW Array + %%L
%assign %%L %%L + 2
%endrep
(I'm not sure why you start at 2... skipping the first (0) entry?) Anyway... give that a try and see if it works.
Best,
Frank
-
Hi Frank
Yes, it works, thank you. This short code I put here was from my memory... I used %assign in original code too. Anyway '%assign' seems not support label offset (others compilers does) but we can use it with 'DW', that's the way. I skeep firts two bytes because it should be a pointer to next data (if the first word is zero there's no data forward)
Cheers
alfonso
-
> '%assign' seems not support label offset
%ASSIGN merely requires that the second
argument be a critical expression.
Just treat a label relative to $$ of the
segment the label was defined in, and you
can do something like this:
1 00000000 90 nop
2 l:
3 %assign a l-$$
4 00000001 01 db a