소스 검색

Wydanie R2020.06.1

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

+ 3
- 0
fibb/timestamp.s 파일 보기

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

+ 55
- 33
lab2/mul.s 파일 보기

1
+@ Jan Potocki 2020
2
+
3
+@ Definicje numerow funkcji systemowych i ich parametrow
1
 SYSEXIT = 1
4
 SYSEXIT = 1
2
 SYSREAD = 3
5
 SYSREAD = 3
3
 SYSWRITE = 4
6
 SYSWRITE = 4
4
 STDIN = 0
7
 STDIN = 0
5
 STDOUT = 1
8
 STDOUT = 1
6
 
9
 
10
+@ Stale okreslajace rozmiar przetwarzanych danych
7
 num_length = 256
11
 num_length = 256
12
+@ ...tego nie ruszac - inaczej stanie sie "cud nad klawiatura" :-D
8
 word_length = 4
13
 word_length = 4
9
 buf_length = num_length * 2
14
 buf_length = num_length * 2
10
 num_words = num_length / word_length
15
 num_words = num_length / word_length
12
 
17
 
13
 .global main
18
 .global main
14
 
19
 
20
+@ Segment niezainicjalizowanych danych
15
 .bss
21
 .bss
16
 num1: .space num_length
22
 num1: .space num_length
17
 num2: .space num_length
23
 num2: .space num_length
18
 result: .space buf_length
24
 result: .space buf_length
19
 
25
 
26
+@ Segment kodu
20
 .text
27
 .text
21
 main:
28
 main:
29
+
30
+@ Glowna petla
22
 loop:
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
 ldr r1, =num1
34
 ldr r1, =num1
26
 mov r2, #buf_length
35
 mov r2, #buf_length
27
 swi 0x0
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
 zero:
55
 zero:
41
 str r0, [r10, r4, lsl#2]
56
 str r0, [r10, r4, lsl#2]
42
 add r4, r4, #1
57
 add r4, r4, #1
43
 cmp r4, #buf_words
58
 cmp r4, #buf_words
44
 blt zero
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
 loop1:
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
 loop2:
74
 loop2:
57
 ldr r0, [r8, r4, lsl#2]
75
 ldr r0, [r8, r4, lsl#2]
58
 ldr r3, [r9, r5, lsl#2]
76
 ldr r3, [r9, r5, lsl#2]
59
 umull r0, r1, r0, r3
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
 ldr r1, [r10, r6, lsl#2]
89
 ldr r1, [r10, r6, lsl#2]
70
-adcs r1, r0, r1
90
+adcs r1, r0, r1             @ Dodawanie z przeniesieniem i ustawieniem flag
71
 str r1, [r10, r6, lsl#2]
91
 str r1, [r10, r6, lsl#2]
72
-mrs r12, apsr
92
+mrs r12, apsr               @ Zapis rejestru apsr (calego) w r12
73
 
93
 
74
 add r5, r5, #1
94
 add r5, r5, #1
75
 cmp r5, #num_words
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
 add r6, r6, #1
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
 ldr r1, [r10, r6, lsl#2]
106
 ldr r1, [r10, r6, lsl#2]
85
-adc r1, r1, r2
107
+adc r1, r1, r2              @ Dodawanie z przeniesieniem bez ustawiania flag
86
 str r1, [r10, r6, lsl#2]
108
 str r1, [r10, r6, lsl#2]
87
 
109
 
88
 add r4, r4, #1
110
 add r4, r4, #1
89
 cmp r4, #num_words
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
 ldr r1, =result
116
 ldr r1, =result
95
 mov r2, #buf_length
117
 mov r2, #buf_length
96
 swi 0x0
118
 swi 0x0
97
 
119
 
98
-b loop
120
+b loop                      @ Koniec glownej petli
99
 
121
 
100
 end:
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
 swi 0x0
125
 swi 0x0

Loading…
취소
저장