Guest User

Untitled

a guest
Apr 29th, 2012
31
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ; definice pro nas typ procesoru
  2.     .include "m169def.inc"                     
  3. ; podprogramy pro praci s displejem
  4.     .org 0x1000
  5.     .include "print.inc"
  6. ; Zacatek programu - po resetu
  7.     .org 0
  8.     JMP start
  9.             ; Zacatek programu - hlavni program - zatim neni potreba
  10.             ; .org 0x100
  11. inkrement:
  12.     INC R27
  13.     RET
  14. inkrement2:
  15.     LSL R27
  16.     INC R27
  17.     RET
  18.  
  19. start:
  20.     ; Inicializace zasobniku - kvuli displeji
  21.     LDI R16, 0xFF
  22.     OUT SPL, R16
  23.     LDI R16, 0x04
  24.     OUT SPH, R16
  25.     ; Inicializace displeje
  26.     call init_disp
  27.    
  28.     ; R20 = (4 * R16 + 3 * R17 - R18) / 8
  29.     LDI R16, 224
  30.     LDI R17, 8
  31.     LDI R18, -16
  32.  
  33.     MOV R26, R16 ; Rozdeleni 16-bitoveho vysledku na registry R27 a R26
  34.     LDI R27, 0
  35.     LSL R26 ; Nasobeni 4
  36.     BRCS inkrement
  37.     LSL R26
  38.     BRCS inkrement2
  39.    
  40.     MOV R19, R17 ; Nasobeni 3
  41.     LSL R17
  42.     BRVS chyba ; Detekce preteceni - 'overflow'
  43.     ADD R17, R19
  44.     BRVS chyba
  45.  
  46.    
  47.     ADD R16, R17
  48.     BRVS chyba ; Detekce preteceni - 'overflow'
  49.     SUB R16, R18 ; Odecteni R18
  50.     BRVS chyba
  51.    
  52.     ASR R16 ; Deleni 8. ASR na rozdil od LSR ponecha znamenko
  53.     BRCS chyba ; Detekce prenosu - 'carry'
  54.     ASR R16
  55.     BRCS chyba
  56.     ASR R16
  57.     BRCS chyba
  58.    
  59.     ; Zobrazeni na displej
  60.     MOV R20, R16 ; Zobrazeni vysledku - mam ulozeno napriklad 3C - potrebuji zobrazit 2 znaky
  61.     MOV R18, R16
  62.     LDI R19, 0x0F
  63.     AND R18, R19 ; AND - logicky soucin
  64.     LSR R16
  65.     LSR R16
  66.     LSR R16
  67.     LSR R16
  68.        
  69.     ; Jedna se o cislo
  70.     LDI R19, 48 ; 48 = ASCII hodnota '0'   
  71.     LDI R17, 10
  72.     CP  R16, R17 ; Odecteni - nastaveni 'carry flagu'
  73.     BRLO prevod1
  74.     ; Jedna se o pismeno
  75.     LDI R19, 55
  76.    
  77. prevod1:
  78.     ADD R16, R19 ; Pricteni '0'
  79.     ; Cislo
  80.     LDI R19, 48
  81.     CP R18, R17
  82.     BRLO prevod2
  83.     ; Pismeno
  84.     LDI R19, 55
  85.  
  86. prevod2:
  87.     ADD R18, R19
  88.     LDI R17, 2      ; Pozice znaku
  89.     CALL show_char
  90.     MOV R16, R18
  91.     LDI R17, 3
  92.     CALL show_char
  93.     JMP end
  94.  
  95. chyba:
  96.     LDI R16, 'C'
  97.     LDI R17, 2
  98.     CALL show_char
  99.        
  100.     LDI R16, 'H'
  101.     LDI R17, 3
  102.     CALL show_char
  103.  
  104.     LDI R16, 'Y'
  105.     LDI R17, 4
  106.     CALL show_char
  107.  
  108.     LDI R16, 'B'
  109.     LDI R17, 5
  110.     CALL show_char
  111.  
  112.     LDI R16, 'A'
  113.     LDI R17, 6
  114.     CALL show_char
  115.     JMP end
  116.  
  117. ; Zastaveni programu - nekonecna smycka
  118. end:
  119.     JMP end ; Pripadne 'rjmp PC'
Advertisement
Add Comment
Please, Sign In to add comment