1 | AREA MyData, DATA, align = 2
|
2 | GLOBAL MeinNumFeld
|
3 |
|
4 |
|
5 | MeinNumFeld DCD 0x22, 2_00111110, -52, 78, 0x60000000, 0x50000000
|
6 |
|
7 | MeinWordFeld DCW 0x1234, 0x5678, 0x9abc, 0xdef0
|
8 |
|
9 |
|
10 | MeinTextFeld DCB "ABab0123"
|
11 |
|
12 |
|
13 | MeinByteFeld DCB 0xef, 0xdc, 0xba, 0x98
|
14 |
|
15 | MeinBlock SPACE 0x20
|
16 |
|
17 | ;********************************************
|
18 | ; Code section, aligned on 8-byte boundery
|
19 | ;********************************************
|
20 |
|
21 | AREA MyCode, CODE, readonly, align = 2
|
22 |
|
23 | ;--------------------------------------------
|
24 | ; main subroutine
|
25 | ;--------------------------------------------
|
26 | GLOBAL main
|
27 |
|
28 |
|
29 | main PROC
|
30 |
|
31 |
|
32 | ; ----------------------------------------------------------------------------------------
|
33 | ; Laden von Konstanten in Register
|
34 | ; ----------------------------------------------------------------------------------------
|
35 | mov R0, #0x12 ;Anw-01 : Konstanten 0...255 (*4, *16, *64, ....)
|
36 |
|
37 | mov R1, #-2 ;Anw-02 : negative Konstanten 0...255 (*4, *16, *64, ....)
|
38 |
|
39 | ldr R2,=0xfe543210 ;Anw-03: beliebige 32-bit-Konstanten (Pseudobefehl !!!)
|
40 |
|
41 |
|
42 | ; -----------------------------------------------------------------------------------------
|
43 | ; Zugriff auf Variablen
|
44 | ; -----------------------------------------------------------------------------------------
|
45 |
|
46 | ; --- Byte-, Halbword- und Wortzugriffe ---
|
47 | ldr r0, =MeinByteFeld ; Anw-04: Lade die Startadresse des Bytefeldes
|
48 | ldrb r1, [r0] ; Anw-05: Achtung: auch bei Byte- und Halbwort-Zugriffen
|
49 | ldrh r2, [r0] ; Anw-06 wird immer das ganze Register verändert !!!!!
|
50 | ldr r3, [r0] ; Anw-07
|
51 |
|
52 | ; --- einfache Feldzugriffe ---
|
53 | ldr r4, =MeinWordFeld ; Anw-08: Lade die Adresse des Wortfeldes "MeinWortFeld"
|
54 | ldr r5, [r4] ; Anw-09
|
55 | ldr r6, [r4, #4] ; Anw-10: konstanter Offset
|
56 |
|
57 | ; --- Variablen (Worte) speichern ---
|
58 | ldr r0, =0x123456ab ; Anw-11: Lade die Konstante (>255)
|
59 | ldr r1, =MeinBlock ; Anw-12: Lade die Anfangsadresse von "MeinBlock"
|
60 | str r0, [r1] ; Anw-13 (word-Befehl) Speicheradresse muss aligned sein !
|
61 | str r0, [r1, #4] ; Anw-14 (word-Befehl) Speicheradresse muss aligned sein !
|
62 |
|
63 | ; --- Variablen (Byte) speichern ---
|
64 | mov r2, #0x1a ; Anw-15
|
65 | strb r2, [r1, #9] ; Anw-16 (byte-Befehl)
|
66 | strb r2, [r1, #10] ; Anw-17 (byte-Befehl)
|
67 |
|
68 | ; -------------------------------------------------------------------------------------------
|
69 | ; Ganzzahl-Addition und Flags
|
70 | ; -------------------------------------------------------------------------------------------
|
71 |
|
72 | ldr r0,=MeinNumFeld ; Anw-18
|
73 | ldr r1, [r0] ; Anw-19
|
74 | ldr r2, [r0, #4] ; Anw-20
|
75 |
|
76 | adds r3, r1, r2 ; Anw-21
|
77 |
|
78 | ; ---------------------------------------------
|
79 | ldr r0,=MeinNumFeld+8 ; Anw-22
|
80 | ldr r1, [r0] ; Anw-23
|
81 | ldr r2, [r0, #4] ; Anw-24
|
82 |
|
83 | adds r3, r1, r2 ; Anw-25
|
84 |
|
85 | ; ---------------------------------------------
|
86 | ldr r0,=MeinNumFeld+16 ; Anw-26
|
87 | ldr r1, [r0] ; Anw-27
|
88 | ldr r2, [r0, #4] ; Anw-28
|
89 |
|
90 | adds r3, r1, r2 ; Anw-29
|
91 |
|
92 |
|
93 | ; ------------------------------------------------------------------------------------------
|
94 | ; Indirekte Adressierungsarten mit update
|
95 | ; ------------------------------------------------------------------------------------------
|
96 |
|
97 | ldr r0,=MeinTextFeld ; Anw-30
|
98 | ldrb r1, [r0, #1]! ; Anw-31
|
99 | ldrb r1, [r0, #1]! ; Anw-32
|
100 |
|
101 | ldr r0,=MeinWordFeld ; Anw-33
|
102 | ldr r2, [r0], #4 ; Anw-34
|
103 | ldr r2, [r0], #4 ; Anw-35
|
104 |
|
105 |
|
106 |
|
107 |
|
108 |
|
109 |
|
110 | forever b forever ; nowhere to retun if main ends
|
111 | ENDP
|
112 |
|
113 | ALIGN 4
|
114 | END
|