Structs mit Nasmw?



  • Hallo!
    Warum funktioniert dieser einfache Code nicht mit nasmw?

    Person struc
    Nachname DB 20 DUP (?)
    Person ends

    Es 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 32

    verwenden?

    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
    

Anmelden zum Antworten