Jan Potocki пре 5 година
родитељ
комит
760d5a8617
4 измењених фајлова са 102 додато и 0 уклоњено
  1. 10
    0
      lab1-v3/Makefile
  2. 9
    0
      lab1-v3/README.md
  3. 83
    0
      lab1-v3/hex.s
  4. BIN
      lab1-v3/hex.tar.bz2

+ 10
- 0
lab1-v3/Makefile Прегледај датотеку

@@ -0,0 +1,10 @@
1
+hex: hex.o
2
+	ld hex.o -o hex
3
+
4
+hex.o: hex.s
5
+	as hex.s -o hex.o
6
+	
7
+all: hex
8
+
9
+clean:
10
+	rm hex

+ 9
- 0
lab1-v3/README.md Прегледај датотеку

@@ -0,0 +1,9 @@
1
+Należy napisać program, który będzie:
2
+* 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.
3
+* 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.
4
+
5
+Dla przykładu:
6
+
7
+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.
8
+
9
+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
- 0
lab1-v3/hex.s Прегледај датотеку

@@ -0,0 +1,83 @@
1
+# Jan Potocki 2020
2
+
3
+# Definicje numerow funkcji systemowych i ich parametrow
4
+SYSEXIT64 = 60
5
+SYSREAD = 0
6
+SYSWRITE = 1
7
+STDIN = 0
8
+STDOUT = 1
9
+
10
+.global _start
11
+
12
+# Segment niezainicjalizowanych danych
13
+.bss
14
+
15
+bajt: .space 1				# Bufor na dane wejsciowe (1 bajt)
16
+tekst: .space 3				# Bufor na dane wyjsciowe (3 bajty)
17
+
18
+# Segment kodu
19
+.text
20
+
21
+_start:
22
+mov $tekst, %r8				# r8 - adres bufora wyjsciowego
23
+movb $' ', 2(%r8)			# Wpisanie spacji do bufora wyjsciowego
24
+
25
+# Glowna petla
26
+petla:
27
+mov $SYSREAD, %rax			# Wczytanie danych ze standardowego wejscia
28
+mov $STDIN, %rdi			# ...funkcja systemowa read
29
+mov $bajt, %rsi
30
+mov $1, %rdx
31
+syscall
32
+
33
+cmp $0, %rax				# rax - liczba wczytanych bajtow (zwrocona)
34
+je koniec					# Jezeli 0, to skonczyly sie dane
35
+
36
+movb bajt, %al				# W al zajmiemy sie mlodszymi bitami
37
+mov %al, %bl				# W bl zajmiemy sie starszymi bitami
38
+
39
+shr $4, %al					# Wyizolowanie 4 starszych bitow
40
+cmp $10, %al
41
+jl znakA1					# Cyfry 0-9
42
+jmp znakA2					# Cyfry A-F
43
+
44
+mlodsze:
45
+and $0x0F, %bl				# Wyizolowanie 4 mlodszych bitow
46
+cmp $10, %bl
47
+jl znakB1					# Cyfry 0-9
48
+jmp znakB2					# Cyfry A-F
49
+
50
+zapis:
51
+movb %al, 0(%r8)			# Zapis rezultatow w buforze wyjsciowym
52
+movb %bl, 1(%r8)
53
+
54
+mov $SYSWRITE, %rax			# Wypisanie wyniku na standardowe wyjscie
55
+mov $STDOUT, %rdi			# ...funkcja systemowa write
56
+mov $tekst, %rsi
57
+mov $3, %rdx
58
+syscall
59
+
60
+jmp petla					# Koniec glownej petli
61
+
62
+# Wyjscie z programu
63
+koniec:
64
+mov $SYSEXIT64, %rax
65
+mov $0, %rdi
66
+syscall
67
+
68
+# Konwersja na ASCII
69
+znakA1:
70
+add $48, %al				# 48 -> kod ASCII zera
71
+jmp mlodsze
72
+
73
+znakA2:
74
+add $55, %al				# 55+10=65 -> kod ASCII litery A
75
+jmp mlodsze
76
+
77
+znakB1:
78
+add $48, %bl				# 48 -> kod ASCII zera
79
+jmp zapis
80
+
81
+znakB2:
82
+add $55, %bl				# 55+10=65 -> kod ASCII litery A
83
+jmp zapis

BIN
lab1-v3/hex.tar.bz2 Прегледај датотеку


Loading…
Откажи
Сачувај