stacktst.asm


1
.include "tn26def.inc"
2
3
.org 0x000        ; Programm kommt an Anfang von PROM
4
5
.def temp = r16
6
.def temp1 = r17      ; temporäre Register definieren
7
.def ergebnis = r18
8
9
.set Frequenzbyte = 0xc0    ; Stellt 8Mhz ein
10
11
    rjmp reset     ; Reset handler
12
    reti       ; IRQ0 handler
13
    reti        ; Pin change handler
14
    reti      ; Timer1 compare match 1A
15
    reti       ; Timer1 compare match 1B
16
    reti      ; Timer1 overflow handler
17
    reti         ; Timer0 overflow handler
18
    reti       ; USI Start handler
19
    reti       ; USI Overflow handler
20
    reti      ; EEPROM Ready handler
21
    reti       ; Analog Comparator handler
22
    reti       ; ADC Conversion Handler
23
24
25
reset:   ldi temp1, RAMEND   ; Init aus Datenblatt
26
    out SP, temp1
27
    
28
    ldi temp1, Frequenzbyte  ; 8Mhz einstellen
29
    out OSCCAL, temp1  
30
  
31
32
MAIN: 
33
  LDI Temp, $10 
34
  PUSH Temp 
35
  LDI Temp, $20 
36
  PUSH Temp 
37
  RCALL Addiere  ;ursprüglich nur call
38
  POP Ergebnis 
39
  POP Temp 
40
41
42
;original Subrout:
43
44
;Addiere: 
45
;  MOV   ZLow, SPL  ;!!!
46
;  ADD   ZLow, 4   ;!!!
47
;  PUSH   R20 
48
;  PUSH   R21 
49
;  LD   R20, Z 
50
;  LD  R21, -Z 
51
;  ADD   R20, R21 
52
;  ST  Z, R20 
53
;  POP   R21 
54
;  POP  R20 
55
;RET 
56
57
; mit veränderungen, da einige fehler gemeldet wurden:
58
59
Addiere: 
60
  push temp
61
  push temp1
62
  ldi temp1, 6
63
  in   temp, SP 
64
  add temp, temp1  
65
  st z, temp    ;?Z-register verändert sich aber nicht
66
  pop temp1
67
  pop temp 
68
  PUSH   R20 
69
  PUSH   R21 
70
  LD   R20, Z     ; nichts kommt in r20
71
  LD  R21, -Z     ; ebenso nix in r21 nur Z-register -1
72
  ADD   R20, R21 
73
  ST  Z, R20 
74
  POP   R21 
75
  POP  R20 
76
RET