Други колоквијум 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
Решење
.symtab
| 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
|
.rela.text
| Offset |
Type |
Symbol |
Addend
|
| 2 |
PC32 |
a |
-4
|
| A |
32 |
.data |
6
|
| 12 |
PC32 |
.data |
2
|
| 1A |
32 |
.data |
6
|
| 1E |
32 |
.text |
6
|
.rela.data
| Offset |
Type |
Symbol |
Addend
|
| 6 |
32 |
.data |
18
|
.text
| 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
|
.data
| 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
|