Skip to content

Commit

Permalink
some answers
Browse files Browse the repository at this point in the history
  • Loading branch information
KaluginaMarina authored Sep 27, 2018
1 parent 75db875 commit a33d763
Showing 1 changed file with 53 additions and 15 deletions.
68 changes: 53 additions & 15 deletions System-Programming-Languages/rubez_train_2017.md
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,58 @@ call и ret

Перезапишутся rcx и r11. (вроде)

# Что делает компоновщик?

Собирает релоцируемые объектные файлы в один исполняемый.

Для этого компановщик выполняет __релокацию__ (привязывание адресов к различным частям программы, чтобы ссылки на эти части были правильными) и разрешение символов (расстановка правильных адресов символов).

# Что такое big endian/little endian?

Big endian - порядок байт многобайтового числа, когда число храниться в прямом порядке (от старших байт)

Little endian - в обратном порядке (от младших).

# Что такое GDT?

GDT (Global Descriptor Table, глобальная таблица дескрипторов) — служебная структура данных в архитектуре x86, определяющая глобальные (общие для всех задач) сегменты.

# Что такое дескриптор?

Дескриптор - абстрактный индикатор, используемый для доступа к файлу (или другому ресурсу ввода/вывода).

`0 - stdin`
`1 - stdout`
`2 - stderr`

# Перечислите 8-разрядные регистры общего назначения

`rax` - "аккумулятор"

`rbx` - "base register" (ранее использовался для базовой адресации)

`rsx` - для организации циклов

`rdx` - хранит данные при операциях ввода-вывода

`rsp` - адрес вершины стека

`rbp` - адрес начала текущаего стекового фрейма

`rsi` - адрес начала строки-источника

`rdi` - адрес начала строки-получателя

# Что делает команда movq?

копирует 64 разряда из операнда-источника в операнд-назначение

# Какие логические области памяти обычно содержит любая программа?

Область с данными (чтение, запись) и область с кодом (выполнение)

(сегмент .data и .text)

# Что такое канонический адрес?

# В скомпилированных программах в месте, где логично было бы очищать регистр rax, вместо этого используется команда xor eax, eax. Почему xor и почему только половина, eax?
Expand All @@ -95,8 +147,6 @@ call и ret

# Напишите функцию на ассемблере, которая примет две строки и перемешает их содержимое. Например, “abc” и “def” => “adbecf”.

# Какие логические области памяти обычно содержит любая программа?

# Напишите функцию на ассемблере, которая примет строку и подсчитает количество пропусков в ней, состоящих из пробелов или табуляции (вперемешку).

# Можно ли написать программу, где свойство локальности будет нарушено?
Expand All @@ -119,26 +169,14 @@ call и ret

# Напишите функцию на ассемблере, которая примет строку, указатель на буфер в памяти и символ. Она заполнит буфер содержимым строки, пропуская символы, соответствующие её третьему аргументу. Например, для строки “abc” и символа “b” результат “ac”.

# Что делает компоновщик?

# Что такое big endian/little endian?

# Что такое GDT?

# Подробно опишите алгоритм работы инструкции syscall.

# Нарисуйте и закодируйте на ассемблере конечный автомат, который проверяет входную строчку и отвечает, содержит ли она ровно одно слово и одно число. Слова состоят только из символов [a-z], разделены только одинарными пробелами. Число целое. Макрос get_symbol используется, чтобы положить в ch следующий символ.

# Напишите функцию на ассемблере, которая примет строку, указатель на буфер в памяти и символ. Она заполнит буфер содержимым строки, пропуская символы, соответствующие её третьему аргументу. Например, для строки “abc” и символа “b” результат “ac”.

# Что такое дескриптор?

# Напишите функцию на ассемблере, которая примет строку и подсчитает количество пропусков в ней, состоящих из пробелов или табуляции (вперемешку).

# Перечислите 8-разрядные регистры общего назначения

# Для чего разные DPL в дескрипторах сегментов данных и кода?

# Что делает команда movq?
# Для чего разные DPL в дескрипторах сегментов данных и кода

# Напишите функцию на ассемблере, которая примет строку и два символа. Она должна произвести текстовую замену первого символа на второй.

0 comments on commit a33d763

Please sign in to comment.