Системски софтвер/К2 2022 — разлика између измена
Пређи на навигацију
Пређи на претрагу
м (→Решење: Ovde treba 0x16) |
(→Решење) |
||
| Ред 98: | Ред 98: | ||
| 0006 || 48 || 8B || 04 || 25 || 00 || 00 || 00 || 00 || <syntaxhighlight lang="asm" inline>mov rax, c</syntaxhighlight> | | 0006 || 48 || 8B || 04 || 25 || 00 || 00 || 00 || 00 || <syntaxhighlight lang="asm" inline>mov rax, c</syntaxhighlight> | ||
|- | |- | ||
| | | 000E || 74 || F6 || || || || || || || <syntaxhighlight lang="asm" inline>jz e</syntaxhighlight> | ||
|- | |- | ||
| 0010 || 0F || 84 || 00 || 00 || 00 || 00 || || || <syntaxhighlight lang="asm" inline>jz c</syntaxhighlight> | | 0010 || 0F || 84 || 00 || 00 || 00 || 00 || || || <syntaxhighlight lang="asm" inline>jz c</syntaxhighlight> | ||
Тренутна верзија на датум 27. август 2024. у 18:58
Други колоквијум 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 |