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
  in   temp, SP 
62
  add temp, temp1  ; vorher muß aber noch irgendwie 4 in temp1
63
  st   z, temp
64
  pop temp 
65
  PUSH   R20 
66
  PUSH   R21 
67
  LD   R20, Z 
68
  LD  R21, -Z 
69
  ADD   R20, R21 
70
  ST  Z, R20 
71
  POP   R21 
72
  POP  R20 
73
RET