4. Plan
1. Po co programować w asemblerze?
2. Potok przetwarzania procesora
3. Wstęp do kryptografii komputerowej
4. AES128-CBC + SHA256 na ARMv8
5. Plan
1. Po co programować w asemblerze?
2. Potok przetwarzania procesora
3. Wstęp do kryptografii komputerowej
4. AES128-CBC + SHA256 na ARMv8
6.
7.
8. Typowe aplikacje dla asemblera
● Computational kernels (80% czasu spędzanego w jednej funkcji)
○ Procedury numeryczne
○ Funkcje kryptograficzne
● Obsługa sprzętu
○ Bootloadery
○ Fragmenty Jądra OS
■ przełączanie kontekstu
■ obsługa przerwań
9. Plan
1. Po co programować w asemblerze?
2. Potok przetwarzania procesora
3. Wstęp do kryptografii komputerowej
4. AES128-CBC + SHA256 na ARMv8
10.
11. Kod maszynowy
while (--i)
a[i] = a[i] * 5 + 2
LOOP:
ADD Y, -1
CMP Y, a
BE END
LOAD X, [Y]
MUL X, 5
ADD X, 2
STORE X, [Y]
B LOOP
END:
Instrukcja Latencja Zajętość
LOAD 2 1
ADD 1 1
MUL 4 4
STORE 2 1
12. Potok dla ciała pętli
Cykl 1 2 3 4 5 6 7 8 9 10 11 12
LOAD X, [Y+5] F D ADD M W
MUL X,5 F D - MUL MUL MUL MUL
ADD X,2 F - D - - ADD M W
STORE X, [Y+5] F - - - D ADD M W
13. Rozwinięta pętla
while (i-=2) {
a[i] = a[i] * 5 + 2
a[i-1] = a[i-1] * 5 + 2
}
LOOP:
ADD Y, -2
CMP Y, a
BE END
LOAD X, [Y]
LOAD Z, [Y-1]
MUL X, 5
MUL Z, 5
ADD X, 2
ADD Z, 2
STORE X, [Y]
STORE Z, [Y-1]
B LOOP
END:
14. Potok dla ciała pętli
Cykl 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
LOAD X, [Y] F D ADD M W
LOAD Z, [Y-1] F D ADD M W
MUL X, 5 F D MUL MUL MUL MUL M W
MUL Z, 5 F D - - - MUL MUL MUL MUL M W
ADD X, 2 F - - - D ADD M W
ADD Z, 2 F - - - - - - D ADD M W
STORE X, [Y] F - - - - - - D ADD M W
STORE Z, [Y-1] F - - - - - - D ADD M W
15. Wnioski z przetwarzania
potokowego
● Pętla zwykła
12 cykli na iterację + narzut na pętlę
● Pętla rozwinięta 2x
18 cykli na iterację + narzut pętli = 9 cykli/iterację + narzut / 2
● Procesory Out-of-Order częściowo potrafią same rozwijać pętle
optymalizacja „za darmo” przez sam procesor!
16. Plan
1. Po co programować w asemblerze?
2. Potok przetwarzania procesora
3. Wstęp do kryptografii komputerowej
4. Implementacja AES128-CBC + SHA256
17.
18.
19. SHA 256
● Funkcja skrótu używana do autentykacji kryptogramów
● Wejście: N Bloków 64B
● Wynik - 256 bitów = 32B skrótu
20.
21. Plan
1. Po co programować w asemblerze?
2. Potok przetwarzania procesora
3. Wstęp do kryptografii komputerowej
4. AES128-CBC + SHA256 na ARMv8