2010-03-07

Моторолла 68000

Эхэн үеийн Макуудад ажилладаг байсан Моторолла 68000 процессерийн ассемблэр хэл дээр програм бичлээ. 16 бит, тэмдэгтгүй тоог анхны тоо эсэхийг шалгадаг програм; яарч хийсэн учир илүү хурдан ажиллууладаг, цөөхөн регистр ашигладаг болгож амжсангүй.
     ORG $0500
num   DC.W  83

     ORG $0600
res   DS.B   1


     ORG  $1000
start MOVEA.L      #$4000,SP

     MOVE.B       #2, (res)
     PEA       num         
     JSR        chkpri     
     MOVE.B   D7, res

     MOVEA.L    #$4000,SP

     MOVE.B #9, D0
     TRAP #15

     ORG  $2000
chkpri MOVE.W  6(A7),A1
     MOVE.W  #2,D3
     MOVE.W  (A1),D4
back  MOVE.L  D4,D2
     DIVU.W  D3,D2
     ADD.W  #1,D3
     CMP.W  D4,D3
     BEQ  pri
     SWAP  D2
     CMPI.W  #0,D2
     BNE  back
     MOVEQ  #0,D7
     RTS
pri   MOVEQ  #1,D7
     RTS


     END  START
chkpri рутиныг ашиглаад массиваас анхны тоонуудыг ялгаж өөр массивт хуулдаг програм:
   ORG $0502
from   DC.W 87,92,7,84,65,32,11,83,103,287
N    DC.W  10

   ORG $0602 
to   DS.W N
  

     
       
   ORG     $1000
 
start   MOVEA.L     #$4000,SP
  
  
   LEA  from,A2 
   LEA  to,A3 
   MOVE.W  N,D5   
   MULU.W  #2,D5   
        
   MOVE.W  #0,D1   
back1   PEA  0(A2,D1.W)  
   ADDI.W  #2,D1   
   JSR  chkpri   
   CMPI.W  #1,D7   
   BEQ  cpypri
   CMP.W  D1,D5   
   BNE  back1
                       LEA  to,A3 
   MOVE.W  D6,(A3)   
   JMP  out   
   
cpypri          ADDI.W  #1,D6   
   ADD.W  #2,A3   
   MOVE.W  D4,(A3)   
   JMP  back1

out