Системски софтвер/К2 2022 — разлика између измена
Пређи на навигацију
Пређи на претрагу
(Нова страница: {{tocright}} '''Други колоквијум 2022.''' одржан је 14. маја. Колоквијум је трајао 90 минута и радио се у в…) |
(→2. задатак: rešenje?) |
||
| Ред 44: | Ред 44: | ||
== 2. задатак == | == 2. задатак == | ||
=== Поставка === | |||
Одредити вредност при обради од стране асемблера за хипотетичку машину (уколико вредност није позната написати знак питања) и индекс класификације за сваки израз у оквиру изворног асемблерског кода датог у наставку. | Одредити вредност при обради од стране асемблера за хипотетичку машину (уколико вредност није позната написати знак питања) и индекс класификације за сваки израз у оквиру изворног асемблерског кода датог у наставку. | ||
<syntaxhighlight lang="asm"> | <syntaxhighlight lang="asm"> | ||
| Ред 59: | Ред 60: | ||
END | END | ||
</syntaxhighlight> | </syntaxhighlight> | ||
=== Решење === | |||
{| class="wikitable" | |||
|- | |||
! Наредба<br /> | |||
! Индекс класификације | |||
! Вредност<br /> | |||
|- | |||
| <code>DC LAB1</code> | |||
| 1.unique() | |||
| ? | |||
|- | |||
| <code>DC 7 + LAB2</code> | |||
| 0 + 1.DAT() = 1.DAT() | |||
| 0x6e | |||
|- | |||
| <code>LDA LAB2 - 1</code> | |||
| 1.DAT() - 0 = 1.DAT() | |||
| 0x66 | |||
|- | |||
| <code>ADX * - LAB3</code> | |||
| 1.TXT() - 1.TXT() = 0 | |||
| 0x65 | |||
|} | |||
[[Категорија:Системски софтвер]] | [[Категорија:Системски софтвер]] | ||
[[Категорија:Рокови]] | [[Категорија:Рокови]] | ||
Верзија на датум 15. мај 2022. у 18:53
Други колоквијум 2022. одржан је 14. маја. Колоквијум је трајао 90 минута и радио се у вежбанкама. Оба задатка су вредела 10 поена.
1. задатак
Дати код на асемблеру за amd64 преводи се двопролазним асемблером. Резултат превођења је предмети програм по ELF формату. Приказати садржај:
- табеле симбола
- релокационих записа као и
- садржај секција.
Користити школски формат наведен у наставку:
| Num | Value | Size | Type | Bind | Ndx | Name |
|---|
| Offset | Type | Symbol | Addend |
|---|
При решавању усвојити следеће (хексадецималне вредности унутар заграда након податка о величини инструкције јесу први бајтови инструкције који представљају њен операциони код):
- Инструкција
callкористи PC релативно адресирање. Величина инструкције је шест бајтова (0xff 0x15). - Инструкција
movкористи апсолутно адресирање. Величина инструкције је осам бајтова (0x48 0x8b 0x04 0x25). - Инструкција
jzкористи PC релативно адресирање. Величина инструкције је два бајтова (0x74) или шест бајтова (0x0f 0x84) зависно од величине помераја.
.intel_syntax noprefix
.extern a
.global f
.equ f, b-c
.text
call a[rip]
e: mov rax, c
jz e
jz c
d: mov rax, b - f
.long e
.data
.skip 6
c: .long b + 0xe
b:
.end
2. задатак
Поставка
Одредити вредност при обради од стране асемблера за хипотетичку машину (уколико вредност није позната написати знак питања) и индекс класификације за сваки израз у оквиру изворног асемблерског кода датог у наставку.
BEG
USE LAB1
ORG 0x64
SCT DAT
LAB2 DC LAB1
DC 7 + LAB2
SCT TXT
LAB3 LDA LAB2 - 1
ADX * - LAB3
OTI
HLT
END
Решење
| Наредба |
Индекс класификације | Вредност |
|---|---|---|
DC LAB1
|
1.unique() | ? |
DC 7 + LAB2
|
0 + 1.DAT() = 1.DAT() | 0x6e |
LDA LAB2 - 1
|
1.DAT() - 0 = 1.DAT() | 0x66 |
ADX * - LAB3
|
1.TXT() - 1.TXT() = 0 | 0x65 |