Программирование на языке высокого уровня Лекция 4. Низкоуровневое программирование. Интерпретация, компиляция, компоновка. Кафедра АСОИУ ОмГТУ, 2012 Богатов.

Презентация:



Advertisements
Похожие презентации
Урок повторения по теме: «Сила». Задание 1 Задание 2.
Advertisements

ВЫПОЛНЕНИЕ АЛГОРИТМОВ КОМПЬЮТЕРОМ. Алгоритм, записанный на «понятном» компьютеру языке программирования, называется программой. Программа данные, предназначенные.
1. Определить последовательность проезда перекрестка

Лекция 1 Раздел 1 Windows Phone Темы раздела 3 Windows Phone Устройство на платформе Windows Phone 4.
Урок математики во 2 классе. Тема. Прием умножения с помощью сложения. Учитель Коробкова А. И. Учитель Коробкова А. И.

Маршрутный лист «Числа до 100» ? ? ?
Этапы решения задач на компьютере 1. Постановка задачи. 2. Построение математической модели. 3. Составление алгоритма. 4. Запись алгоритма на языке программирования(кодирование)
Таблица умножения на 8. Разработан: Бычкуновой О.В. г.Красноярск год.
1 Программирование на языке Паскаль Тема 1. Введение Кулебякин В.В.
1 Программирование на языке Паскаль Тема 1. Введение.
(урок математики). Назовите числа, которые делятся на 3: (3, 6, 9, 12, 15, 18, 21, 24, 27, 30) Назовите числа, которые делятся на 4: (4, 8,12, 16, 20,
ПРЕЗЕНТАЦИЯ НА ТЕМУ: ПРЕЗЕНТАЦИЯ НА ТЕМУ: ВИДЫ ТРАНСЛЯЦИИ Составил: Ревнивцев М.В Преподаватель: Кленина В.И.
1 Трудные случаи таблицы умножения и деления 2 Приношу свои извинения, но придётся начать заново!

Тренировочное тестирование-2008 Ответы к заданиям КИМ Часть I.

1 Программирование на языке Паскаль Тема 1. Введение.
Тема 1. Введение 1.
Транксрипт:

Программирование на языке высокого уровня Лекция 4. Низкоуровневое программирование. Интерпретация, компиляция, компоновка. Кафедра АСОИУ ОмГТУ, 2012 Богатов Р.Н.

Изобретём велосипед компьютер! Примитивная машина: Ячейки памяти нумеруются 0, 1, … Ячейка может содержать любое число (в т.ч. адрес ячейки памяти) Процессор имеет один регистр R (ячейку для хранения промежуточных результатов) Примитивный низкоуровневый язык: Пример программы: ИнструкцияДействие move Запись значения add Сложение sub Вычитание mult Умножение div Деление loop Цикл haltОстанов gotoПереход callВызов процедуры retВозврат из процедуры // ввод значения с клавиатуры callInput_Register // регистр содержит радиус moveRadius, R multR, Radius multR, // регистр содержит площадь круга // вывод содержимого регистра на экран callPrint_Register halt

Машинные коды Пример программы, понятной процессору: ИнструкцияДействиеСинтаксисМашинный код move Запись значения move R, число move R, [адрес] move [адрес], число move [адрес], R move [адрес], [адрес] 4, число 5, адрес 6, адрес, число 7, адрес 8, адрес, адрес add Сложение add R, число add R, [адрес] add [адрес], число add [адрес], R add [адрес], [адрес] 9, число 10, адрес 11, адрес, число 12, адрес 13, адрес, адрес sub Вычитание sub R, число sub R, [адрес] sub [адрес], число sub [адрес], R sub [адрес], [адрес] 14, число 15, адрес 16, адрес, число 17, адрес 18, адрес, адрес mult Умножение …19-23 div Деление …24-28 loop Цикл loop R, [адрес] loop [адрес], [адрес] 29, адрес 30, адрес, адрес haltОстановhalt0 gotoПереходgoto [адрес]1, адрес callВызов процедурыcall [адрес]2, адрес retВозврат из процедурыret3 Адрес ………… 35……………

Ещё пример: числа Фибоначчи Схема алгоритма и его реализация (программа): Нет Начало N > 0 f 1 = 1; f 2 = 1 N N = N – 2 f = f 1 + f 2 f 1 = f 2 ; f 2 = f N = N – 1 f Конец Да // ввод N с клавиатуры callInput_Register // регистр содержит N moveN, R // инициализация movef1, 1 movef2, 1 // основная часть subN, 2 moveR, f2 A: // начало цикла addR, f1 movef1, f2 movef2, R loopN, A // конец цикла // регистр содержит искомое, // выводим его на экран callPrint_Register halt

Компиляция… 1. Проверка синтаксиса 2. Трансляция в машинные коды АдресСодержимое ячеекИсходные инструкции 02, [Input_Register] call Input_Register 27, [N] move N, R 46, [f1], 1 move f1, 1 76, [f2], 1 move f2, , [N], 2 sub N, 2 135, [f2] move R, f2 1510, [f1] A: add R, f1 178, [f1], [f2] move f1, f2 207, [f2] move f2, R 2230, [N], [A] loop N, A 252, [Print_Register] call Print_Register 270 halt 280 N 290 f1 300 f2 АдресСодержимое ячеекИсходные инструкции 02, [Input_Register] call Input_Register 27, 28 move N, R 46, 29, 1 move f1, 1 76, 30, 1 move f2, , 28, 2 sub N, 2 135, 30 move R, f , 29 A: add R, f1 178, 29, 30 move f1, f2 207, 30 move f2, R 2230, 28, 15 loop N, A 252, [Print_Register] call Print_Register 270 halt 28 0 N 29 0 f1 300 f2

Компоновка (связывание)… 1. К программе добавляется код процедур (компоновка) 2. Производится связывание адресов АдресСодержимое ячеекИсходные инструкции 0 2, [Input_Register] call Input_Register 2 7, 28 move N, R 4 6, 29, 1 move f1, 1 7 6, 30, 1 move f2, , 28, 2 sub N, , 30 move R, f2 1510, 29 A: add R, f1 178, 29, 30 move f1, f2 207, 30 move f2, R 2230, 28, 15 loop N, A 25 2, [Print_Register] call Print_Register 27 0 halt 28 0 N 29 0 f1 300 f2 0… … (коды процедуры Input_Register) …… … 263 ret 0… … (коды процедуры Print_Register) …… … 153 ret 31 … … (коды процедуры Input_Register) …… … 573 ret 58 … … (коды процедуры Print_Register) …… … 733 ret АдресСодержимое ячеекИсходные инструкции 0 2, 31 call Input_Register 2 7, 28 move N, R 4 6, 29, 1 move f1, 1 7 6, 30, 1 move f2, , 28, 2 sub N, , 30 move R, f2 1510, 29 A: add R, f1 178, 29, 30 move f1, f2 207, 30 move f2, R 2230, 28, 15 loop N, A 252, 58 call Print_Register 27 0 halt 28 0 N 29 0 f1 300 f2 Адрес ………… 35…………… 40…………… 45…………… 50…………… 55……3…… 60…………… 65…………… 70………3

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

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

Адрес ………… 35…………… Эволюция «уровня» языка программирования // прячем окружность movehide_x, c_x movehide_y, c_y movehide_R, c_R callCircle_Hide // меняем радиус и цвет addc_R, 10 movec_Color, 3 // рисуем окружность moveshow_x, c_x moveshow_y, c_y moveshow_R, c_R moveshow_C, c_Color callCircle_Show // прячем окружность movehide_x, c_x movehide_y, c_y movehide_R, c_R callCircle_Hide // меняем радиус и цвет addc_R, 10 movec_Color, 3 // рисуем окружность moveshow_x, c_x moveshow_y, c_y moveshow_R, c_R moveshow_C, c_Color callCircle_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); 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(); c.R += SizeDelta.Small; c_Color = Colors.Red; c.Show(); Кружочек, стань чуть больше и красным Кружочек, стань чуть больше и красным c: Hide Grow Small Color Red Show c: Hide Grow Small Color Red Show Кружочек: Спрятаться Увеличиться чуть-чуть Цвет красный Показаться Кружочек: Спрятаться Увеличиться чуть-чуть Цвет красный Показаться Машинные коды Си (без структур) C++, Java, C# и т.п. LasyTalk 0.99beta Домохозяйка 2.0 Фантаст RC Ассемблер

Домашнее задание