Системски софтвер/К2 2022 — разлика између измена

Извор: SI Wiki
Пређи на навигацију Пређи на претрагу
(Нова страница: {{tocright}} '''Други колоквијум 2022.''' одржан је 14. маја. Колоквијум је трајао 90 минута и радио се у в…)
 
Ред 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 формату. Приказати садржај:

  1. табеле симбола
  2. релокационих записа као и
  3. садржај секција.

Користити школски формат наведен у наставку:

ТАБЕЛА СИМБОЛА
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