Низкоуровневое программирование. Интерпретация, компиляция, компоновка

Содержание

Слайд 2

Изобретём велосипед компьютер! Примитивная машина: Ячейки памяти нумеруются 0, 1, …

Изобретём велосипед компьютер!

Примитивная машина:
Ячейки памяти нумеруются 0, 1, …
Ячейка может содержать

любое число (в т.ч. адрес ячейки памяти)
Процессор имеет один регистр R (ячейку для хранения промежуточных результатов)
Примитивный низкоуровневый язык:
Пример программы:

// ввод значения с клавиатуры
call Input_Register
// регистр содержит радиус
move Radius, R
mult R, Radius
mult R, 3.1415
// регистр содержит площадь круга
// вывод содержимого регистра на экран
call Print_Register
halt

Слайд 3

Машинные коды Пример программы, понятной процессору:

Машинные коды

Пример программы, понятной процессору:

Слайд 4

Ещё пример: числа Фибоначчи Схема алгоритма и его реализация (программа): //

Ещё пример: числа Фибоначчи

Схема алгоритма и его реализация (программа):

// ввод N

с клавиатуры
call Input_Register
// регистр содержит N
move N, R
// инициализация
move f1, 1
move f2, 1
// основная часть
sub N, 2
move R, f2
A: // начало цикла
add R, f1
move f1, f2
move f2, R
loop N, A // конец цикла
// регистр содержит искомое,
// выводим его на экран
call Print_Register
halt
Слайд 5

Компиляция… Проверка синтаксиса Трансляция в машинные коды call Input_Register move N,

Компиляция…

Проверка синтаксиса
Трансляция в машинные коды

call Input_Register
move N, R
move f1, 1
move f2, 1
sub N, 2
move R, f2
A: //

начало цикла
add R, f1
move f1, f2
move f2, R
loop N, A // конец цикла
call Print_Register
halt
Слайд 6

Компоновка (связывание)… К программе добавляется код процедур (компоновка) Производится связывание адресов

Компоновка (связывание)…

К программе добавляется код процедур (компоновка)
Производится связывание адресов

Слайд 7

Интерпретация. Трансляция. Компиляция Трансляция программы — преобразование программы, представленной на одном

Интерпретация. Трансляция. Компиляция

Трансляция программы — преобразование программы, представленной на одном из

языков программирования, в равнозначную программу на другом языке.
Компиляция — трансляция программы в машинно-ориентированный язык.
Интерпретация — пооператорная обработка и выполнение исходной программы (без формирования кодов для последующего исполнения).
Слайд 8

Компоновка Исполнимый модуль (от англ. executable) — файл, содержащий машинные коды,

Компоновка

Исполнимый модуль (от англ. executable) — файл, содержащий машинные коды, готовые

для исполнения в определённой операционной системе.
Объектный модуль (англ. object file) — файл с промежуточным представлением отдельного модуля программы, полученный в результате работы компилятора.
Компоновщик (также редактор связей, линкер — от англ. link editor, linker) — программа, которая производит компоновку: принимает на вход один или несколько объектных модулей и собирает по ним исполнимый модуль.
Слайд 9

Эволюция «уровня» языка программирования // прячем окружность move hide_x, c_x move

Эволюция «уровня» языка программирования

// прячем окружность
move hide_x, c_x
move hide_y, c_y
move hide_R, c_R
call Circle_Hide
// меняем радиус

и цвет
add c_R, 10
move c_Color, 3
// рисуем окружность
move show_x, c_x
move show_y, c_y
move show_R, c_R
move show_C, c_Color
call Circle_Show

Circle_Hide(c_x, c_y, c_R);
c_R = c_R + 10;
c_Color = 3;
Circle_Show(c_x, c_y, c_R, c_Color);

c.Hide();
c.R += SizeDelta.Small;
c_Color = Colors.Red;
c.Show();

Кружочек,
стань чуть больше
и красным

c:
Hide
Grow Small
Color Red
Show

Кружочек:
Спрятаться
Увеличиться чуть-чуть
Цвет красный
Показаться

Машинные коды

Си (без структур)

C++, Java, C# и т.п.

LasyTalk 0.99beta

Домохозяйка 2.0

Фантаст 47.0.2RC

Ассемблер