Sprungmarken in Makros und anderes
-
Hallo,
hab hier den Turbo Assembler 5 (16 Bit, DOS)
1) Lassen sich Sprungmarken auf Makros begrenzen?
testMacro macro mov ax, 0 mov bx, 0 cmp ax, bx jne @foo Display_String text_gleich jmp @end @foo: Display_String text_ungleich @end: endm
Zweimaliger "Aufruf" von testMacro gibt böse Fehler:
Symbol already defined elsewhere: @foo, @end2) Lassen sich Makroparameter aneinanderhängen?
concatMacro macro Number, DataName, CodeName DataName+Number segement foo db 100 dup(0) DataName+Number ends CodeName+Number segment assume cs:CodeName+Number CodeName+Number ends endm concatMacro 1, data, code concatMacro 2, data, code
=> "DataName+Number" sollte "data1" bzw. "data2" ergeben
=> "CodeName+Number" sollte "code1" bzw. "code2" ergeben3) sonstiges (Realtime Clock, Interrupt
Bilde mir ein, dass ich mal gelesen hab, dass
das Ding programmierbar ist.
Gibts da Doku drüber?
Googlesuche war bisher nicht grade erfolgreich...Würde mich freuen, wenns sich da was machen ließe....
mfg
Martin
-
Zu 1:
Jup, geht. 1. Zeile im Macro muss LOCAL symbol [,symbol]... sein.Zu 2:
Probier's mal damit:<DataName><Number> segement foo db 100 dup(0) <DataName><Number> ends
Zu 3:
AFAIR liegst du da richtig und man kann damit nette Dinge anstellen.
Einen Link habe ich gerade nicht zur Hand, aber es sollte sich entweder bei den OS-Dev-Links in den FAQ etwas finden lassen, oder AFAIR auch in der PCGPE 10 (gibt's auf meiner HP unter "sonstige Downloads").
-
- geht (hab zwar irgendwo mal gelesen, dass das "@" Marken lokal macht, aber das war offensichtlich gezielte Desinformation...)
- geht leider nicht (error: unknown character, vermutlich die "<" und ">")
- Die OS dev links waren ein guter Hinweis
http://www.nondot.org/sabre/os/files/MiscHW/RealtimeClockFAQ.txt schaut gut aus
Danke
-
-
"@@" ist das Standardpraefix fuer lokale Labels, das ist schon richtig. Lokal relativ gesehen zu globalen labels oder Prozeduren. Beim Assemblieren werden Macros normalerweise einfach durch ihre Definition substituiert.
Wenn du nun einfach so 2 Macros mit lokalen Labels hintereinander setzt, ist klar, dass dann Beschwerde ueber doppelte Definitionen kommen.
Zudem scheinst du nicht den IDEAL-Mode zu benutzen. In diesem Fall ist dieses Praefix ohnehin erstmal deaktiviert. Einschalten kannst du es mit "LOCALS". -
Hab was rumprobiert...:
concatMacro macro Number, DataName, CodeName &DataName&Number segment foo&Number db 100 dup(0) &DataName&Number ends &CodeName&Number segment assume cs:&CodeName&Number &CodeName&Number ends endm
sollte funktionieren.
-
-
Cool geht,
fettes mercy.