Compare commits

..

2 Commits

Author SHA1 Message Date
Jan Potocki 760d5a8617 Wydanie R2020.04.1 2020-04-04 13:15:45 +02:00
Jan Potocki afa69c2377 Aktualizacja README (semestr letni 2020) 2020-04-04 13:15:23 +02:00
5 changed files with 109 additions and 3 deletions
+7 -3
View File
@@ -1,16 +1,20 @@
# AK2 - lab 2019 # AK2 - lab 2019+
Trochę różnych programów napisanych przy pomocy z rozwiązywaniem zadań od mgr Aleksandry Postawki na zajęciach laboratoryjnych z Architektury komputerów 2, w formie materiałów dydaktycznych kod szczegółowo opisany w komentarzach. Trochę różnych programów napisanych przy pomocy z rozwiązywaniem zadań od mgr Aleksandry Postawki, mgra Tomasza Serafina, dra Tadeusza Tomczaka (i innych) na zajęciach laboratoryjnych z Architektury komputerów 2, w formie materiałów dydaktycznych kod szczegółowo opisany w komentarzach.
Repozytorium będzie na bieżąco aktualizowane. Repozytorium powstało w 2019 i będzie na bieżąco aktualizowane.
Przydatne linki: Przydatne linki:
* Intel 64 and IA-32 Architectures Software Developers Manual (Combined Volumes) opis architektury procesorów x86 i spis wszystkich rozkazów asemblera: * Intel 64 and IA-32 Architectures Software Developers Manual (Combined Volumes) opis architektury procesorów x86 i spis wszystkich rozkazów asemblera:
https://software.intel.com/sites/default/files/managed/39/c5/325462-sdm-vol-1-2abcd-3abcd.pdf https://software.intel.com/sites/default/files/managed/39/c5/325462-sdm-vol-1-2abcd-3abcd.pdf
* Linux System Call Table spis funkcji systemowych Linuxa dla 32- i 64-bitowej wersji x86 w przejrzystej formie:
https://chromium.googlesource.com/chromiumos/docs/+/master/constants/syscalls.md
* System V Application Binary Interface AMD64 opis 64-bitowej konwencji wywołań x86 używanej w systemach z rodziny Linux: * System V Application Binary Interface AMD64 opis 64-bitowej konwencji wywołań x86 używanej w systemach z rodziny Linux:
https://www.uclibc.org/docs/psABI-x86_64.pdf https://www.uclibc.org/docs/psABI-x86_64.pdf
* System V Application Binary Interface i386 opis 32-bitowej konwencji wywołań x86 używanej w systemach z rodziny Linux: * System V Application Binary Interface i386 opis 32-bitowej konwencji wywołań x86 używanej w systemach z rodziny Linux:
https://www.uclibc.org/docs/psABI-i386.pdf https://www.uclibc.org/docs/psABI-i386.pdf
* Using as dokumentacja GNU Assembler, opis składni: * Using as dokumentacja GNU Assembler, opis składni:
https://sourceware.org/binutils/docs/as/ https://sourceware.org/binutils/docs/as/
* Wikibooks Asembler x86 (wersja dla składni AT&T):
https://pl.wikibooks.org/wiki/Asembler_x86/Spis_GNU_AS
* C++ reference/C reference dokumentacja języków C/C++ (przydatne przy łączeniu kod w C i asemblerze): * C++ reference/C reference dokumentacja języków C/C++ (przydatne przy łączeniu kod w C i asemblerze):
https://en.cppreference.com/w/ https://en.cppreference.com/w/
* Opis podstawowych typów w językach C/C++ i ich długości w różnych modelach danych: * Opis podstawowych typów w językach C/C++ i ich długości w różnych modelach danych:
+10
View File
@@ -0,0 +1,10 @@
hex: hex.o
ld hex.o -o hex
hex.o: hex.s
as hex.s -o hex.o
all: hex
clean:
rm hex
+9
View File
@@ -0,0 +1,9 @@
Należy napisać program, który będzie:
* Odczytywał ciąg bajtów ze standardowego strumienia wejściowego. Długość ciągu bajtów może być dowolna. Kombinacje bitów w bajtach także mogą być dowolne.
* Dla każdego odczytanego bajtu należy wypisać na standardowy strumień wyjściowy 3 bajty, z których ostatni będzie kodem ASCII spacji, a dwa pierwsze będą kodami ASCII cyfr szesnastkowych. Te cyfry mają utworzyć taką reprezentację w systemie naturalnym szesnastkowym, dla której odpowiadająca jej reprezentacja w systemie naturalnym dwójkowym (który jest systemem o bazie skojarzonej z systemem N16) będzie miała taki sam układ bitów, jak bajt odczytany ze standardowego strumienia wejściowego.
Dla przykładu:
Jeśli odczytany bajt byłby kodem ASCII znaku '0', to zawierałby bity "00110000" (bit najbardziej znaczący z lewej strony). Dla takiego odczytanego bajtu należy na standardowe wyjście wypisać kolejno bajty o układach bitów "00110011", "00110000", "00100000", czyli kody ASCII znaków '3', '0' i ' ', za pomocą których można zapisać reprezentację szesnastkową 30_N16 odpowiadającą reprezentacji binarnej 00110000_NB.
Przykładowe dane wejściowe i wymagane odpowiedzi są dostępne pod adresem: http://zak.iiar.pwr.edu.pl/materials/architektura/laboratorium%20AK2/Dane/hex.tar.bz2
+83
View File
@@ -0,0 +1,83 @@
# Jan Potocki 2020
# Definicje numerow funkcji systemowych i ich parametrow
SYSEXIT64 = 60
SYSREAD = 0
SYSWRITE = 1
STDIN = 0
STDOUT = 1
.global _start
# Segment niezainicjalizowanych danych
.bss
bajt: .space 1 # Bufor na dane wejsciowe (1 bajt)
tekst: .space 3 # Bufor na dane wyjsciowe (3 bajty)
# Segment kodu
.text
_start:
mov $tekst, %r8 # r8 - adres bufora wyjsciowego
movb $' ', 2(%r8) # Wpisanie spacji do bufora wyjsciowego
# Glowna petla
petla:
mov $SYSREAD, %rax # Wczytanie danych ze standardowego wejscia
mov $STDIN, %rdi # ...funkcja systemowa read
mov $bajt, %rsi
mov $1, %rdx
syscall
cmp $0, %rax # rax - liczba wczytanych bajtow (zwrocona)
je koniec # Jezeli 0, to skonczyly sie dane
movb bajt, %al # W al zajmiemy sie mlodszymi bitami
mov %al, %bl # W bl zajmiemy sie starszymi bitami
shr $4, %al # Wyizolowanie 4 starszych bitow
cmp $10, %al
jl znakA1 # Cyfry 0-9
jmp znakA2 # Cyfry A-F
mlodsze:
and $0x0F, %bl # Wyizolowanie 4 mlodszych bitow
cmp $10, %bl
jl znakB1 # Cyfry 0-9
jmp znakB2 # Cyfry A-F
zapis:
movb %al, 0(%r8) # Zapis rezultatow w buforze wyjsciowym
movb %bl, 1(%r8)
mov $SYSWRITE, %rax # Wypisanie wyniku na standardowe wyjscie
mov $STDOUT, %rdi # ...funkcja systemowa write
mov $tekst, %rsi
mov $3, %rdx
syscall
jmp petla # Koniec glownej petli
# Wyjscie z programu
koniec:
mov $SYSEXIT64, %rax
mov $0, %rdi
syscall
# Konwersja na ASCII
znakA1:
add $48, %al # 48 -> kod ASCII zera
jmp mlodsze
znakA2:
add $55, %al # 55+10=65 -> kod ASCII litery A
jmp mlodsze
znakB1:
add $48, %bl # 48 -> kod ASCII zera
jmp zapis
znakB2:
add $55, %bl # 55+10=65 -> kod ASCII litery A
jmp zapis
Binary file not shown.