Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Лекция 1. Основные элементы языка программирования Си

С.

FC 00 20.

Процессор, обнаружив команду, у которой код операции равен 00 и А1= FC, прерывает работу и ждет действий пользователя. Пользователь набирает на клавиатуре вводимое число. Это число заносится в ячейку FC и, одновременно, высвечивается на дисплее. Затем пользователь нажимает клавишу <ВВОД>. Процессор выполняет команду пересылки из ячейки FC в ячейку 20. Ввод завершился, процессор переходит к выполнению следующей команды.

 

Запишем команды ввода и вывода в общем виде:

 

00 FC - A3 - ввод числа в ячейку А3
00 А1 - FC - вывод числа из ячейки А1

 

 

А теперь запишем программу вычисления выражения (А+В)С в окончательном виде. Договоримся, что любая программа будет занимать ячейки в начале памяти. Первая команда всегда находится в ячейке 00.

 

 

Таблица 2

Адрес КОП А1 А2 A3 Пояснения
00   FC     ввод А
04   FC     ввод В
08   FC     ввод С
0C       2C A+B
10   2C   2C (A+B)C
14   2C   FC вывод результата
18         Стоп

 

В ячейке 18 находится команда останова с кодом операции 77 - остановка работы машины. Содержимое адресной части в этой команде не имеет значения.

Предположим, что по этой программе мы хотим вычислить выражение при А=26, В=74, С=3.

Процессор начинает исполнять программу с команды, находящейся в ячейке 00. В нашей программе это команда ввода числа А. ЭВМ останавливается и ждет действий пользователя. Пользователь набирает на клавиатуре шестнадцатеричный код числа 26:

00 00 00 1А <ВВОД>.

После нажатия клавиши <ВВОД> число 26 введено в ячейку 20. Следующая команда требует ввода значения В. Пользователь вводит:

00 00 00 4А <ВВОД>.

 

Последним вводится значение С:

00 00 00 03 <ВВОД>.

 

Следующие команды программы выполняются автоматически. После выполнения команды вывода (ячейка 14) происходит остановка. Она нужна для того, чтобы пользователь успел разглядеть результат на дисплее, если в программе несколько команд вывода. Для введенных значений исходных данных результат на дисплее будет таким:

 

Программа продолжит исполнение после нажатия клавиши <ВВОД>. Работа программы завершится по команде останова.

Полученный результат - это шестнадцатеричная форма внутреннего представления. 12С16 = 30010

Мы видим, что числа вводятся и выводятся в шестнадцатеричном виде. Родной язык компьютера - это язык машинных команд и двоичных чисел. Автоматический перевод чисел из двоичной в десятичную систему и обратно производится с помощью специальных программ перевода, а это уже программный сервис.

 

А теперь рассмотрим, как процессор выполняет машинные команды.

 

Работа процессора

Процессор управляет работой ЭВМ по заданной программе и выполняет операции обработки информации.

Для выполнения первой задачи в состав процессора входит управляющее устройство (УУ). Вычислительным инструментом процессора является арифметико-логическое устройство (АЛУ). Третьей составляющей процессора является регистровая память. Схема состава процессора показана на рис.2.

 

 

Пусть процессор содержит всего шесть регистров.

 

 

АЛУ арифметико-логическое устройство   УУ Устройство управления
Регистры процессора РК - регистр команд
РР - регистр результата
РОН1 - регистр общего назначения
РОН2 - регистр общего назначения
 
СчК   W  
           

Рис.2

 

СчК - счетчик команд; в нем последовательно меняются адреса исполняемых команд;
РК - регистр команд, в который при выполнении программы помещается текущая выполняемая команда;
РР - регистр результата, в него первоначально помещается результат выполненной операции;
РОН1 и РОН2 - регистры общего назначения, в которые при выполнении команды помещаются операнды (слагаемые, сомножители и т.д.);  
W - регистр-признак знака результата, фиксирует знак результата очередной операции: если результат операции положительный (> 0), то W=1, иначе W=0.

 

Регистры РК, РР, РОН1 и РОН2 - 32-разрядные. Их размер равен размеру машинного слова и совпадает с размером ячейки. Счетчик команд (СчК) и регистр-признак знака результата (W) имеют размер в 1 байт.

Исполнение программы начинается с того, что в СчК (счетчик команд) заносится 00 - адрес первой команды. Затем вступает в работу УУ (управляющее устройство). Оно организует запись в РК содержимого ячейки, адрес которой указан в СчК. По коду операции УУ определяет, не останов ли это. Если "да", то работа прекращается, иначе содержимое СчК увеличивается на 4, тем самым подготавливается выполнение следующей команды.

Управляющее устройство продолжает анализировать код операции, в зависимости от которого выбирается тот или иной вариант действия. АЛУ (арифметико-логическое устройство) работает при выполнении арифметических операции, после занесения операндов в регистры общего назначения РОН1 и РОН2. Результат операции заносится в РР (регистр результата). Затем УУ переписывает результат в ячейку памяти и переходит к выполнению следующей команды.

Рассмотрим подробнее этот процесс на примере выполнения арифметических операций в составленной нами программе. К моменту выполнения команды сложения Счетчик Команд (СчК) содержит адрес 0C.

 

1 шаг.

 

Адрес Содержимое ячеек памяти   Регистры Содержимое регистров Комментарий
        СчК OC        
        РК       Текущая команда
  РОН1          
        1A   РОН1          
        4A   PP          
            W          
2C                      

 

2 шаг.

Адрес Память         Регистры         Комментарий
        СчК          
        РК        
  РОН1       1A 26 (десят.)
        1A   РОН1       4A 74 (десят.)
        4A   PP       2C 3 (десят.)
            W         Результат>0
2C                      

 

После этого процессор начинает выполнение команды, расположенной по адресу 10 (возвращается к выполнению первого шага).

Программа заканчивает работу, когда УУ обнаружит код останова 77.

Первым средством автоматизации написания программ на машинном языке стала система программирования на автокоде.

Автокод

Автокод -машинно - ориентированный язык программирования, предложения которого по своей структуре подобны командам и обрабатываемым данным конкретного машинного языка.

На языке машинных команд данные (переменные и константы) обозначаются адресами ячеек. На Автокоде константы записываются в виде десятичных чисел, заключенных в угловые скобки.

Например:

<5>, <-12>, <3245>.

 

Переменные обозначаются символическими именами - идентификаторами. Система команд Автокода ориентирована на систему команд процессора нашего учебного компьютера. Иначе говоря, каждой команде ЯМК соответствует команда Автокода.

Формат любой трехместной (арифметической) команды следующий:

 

<мнемокод> <1-й операнд>, <2-й операнд>, <результат>

 

Операнды могут быть переменными или константами, результат - всегда переменная. Мнемокод - это мнемоническое (буквенное) отображение кода операции. Соответствие между кодами операций на языке машинных команд и мнемокодами Автокода показаны в следующей таблице.

 

 

Таблица 5

КОП Мнемокод Операция  
  MOV Пересылка move
  ADD Сложение add
  SUB Вычитание subtract
  MUL Умножение multiply
  DIV Деление нацело divide
  MOD Остаток от деления modulo operation
0A IFGO Условный переход if..go
0B GO Безусловный переход go
  STOP Останов программы stop
FF NOP Пустая операция no operation

 

Вот несколько примеров команд на Автокоде (справа записаны соответствующие команды на Алгоритмическом языке):

ADD A,B,C C:=A + B;
MUL C,<3>,D D:=3*C;
MOV D,X X:=D;


Линейные программы (в нашем случае) состоят из команд арифметических операций, пересылки, ввода и вывода. На языке машинных команд ввод и вывод программируются командой пересылки значений через буферную ячейку FC. Однако в программах на Автокоде прямые адреса ячеек памяти не используются. Чтобы не нарушать этот принцип, определим специальные команды ввода и вывода:

INPUT <переменная> - команда ввода;
OUTPUT <переменная> - команда вывода.

 

Например,

 

INPUT A - ввод значения переменной A;
OUTPUT X - вывод на табло значения переменной X.

 

Для знакомства с программированием на Автокоде рассмотрим несколько задач.

 

Этапы работы над программой на Автокоде следующие:

1. Составление программы

2. Трансляция и синтаксическая отладка

3. Тестирование и отладка алгоритма

 

По сравнению с ЯМК, исчез этап распределения памяти. Зато появились своеобразные этапы 2 и 3, с которыми подробно разберемся ниже.

 

Задача 1.

 

Определить, к какому веку новой эры (V) относится данный год (G).

 

Дано: Расчетная формула:
Найти: V = (G + 99) div 100

 

Эта задача решается с помощью линейного алгоритма. Программа на Автокоде расположена в левом столбце таблицы 6. О содержании правой половины таблицы речь пойдет позже.

 

Таблица 6.    
Автокод   Результат трансляции

 

Команды Пояснения Адрес КОП A1 A2 A3
INPUT G ввод G 00   FC    
ADD G, <99>, G G:=G+99 04        
DIV G,<100>,V V:=G div 100 08     1C  
OUTPUT V вывод V 0C       FC
STOP останов 10        
  14 переменная G
18 константа 99
константа 100
20 переменная V

 

 

Трансляция с Автокода

Будем считать, считать, что наш учебный компьютер имеет постоянную память - ПЗУ, где хранится транслятор вместе со всеми другими компонентами системы программирования на Автокоде.

Транслятор с Автокода - это программа, для которой исходной информацией является текст на Автокоде.

 

А теперь опишем алгоритм, по которому работает транслятор с Автокода после завершения синтаксической отладки.

  • Распределение памяти под программу. Поскольку каждая команда Автокода переводится в одну команду машинного языка и программа располагается, начиная с нулевой ячейки, то легко определить размер программы (адрес ее последней команды).
  • Распределение памяти под данные. Сразу вслед за последней командой программы помещаются переменные и константы в той последовательности, в которой они встречаются в программе на Автокоде.
  • Перекодировка команд. Каждая команда на Автокоде переводится в соответствующую команду на машинном языке. При этом мнемонический код заменяется на код операции, а переменные и константы - на их машинные адреса. Константы переводятся в двоичную систему и записываются в отведенные для них ячейки.

 

По-прежнему это пересылка через буферную ячейку FC. Исполнение программы, полученной в результате трансляции, будет происходить так же, как и раньше при работе на ЯМК. Ввод исходных данных и вывод результатов происходит в шестнадцатеричной форме.

Для того чтобы при работе на Автокоде числа вводились и выводились в десятичной системе счисления, нужно иначе организовать трансляцию команд INPUT, OUTPUT. Команда INPUT должна транслироваться в процедуру перевода введенного числа из десятичной системы в двоичную; команда OUTPUT - в процедуру перевода из двоичной системы в десятичную и вывода результата.

Память распределяется транслятором "плотно". Ячейки под данные выделяются сразу же после последней команды программы. Таким образом, между данными и программой не остается пустых ячеек

 

А теперь рассмотрим программу, написанную на языке высокого уровня, например Си.

 

Дано: Расчетная формула:
Найти: V = (G + 99) div 100

 

Таблица 8
  1-й этап 2-й этап трансляции

 

Си АВТОКОД ЯМК  
int main (): INPUT G 00   FC      
{ ADD G,<99>,V 04       1C  
int v, g; DIV V,<100>,V 08   1C   1C  
cin >>g; OUTPUT V 0C   1C   FC  
v=(g+99)/100.; STOP 10          
cout << v:   14         g
}   18          
    1C         v
    20          

 

<== предыдущая лекция | следующая лекция ==>
С 00 FC | Введение. Историческая справка
Поделиться с друзьями:


Дата добавления: 2014-01-11; Просмотров: 484; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.068 сек.