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, @end

    2) 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" ergeben

    3) 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").



    1. geht (hab zwar irgendwo mal gelesen, dass das "@" Marken lokal macht, aber das war offensichtlich gezielte Desinformation...)
    2. geht leider nicht (error: unknown character, vermutlich die "<" und ">")
    3. Die OS dev links waren ein guter Hinweis 🙄
      http://www.nondot.org/sabre/os/files/MiscHW/RealtimeClockFAQ.txt schaut gut aus

    Danke



    1. "@@" 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".

    2. 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.


Anmelden zum Antworten