Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Информатика Учебник НГТУ Семестр 2.docx
Скачиваний:
87
Добавлен:
27.03.2015
Размер:
4.01 Mб
Скачать

29.2. Низкоуровневые языки программирования

29.1. Что такое язык программирования?

29.3. Языки высокого уровня

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

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

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

Язык ассемблера позволяет программисту пользоваться текстовыми мнемоническими (то есть легко запоминаемыми человеком) кодами, по своему усмотрению присваивать символические имена регистрам компьютера и памяти, а также задавать удобные для себя способы адресации. Кроме того, он позволяет использовать различные системы счисления (например, десятичную или шестнадцатеричную) для представления числовых констант, использовать в программе комментарии и др. Программы, написанные на языке ассемблера, требуют значительно меньшего объема памяти и времени выполнения. Знание программистом языка ассемблера и машинного кода дает ему понимание архитектуры машины.

Для того, чтобы написать программу на языке ассемблера для конкретного компьютера, необходимо знать его архитектуру.

Самыми рутинными операциями при программировании в кодах были:

  • формирование кода команды;

  • вычисление физических адресов ячеек с данными;

  • вычисление смещений для команд условного и безусловного ветвлений.

Для первой проблемы было найдено следующее решение: для каждой машинной команды были подобраны краткие мнемоники, отражающие ее суть. Например, для команды пересылки данных - MOV, для команды сложения - ADD и т.п. Такие мнемоники намного легче запомнить, чем двоичные, восьмеричные или шестнадцатеричные коды команды; кроме того, их не в пример легче читать, а это тоже немаловажно при отладке программы или ее изменении. Вторая и третья проблемы также были решены без особых усилий: вместо использования реальных адресов в тексте программы располагались символические метки, а программа, генерирующая машинный код, вычисляла фактическое расположение ячеек в оперативной памяти и поставляла его в код.

В качестве примера приведем программу на языке ассемблера для IBM PC. Программа вычисляет значение a = b + c для целых a, b и c:

 

.MODEL

SMALL

Директива   .MODEL   задает механизм распределения памяти под данные и команды.

 

.DATA

 

Директива   .DATA   определяет начало участка программы с данными.

b

DW

5

Директивы   DW  задают типы переменных и их значения.

c

DW

3

a

DW

?

 

.CODE

 

Директива   .CODE   определяет начало участка программы с командами.

begin

MOV

AX,@DATA

Команды   MOV   AX,@DATA   и   MOV     DS,AX записывают адрес сегмента данных в регистр   DS   (Data Segment)

 

MOV

DS,AX

 

MOV

AX,B

Для вычисления a используются команды MOV  AX, B,  ADD  AX,C   и   MOV  A,AX.

 

ADD

AX,C

 

MOV

A,AX

 

MOV

AH,4CH

 

 

INT

21H

 

 

END

begin

В директиве   END   задана метка первой выполняемой инструкции программы - begin.

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

29.1. Что такое язык программирования?

29.3. Языки высокого уровня