Системски софтвер/К2 2022
Пређи на навигацију
Пређи на претрагу
Други колоквијум 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
Решење
Num | Value [hex] | Size | Type | Bind | Ndx | Name |
---|---|---|---|---|---|---|
0 | 0 | 0 | NOTYP | LOC | UND | |
1 | 0 | 0 | SCTN | LOC | 1 | .text |
2 | 0 | 0 | SCTN | LOC | 2 | .data |
3 | 4 | 0 | NOTYP | GLOB | *ABS* | f |
4 | 0 | 0 | NOTYP | GLOB | UND | a |
5 | A | 0 | NOTYP | LOC | 2 | b |
6 | 6 | 0 | NOTYP | LOC | 2 | c |
7 | 16 | 0 | NOTYP | LOC | 1 | d |
8 | 6 | 0 | NOTYP | LOC | 1 | e |
Offset | Type | Symbol | Addend |
---|---|---|---|
2 | PC32 | a | -4 |
A | 32 | .data | 6 |
12 | PC32 | .data | 2 |
1A | 32 | .data | 6 |
1E | 32 | .text | 6 |
Offset | Type | Symbol | Addend |
---|---|---|---|
6 | 32 | .data | 18 |
Offset | Content | Instruction | |||||||
---|---|---|---|---|---|---|---|---|---|
0000 | FF | 15 | 00 | 00 | 00 | 00 | call a[rip]
| ||
0006 | 48 | 8B | 04 | 25 | 00 | 00 | 00 | 00 | mov rax, c
|
000E | 74 | F6 | jz e
| ||||||
0010 | 0F | 84 | 00 | 00 | 00 | 00 | jz c
| ||
0016 | 48 | 8B | 04 | 25 | 00 | 00 | 00 | 00 | mov rax, b - f
|
001D | 00 | 00 | 00 | 00 | .long e
|
Offset | Content | Instruction | |||||||
---|---|---|---|---|---|---|---|---|---|
0000 | 00 | 00 | 00 | 00 | 00 | 00 | .skip 6
| ||
0006 | 00 | 00 | 00 | 00 | .long b + 0xe
|
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 | 0x6b |
LDA LAB2 - 1
|
1.DAT - 0 = 1.DAT | 0x63 |
ADX * - LAB3
|
1.TXT - 1.TXT = 0 | 0x2 |