Structs mit Nasmw?
-
Hallo!
Warum funktioniert dieser einfache Code nicht mit nasmw?Person struc
Nachname DB 20 DUP (?)
Person endsEs kommen immer Fehler wie Person redefined....diesen Code schreibe ich dahin, wo ich auch strings etc. definiere
Kevin
-
Ich zitiere mal aus dem Nasm-Manual (das ich nur empfehlen kann):
4.8.5 STRUC and ENDSTRUC: Declaring Structure Data Types
The core of NASM contains no intrinsic means of defining data structures; instead, the preprocessor
is sufficiently powerful that data structures can be implemented as a set of macros. The macros
STRUC and ENDSTRUC are used to define a structure data type.
STRUC takes one parameter, which is the name of the data type. This name is defined as a symbol
with the value zero, and also has the suffix _size appended to it and is then defined as an EQU
giving the size of the structure. Once STRUC has been issued, you are defining the structure, and
should define fields using the RESB family of pseudo−instructions, and then invoke ENDSTRUC to
finish the definition.
For example, to define a structure called mytype containing a longword, a word, a byte and a
string of bytes, you might code
struc mytype
mt_long: resd 1
mt_word: resw 1
mt_byte: resb 1
mt_str: resb 32
endstruc
The above code defines six symbols: mt_long as 0 (the offset from the beginning of a mytype
structure to the longword field), mt_word as 4, mt_byte as 6, mt_str as 7, mytype_size as
39, and mytype itself as zero.
The reason why the structure type name is defined at zero is a side effect of allowing structures to
work with the local label mechanism: if your structure members tend to have the same names in
more than one structure, you can define the above structure like this:
struc mytype
.long: resd 1
.word: resw 1
.byte: resb 1
.str: resb 32
endstruc
This defines the offsets to the structure fields as mytype.long, mytype.word, mytype.byte
and mytype.str.
NASM, since it has no intrinsic structure support, does not support any form of period notation to
refer to the elements of a structure once you have one (except the above local−label notation), so
code such as mov ax,[mystruc.mt_word] is not valid. mt_word is a constant just like any
other constant, so the correct syntax is mov ax,[mystruc+mt_word] or
mov ax,[mystruc+mytype.word].mfg
-bg-
-
muss ich dann immer
.long: resd 1
.word: resw 1
.byte: resb 1
.str: resb 32verwenden?
das is ja schei..........da benutz ich glaub ich lieber tasm
-
nein das war nur das Bsp, wenn die einzelnen Elemente long, short srt, usw. heißen.
deine struc würde so lauten:struc person .Nachname: resb 20 endstruc