Jan Potocki преди 4 години
родител
ревизия
0e26cf92d8
променени са 3 файла, в които са добавени 61 реда и са изтрити 33 реда
  1. 3
    0
      fibb/fibb.s
  2. 3
    0
      fibb/timestamp.s
  3. 55
    33
      lab2/mul.s

+ 3
- 0
fibb/fibb.s Целия файл

@@ -1,6 +1,9 @@
1
+@ Jan Potocki 2020
2
+
1 3
 .global fibb
2 4
 .type fibb, %function
3 5
 
6
+@ Segment kodu
4 7
 .text
5 8
 fibb:
6 9
 push {r4, lr}

+ 3
- 0
fibb/timestamp.s Целия файл

@@ -1,6 +1,9 @@
1
+@ Jan Potocki 2020
2
+
1 3
 .global timestamp
2 4
 .type timestamp, %function
3 5
 
6
+@ Segment kodu
4 7
 .text
5 8
 timestamp:
6 9
 isb

+ 55
- 33
lab2/mul.s Целия файл

@@ -1,10 +1,15 @@
1
+@ Jan Potocki 2020
2
+
3
+@ Definicje numerow funkcji systemowych i ich parametrow
1 4
 SYSEXIT = 1
2 5
 SYSREAD = 3
3 6
 SYSWRITE = 4
4 7
 STDIN = 0
5 8
 STDOUT = 1
6 9
 
10
+@ Stale okreslajace rozmiar przetwarzanych danych
7 11
 num_length = 256
12
+@ ...tego nie ruszac - inaczej stanie sie "cud nad klawiatura" :-D
8 13
 word_length = 4
9 14
 buf_length = num_length * 2
10 15
 num_words = num_length / word_length
@@ -12,92 +17,109 @@ buf_words = buf_length / word_length
12 17
 
13 18
 .global main
14 19
 
20
+@ Segment niezainicjalizowanych danych
15 21
 .bss
16 22
 num1: .space num_length
17 23
 num2: .space num_length
18 24
 result: .space buf_length
19 25
 
26
+@ Segment kodu
20 27
 .text
21 28
 main:
29
+
30
+@ Glowna petla
22 31
 loop:
23
-mov r7, #SYSREAD
24
-mov r0, #STDIN
32
+mov r7, #SYSREAD            @ Wczytanie danych ze standardowego wejscia
33
+mov r0, #STDIN              @ ...funkcja systemowa read
25 34
 ldr r1, =num1
26 35
 mov r2, #buf_length
27 36
 swi 0x0
28 37
 
29
-cmp r0, #buf_length
30
-blt end
38
+@ UWAGA
39
+@ Tutaj wczytane zostana od razu obie liczby
40
+@ num1 i num2 sa w pamieci bezposrednio po sobie...
41
+@ ...i zostala przekazana do funkcji read dlugosc calego bloku
31 42
 
32
-ldr r8, =num1
33
-ldr r9, =num2
34
-ldr r10, =result
43
+cmp r0, #buf_length         @ r0 - liczba wczytanych bajtow
44
+blt end                     @ Jezeli nie ma 512, to dane sie skonczyly
35 45
 
36
-eor r0, r0, r0
46
+ldr r8, =num1               @ r8 - adres pierwszej liczby
47
+ldr r9, =num2               @ r9 - adres drugiej liczby
48
+ldr r10, =result            @ r10 - adres bufora na wynik
37 49
 
38
-eor r4, r4, r4
50
+eor r0, r0, r0              @ r0 - wartosc zero (do zapisu w pamieci)
39 51
 
52
+eor r4, r4, r4              @ r4 - indeks petli zerujacej
53
+
54
+@ Petla zerujaca bufor na wynik
40 55
 zero:
41 56
 str r0, [r10, r4, lsl#2]
42 57
 add r4, r4, #1
43 58
 cmp r4, #buf_words
44 59
 blt zero
45 60
 
46
-eor r4, r4, r4
61
+eor r4, r4, r4              @ r0 - indeks pierwszej petli
47 62
 
63
+@ Mnozenie - petla zewnetrzna
48 64
 loop1:
49
-eor r11, r11, r11
50
-eor r12, r12, r12
65
+eor r2, r2, r2              @ r2 - miejsce na starsza czesc wyniku
51 66
 
52
-eor r2, r2, r2
67
+@ Flagi przeniesienia (potrzebne sa dwie i tego sie nie uprosci)
68
+eor r11, r11, r11           @ r11 - dla biezacego mnozenia (rejestry)
69
+eor r12, r12, r12           @ r12 - dla koncowego wyniku (w pamieci)
53 70
 
54
-eor r5, r5, r5
71
+eor r5, r5, r5              @ r5 - indeks drugiej petli
55 72
 
73
+@ Mnozenie - petla wewnetrzna
56 74
 loop2:
57 75
 ldr r0, [r8, r4, lsl#2]
58 76
 ldr r3, [r9, r5, lsl#2]
59 77
 umull r0, r1, r0, r3
60 78
 
61
-msr apsr_nzcvq, r11
62
-adcs r0, r0, r2
63
-mrs r11, apsr
79
+@ Dodanie starszej czesci wyniku z poprzedniej iteracji
80
+msr apsr_nzcvq, r11         @ Ladowanie flag z r11
81
+adcs r0, r0, r2             @ Dodawanie z przeniesieniem i ustawieniem flag
82
+mrs r11, apsr               @ Zapis rejestru apsr (calego) w r11
83
+
84
+mov r2, r1                  @ Przechowanie starszej czesci wyniku w r2
64 85
 
65
-mov r2, r1
66
-add r6, r4, r5
86
+add r6, r4, r5              @ r6 - indeks wyniku (suma indeksow obu petli)
67 87
 
68
-msr apsr_nzcvq, r12
88
+msr apsr_nzcvq, r12         @ Ladowanie flag z r12
69 89
 ldr r1, [r10, r6, lsl#2]
70
-adcs r1, r0, r1
90
+adcs r1, r0, r1             @ Dodawanie z przeniesieniem i ustawieniem flag
71 91
 str r1, [r10, r6, lsl#2]
72
-mrs r12, apsr
92
+mrs r12, apsr               @ Zapis rejestru apsr (calego) w r12
73 93
 
74 94
 add r5, r5, #1
75 95
 cmp r5, #num_words
76
-blt loop2
96
+blt loop2                   @ Koniec wewnetrznej petli
77 97
 
98
+@ Tutaj musimy sie jeszcze zajac najstarsza czescia wyniku
99
+@ (z ostatniej iteracji petli wewnetrznej)
78 100
 add r6, r6, #1
79 101
 
80
-msr apsr_nzcvq, r11
81
-adc r2, r2, #0
102
+msr apsr_nzcvq, r11         @ Ladowanie flag z r11
103
+adc r2, r2, #0              @ Dodawanie z przeniesieniem bez ustawiania flag
82 104
 
83
-msr apsr_nzcvq, r12
105
+msr apsr_nzcvq, r12         @ Ladowanie flag z r12
84 106
 ldr r1, [r10, r6, lsl#2]
85
-adc r1, r1, r2
107
+adc r1, r1, r2              @ Dodawanie z przeniesieniem bez ustawiania flag
86 108
 str r1, [r10, r6, lsl#2]
87 109
 
88 110
 add r4, r4, #1
89 111
 cmp r4, #num_words
90
-blt loop1
112
+blt loop1                   @ Koniec zewnetrznej petli
91 113
 
92
-mov r7, #SYSWRITE
93
-mov r0, #STDOUT
114
+mov r7, #SYSWRITE           @ Wypisanie wyniku na standardowe wyjscie
115
+mov r0, #STDOUT             @ ...funkcja systemowa write
94 116
 ldr r1, =result
95 117
 mov r2, #buf_length
96 118
 swi 0x0
97 119
 
98
-b loop
120
+b loop                      @ Koniec glownej petli
99 121
 
100 122
 end:
101
-mov r7, #SYSEXIT
102
-mov r0, #0
123
+mov r7, #SYSEXIT            @ Funkcja systemowa exit...
124
+mov r0, #0                  @ ...kod zakonczenia - 0
103 125
 swi 0x0

Loading…
Отказ
Запис