home *** CD-ROM | disk | FTP | other *** search
/ Amiga MA Magazine 1998 #6 / amigamamagazinepolishissue1998.iso / coders / reass / tutorium / tutorium1.asm < prev    next >
Assembly Source File  |  1997-08-06  |  4KB  |  119 lines

  1. ;Tutorium1
  2. ; Programm für den In_Go Reassembler
  3. ;Dieses Programm dient nur Demonstrationszwecken
  4. ;und hat keinerlei Sinn und Zweck
  5.  
  6.  moveq.l #0,D0                   ;bei versehentlichem Aufrufen
  7.  rts                             ;Kein Guru
  8.  Beginn:                         ;Genau hier
  9.  movem.l   D0/A0,-(A7)           ;Hier werden Die Parms auf Stack gelegt
  10.  lea BaseA4,A4                   ;Initiere BASREG A4
  11.  movea.l   $4,A6                 ;ExecBase nach A6
  12.  move.l A6,ExecBase-BaseA4(A4)   ;und abspeichern
  13.  move.l Dummy-BaseA4(a4),A6      ;nur damit was anderes in A6 ist
  14.  move.l ExecBase-BaseA4(A4),A6   ;Base initieren
  15.  lea DosName-BaseA4(A4),A1       ;Namen hohlen
  16.  moveq.l #$25,D0                 ;Die Revisionsnummer
  17. OpenLibrary Set -$228            ;Damit wir keine Includes Benötigen
  18.  Jsr OpenLibrary(A6)             ;und Öffnen
  19.  tst.l D0                        ;wirklich geöffnet
  20.  beq.b Exit1                     ;Nein ? dann Raus
  21.  move D0,_DOSBase-BaseA4(A4)     ;Dann abspeichern
  22.  bsr Pseudotest                  ;in den Pseudotest verzweigen
  23.  bra.b Exit2                     ;und raus
  24. Exit1:
  25.  movem.l (A7)+,D0/A0             ;Stack wie zuvor
  26.  moveq.l #$0,D0                  ;Null zurück
  27.  rts
  28. Exit2:
  29.  movea.l _DOSBase-BaseA4(A4),A1  ;Lib schliesen
  30.  Bsr SchlieseLib
  31.  bsr dietab                      ;Ohne Sinn und Zweck
  32.  bra.b Exit1
  33.  
  34. Pseudotest:                      ;Bereich für lokale Vars dynamisch auf dem Stack anlegen
  35.  Link A5,#-48
  36.  move.l D0,20(A5)                ;in Lokale Var ablegen
  37.  move.l D1,28(A5)
  38.  moveq.l #$25,D0                 ;Die Versionsnummer
  39.  lea UtilityName-BaseA4(A4),A1
  40.  move.l ExecBase-BaseA4(A4),A6
  41. OpenLibrary SET -$228            ;Damit wir keine Includes Benötigen
  42.  Jsr OpenLibrary(A6)             ;und Öffnen
  43.  tst.l D0
  44.  beq.b nichtOffen
  45.  move.l D0,-12(A5)               ;abspeichern in PseudoVar
  46.  move.l -20(A5),D0               ;ersten multiplikannt hohlen
  47.  move.l -28(A5),D1               ;zweiten multiplikannt hohlen
  48.  move.l -12(A5),A6               ;UtilityBase Hohlen
  49. Umult32 SET -144                 ;Damit wir keine Includes Benötigen
  50.  jsr Umult32(A6)
  51.  move.l d0,-36(A5)               ;Alles nur Fake
  52.   movea.l -12(A5),A1
  53.  bsr SchlieseLib
  54.  move.l -36(A5),D0               ;Der Rückgabewert
  55.  bra.b subraus
  56. nichtOffen:
  57.  move #-1,D0                     ;False zurück
  58. subraus:
  59.  unlk A5
  60.  rts
  61. SchlieseLib:
  62.  move.l ExecBase-BaseA4(A4),A6    ;
  63. CloseLibrary SET -$19E            ;Damit wir keine Includes Benötigen
  64.  jsr CloseLibrary(A6)
  65.  rts
  66. ta:                               ;Tabellen Base und Tabellenstart
  67.  dc.w eins-ta                     ;Diese Tabellenart ist nicht eindeutig
  68.  dc.w zwei-ta                     ;Und könnte beim automatischen einlesen
  69.  dc.w drei-ta                     ;zu Fehlern führen
  70.  dc.w vier-ta                     ;Daher nicht automatisch eingelesen von In_Go
  71.  dc.w fünf-ta
  72. dietab:
  73.  move.l ta(pc,D3),D0
  74.  jsr ta(pc,D0)
  75.  rts
  76.  
  77.  ;MC68020                          ;Ab hier 68020 er Code möglich
  78. fünf: moveq.l #$5,d2
  79.       move.l ([IrgendneVar-BaseA4,A4]),AuchIrgendneVar-BaseA4(A4)
  80.       rts
  81.  
  82. drei: moveq.l #$3,d2
  83.       ;Die zwei nun folgenden 68000 er Instruktionen ergeben mit
  84.       ;In_Go optimiert einen 68020 er Befehl
  85.       ;Ganz schön komplex . . . nicht war ?
  86.       movea.l IrgendneVar-BaseA4(A4),A2
  87.       move.l  (A2),AuchIrgendneVar-BaseA4(A4)
  88.       rts
  89. eins: moveq.l #$1,D2
  90.       rts
  91. zwei: move.b #$2,D2
  92.       ext.w d2    ; mit In_Go optimiert EXTB.L
  93.       ext.l d2
  94.       rts
  95.  
  96. vier: moveq.l #$4,d2
  97.       rts
  98.  
  99.  dc.w  0
  100.  Data
  101. BaseA4:
  102.  dc.l Beginn
  103.  dc.l hT
  104.  dc.l drei
  105. hT:         dc.b "Hier sind irgendwelche Strings und Variablen",0
  106.  even
  107. DosName:  dc.b "dos.library",0
  108.  even
  109. UtilityName: dc.b "utility.library"
  110. even
  111. IrgendneVar: ds.l 1
  112. AuchIrgendneVar:ds.l 1
  113. Irgendwas:   ds.l 10
  114. ExecBase: ds.l 1
  115. _DOSBase:  ds.l 1
  116. Dummy:    ds.l 1
  117.  
  118.  END
  119.