extern
-
Servus!
Folgendes Problem:
Ich habe 2 .asm Dateien die 1. das Hauptprogram z.B
extern ex segment .code ..start mov ax,ex ret
das 2. Modul mit der ex-Definition:
global ex section .data ex db 'A'
Aber es funktioniert nicht das #ax adresse von ex ist ,sondern #ax kriegt immer falschen wert (0000) warum? bzw. wie ist es richtig?
-
ich benütze Nasm...
-
Bei jedem nasm gibt es einen Disassembler ndisasm. Damit kannst Du den Code disassemblieren und überprüfen, was nasm mit "mov ax, ex" meint. Bei Intel-Syntax weiss man es nie... Vielleicht muss man so was wie "mov ax, [ex]" eingeben.
-
Hallo und Danke erstma für deine Antwort!
Also es geht mir eigentlich darum das ich auf einer Variablen aus einer anderen Datei bzw. Modul zugreifen will was mir aber bisher nicht gelungen ist...
Hab mir das auch schon über Debugger angeschaut (GRDB,TD) und zeigt mir an
das #mov ax,ex# also die adresse von ex! immer falsch ist und zwar 0000 offset.
im Programcode liegt sie aber bei 0010..
-
Wie baust Du das Zeug eigentlich? Makefile?
-
erstma assembliere ich Beide zu Obj-files dann über alink zu .exe
nasm 1.asm -fobj
nasm 2.asm -fobj
alink 1.obj 2.obj
-
Drew schrieb:
extern ex segment .code ..start mov ax,ex ret
global ex section .data ex db 'A'
"ex" ist nur eine Sprungmarke und damit eine Adresse. Richtige Syntax also mit "[]", wenn du an den Wert willst.
Da es sich um ein Byte handelt wirst du mit "mov ax, ex" nicht viel erfolg haben.
Entweder:
mov al, BYTE PTR [ex]
oder:
movzx ax, BYTE PTR [ex]
-
Nabend!
so hab die ex-variable mal mit im 1. Modul gemacht also nur ein Modul und da ist mir doch gleich ein sehr grober Anfängerfehler aufgefallen (ich trottel), hab dann
nämlich mal das Datensegment mit der data-section initialisiert... na klar das klappt doch wunderbar.....o.kAber nun neue Fragen:
Wie schreibe ich den Code wenn die .data-section extern ist, weil wenn ich nur schreibe #mov ax,data... sagt mir nasm er kann kein data finden
Also muß ich ihm doch sagen können das .data extern ist ?! aber wie?
Modul 2 (externe .data sect mit sk)
global sk section .data sk db 'HALLO$'
Modul 1 (main)
CPU 386 extern sk section .code ..start: mov ax,data ;Fehler..wie sag ich nasm das data woanders ist?? mov ds,ax mov al,byte[sk] mov ah,4ch int 21h
2. Frage:
Wie könnte ich den folgeneden Code umschreiben das er wie im FLAT-model läuft,
weil soweit ich weiß liegen ja da Code und Daten sozusagen im selben Segment
aber das klappt hier nicht ?!CPU 386
section .data use32
sk db 'HALLO$'
section .code use32
..start:
mov eax,sk
ret 0Danke für eure Aufmerksamkeit!!