16.2.3. Analýza aplikace clock.prc

Příklad 16.8. Disassemblovaný kód aplikace clock.prc

0000= 4E56 FFF4                 LINK    FP, #-12
0004= 486E                      PEA     -12(FP)
0008=                           PEA     -8(FP)
000C=                           PEA     -4(FP)
0010=                           SYSTRAP SysAppStartup
0014=                           LEA     12(RP), RP
0018=                           TST     D0
001A=                           BEQ     $+14 = 002A
001C=                           MOVE.B  #3, -(RP)
0020=                           SYSTRAP SndPlaySystemSound
0024=                           ADDQ.L  #2, RP
0026=                           MOVEQ   #-1, D0
0028=                           BRA     $+42 = 0054
002A=                           MOVE.L  -4(FP), A0
002E=                           MOVE    6(A0), -(RP)
0032=                           MOVE.L  2(A0), -(RP)
0036=                           MOVE    (A0), -(RP)
0038=                           JSR     30(PC)          ;= 0058
003C=                           ADDQ.L  #8, RP
003E=                           MOVE.L  -12(FP), -(RP)
0042=                           MOVE.L  -8(FP), -(RP)
0046=                           MOVE.L  -4(FP), -(RP)
004A=                           SYSTRAP SysAppExit

004E=                           LEA     12(RP), RP
0052=                           MOVEQ   #0, D0
0054=                           UNLK    FP
0056=                           RTS

0058=                           LINK    FP, #0
005C=                           TST     8(FP)
0060=                           BEQ     $+6             ;= 0068
0062=                           BRA     $+270           ;= 0172

0066=
0068=                 LBL???:   MOVEM.L D2-D7/A1-A6, -(RP)
006C=                           MOVE    #1, -(RP)
0070=                           MOVE.L  #1145132097, -(RP)
0076=                           SYSTRAP DmGet1Resource
007A=                           ADDQ.L  #6, RP
007C=                           CMPA.L  #0, A0
0082=                           BEQ     $+234           ;= 016E
0086=                           MOVE.L  A0, A3
0088=                           MOVE.L  A0, -(RP)
008A=                           SYSTRAP MemHandleSize
008E=                           ADDQ.L  #4, RP
0090=                           MOVE.L  D0, TOS
0092=                           MOVE.L  A3, -(RP)
0094=                           SYSTRAP MemHandleLock
0098=                           ADDQ.L  #4, RP
009A=                           MOVE.L  A0, D4
009C=                           MOVE.L  TOS, D0
009E=                           ADDI.L  #40, D0
00A4=                           MOVE.L  D0, -(RP)
00A6=                           SYSTRAP MemHandleNew
00AA=                           ADDQ.L  #4, RP
00AC=                           MOVE.L  A0, -(RP)
00AE=                           SYSTRAP MemHandleLock
00B2=                           ADDQ.L  #4, RP
00B4=                           MOVE.L  DS, D3
00B6=                           MOVE.L  A0, DS
00B8=                           MOVE.L  TOS, -(RP)
00BA=                           MOVE.L  D4, -(RP)
00BC=                           MOVE.L  DS, -(RP)
00BE=                           SYSTRAP MemMove
00C2=                           LEA     12(RP), RP
00C6=                           MOVE.L  D3, A0
00C8=                           MOVE.L  (A0), (DS)
00CA=                           MOVE.L  4(A0), 4(SP)
00D0=                           MOVE.L  A3, -(RP)
00D2=                           SYSTRAP MemHandleUnlock
00D6=                           ADDQ.L  #4, RP
00D8=                           MOVE.L  A3, -(RP)
00DA=                           SYSTRAP DmReleaseResource
00DE=                           ADDQ.L  #4, RP
00E0=                           MOVE.L  RP, 14(DS)
00E4=                           MOVE.L  #2048, -(RP)
00EA=                           SYSTRAP MemHandleNew
00EE=                           ADDQ.L  #4, RP
00F0=                           MOVE.L  A0, -(RP)
00F2=                           SYSTRAP MemHandleLock
00F6=                           ADDQ.L  #4, RP
00F8=                           LEA     2046(A0), SP
00FC=                           MOVE.L  SP, 18(DS)
0100=                           MOVE    #1, -(RP)
0104=                           MOVE.L  #1882481008, -(RP)
010A=                           SYSTRAP DmGet1Resource
010E=                           ADDQ.L  #6, RP
0110=                           MOVE.L  A0, 22(DS)
0114=                           CMPA.L  #0, A0
011A=                           BEQ     $+58            ;= 0156
011C=                           MOVE.L  A0, -(RP)
011E=                           SYSTRAP MemHandleLock
0122=                           ADQ.L   #4, RP
0124=                           MOVE.L  A0, 26(DS)
0128=                           LEA     44(PC), A1      ;= 0156
012C=                           MOVE.L  A1, 30(DS)
0130=                           LEA     32766(A0), CS
0134=                           MOVE.L  CS, 34(DS)
0138=                           MOVE    8(FP), 38(DS)
013E=                           MOVE.L  10(FP), 40(DS)
0144=                           MOVE    14(FP), 44(DS)
014A=                           SYSTRAP FplInit
014E=                           MOVE    12(DS), D0
0152=                           JSR     0(CS, D0)
0156=                 LBL???:   MOVE.L  22(DS), -(RP)
015A=                           SYSTRAP MemHandleUnlock
015E=                           ADDQ.L  #4, RP
0160=                           MOVE.L  22,(DS), -(RP)
0164=                           SYSTRAP DmReleaseResource
0168=                           ADDQ.L  #4, RP
016A=                           MOVE.L  14(DS), RP
016E=                 LBL???:   MOVEM.L (RP)+, D2-D7/A1-A6
0172=                 LBL???:   UNLK    FP
0174=                           RTS

              

Příklad 16.9. Clock.PRC: p4ap 1

0000= 3907                      MOVE    TOS, -(SP)
0002= 3E3C                      MOVE    #948, TOS
0006=                           MOVE    (SP)+, 0(DS,TOS)
000A=                           MOVE    (SP)+, TOS
000C=                           MOVE    TOS, -(SP)
000E=                           MOVE    #946, TOS
0012=                           MOVE    (SP)+, 0(DS,TOS)
0016=                           MOVE    (SP)+, TOS
0018=                           RTS

001A=                           MOVE    TOS, -(SP)
001C=                           MOVEQ   #81, TOS
001E=                           MOVE    TOS, -(SP)
0020=                           MOVEQ   #80, TOS
0022=                           JMP     -32766(CS)

0026=                           MOVE    TOS, -(SP)
0028=                           MOVEQ   #-1, TOS
002A=                           MOVE    TOS, -(SP)
002C=                           MOVE    #952, TOS
0030=                           MOVE    (SP)+, 0(DS,TOS)
0034=                           MOVE    (SP)+, TOS
0036=                           RTS

0038=                           MOVE    TOS, -(SP)
003A=                           MOVE    A0, -(SP)
003C=                           MOVE.L  A0, TOS
003E=                           SWAP    TOS
0040=                           RTS

0042=                           MOVE.L  (SP), D1
0044=                           MOVE.L  D1, 0(DS,TOS)
0048=                           ADDQ.L  #4, SP
004A=                           MOVE    (SP)+, TOS
004C=                           RTS

004E=                           MOVE    TOS, -2(SP)
0052=                           MOVE.L  SP, D0
0054=                           SUBQ.L  #2, D0
0056=                           MOVE    TOS, -(SP)
0058=                           MOVE.L  D0, TOS
005A=                           MOVE    TOS, -(SP)
005C=                           SWAP    TOS
005E=                           RTS


...
...
...


0F9C=                           MOVE    TOS, -(SP)
0F9E=                           MOVE    #10, -(SP)
0FA2=                           MOVE    #0, TOS
0FA6=                           JSR     -32034(CS)
0FAA=                           MOVE    TOS, -(SP)
0FAC=                           MOVEQ   #6, TOS
0FAE=                           MOVE    TOS, -(SP)
0FB0=                           MOVE    2(SP), TOS
0FB4=                           CMP     (SP)+, TOS
0FB6=                           SEQ     TOS 
0FB8=                           EXT     TOS
0FBA=                           MOVE    TOS, D0
0FBC=                           MOVE    (SP)+, TOS
0FBE=                           TST     D0
0FC0=                           BEQ     $+12            ;= 0FCE
0FC4=                           MOVE    (SP)+, TOS
0FC6=                           JSR     -32008(CS)
0FCA=                           BRA     $+76            ;= 1018
0FCE=                           MOVE    TOS, -(SP)
0FD0=                           MOVEQ   #5, TOS
0FD2=                           MOVE    TOS, -(SP)
0FD4=                           MOVE    2(SP), TOS
0FD8=                           CMP     (SP)+, TOS

...

105E=                           JSR     -28818(CS)
1062=                           BRA     $-200           ;= 0F9C
1066=                           RTS

1068=                           JSR     -32494(CS)
106C=                           MOVE    TOS, -(SP)
106E=                           MOVEQ   #100, TOS
1070=                           JSR     -32078(CS)
1074=                           JMP     -28770(CS)