Drugi kolokvijum 2022. održan je 14. maja. Kolokvijum je trajao 90 minuta i radio se u vežbankama. Oba zadatka su vredela 10 poena.
1. zadatak
Postavka
Dati kod na asembleru za amd64 prevodi se dvoprolaznim asemblerom. Rezultat prevođenja je predmeti program po ELF formatu. Prikazati sadržaj:
- tabele simbola
- relokacionih zapisa kao i
- sadržaj sekcija.
Koristiti školski format naveden u nastavku:
TABELA SIMBOLA
| Num |
Value |
Size |
Type |
Bind |
Ndx |
Name
|
RELOKACIONI ZAPISI
| Offset |
Type |
Symbol |
Addend
|
Pri rešavanju usvojiti sledeće (heksadecimalne vrednosti unutar zagrada nakon podatka o veličini instrukcije jesu prvi bajtovi instrukcije koji predstavljaju njen operacioni kod):
- Instrukcija
call koristi PC relativno adresiranje. Veličina instrukcije je šest bajtova (0xff 0x15).
- Instrukcija
mov koristi apsolutno adresiranje. Veličina instrukcije je osam bajtova (0x48 0x8b 0x04 0x25).
- Instrukcija
jz koristi PC relativno adresiranje. Veličina instrukcije je dva bajta (0x74) ili šest bajtova (0x0f 0x84) zavisno od veličine pomeraja.
.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
Rešenje
.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
|
| 000D |
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. zadatak
Postavka
Odrediti vrednost pri obradi od strane asemblera za hipotetičku mašinu (ukoliko vrednost nije poznata napisati znak pitanja) i indeks klasifikacije za svaki izraz u okviru izvornog asemblerskog koda datog u nastavku.
BEG
USE LAB1
ORG 0x64
SCT DAT
LAB2 DC LAB1
DC 7 + LAB2
SCT TXT
LAB3 LDA LAB2 - 1
ADX * - LAB3
OTI
HLT
END
Rešenje
| Naredba
|
Indeks klasifikacije
|
Vrednost
|
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
|