Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
СПО.doc
Скачиваний:
46
Добавлен:
12.03.2015
Размер:
605.18 Кб
Скачать

7. Встроенный в turbo pascal assembler

7.1. Общие положения

Язык Ассемблера предназначен для проектирования системных программ и в настоящее время используется для проектирования части программы или подпрограмм для придания им следующих свойств:

  1. минимизация исполнительного кода

  2. убыстрения процесса выполнения

  3. осуществление связи с периферийными устройствами в режиме реального времени

  4. неявные преобразования между данными

При проектировании программы с использованием Ассемблера следует помнить об ограничениях:

  1. Язык Ассемблера поддерживает тот или иной центральный процессор (встроенный в Turbo Pascal Ассемблер поддерживает только команды процессора 80286).

  2. В отличии от языков высокого уровня, не существует поддержки преобразования данных.

  3. Не существует поддержки отмены содержимого регистров центрального процессора (в основном, регистров флагов).

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

В зависимости от объема исполняемой программы, подпрограммы могут быть короткие (объем меньше одной страницы) и длинные, а также в зависимости от языка высокого уровня, в котором они применяются, подпрограммы могут иметь атрибут Pascal и все другие (такие подпрограммы называются подпрограммами для языка С).

Код Ассемблера в программе на ТР начинается с утверждения asm и заканчивается end;Такой код доступен только в ТР 6 и выше.

Каждая команда в Ассемблере записывается в отдельную строку, а после нее через пробел идут операнды, участвующие в команде. Если таких операндов несколько, то они отделяются друг от друга запятой.

В качестве операнда может участвовать регистр центрального процессора, переменная ТР, константа или выражение. При этом правила применения зависят непосредственно от команды.

7.2. Режимы адресации в Ассемблере

В Ассемблере существует три вида адресации:

  • непосредственная адресация

  • косвенная адресация

  • индексно-косвенная

Непосредственная адресация аналогична оператору присваивания; косвенная – работе с указателем; индексно-косвенная – работе с указателем и некоторым смещением в оперативной памяти.

mov ax,bx Непосредственная адресация. Пересылает содержимое регистра bx в ах. В Ассемблере, как правило, первый операнд участвует в операции и в нее записывается результат.

mov ax,[bx] Косвенная адресация. Пересылает в регистр ах содержимое ячейки по адресу bx.

mov ax,[es:bx+12] Индексно-косвенная адресация. Пересылает в регистр ах содержимое ячейки по адресу: сегмент адреса находится в es, смещение – в bx и прибавление относительно смещения 12.

Когда между операндами в адресации ставится двоеточие, то адрес воспринимается в пределах всей оперативной памяти. Когда между операндами стоит знак “+”, то значение второго операнда должно находится в пределах от –127 до 128.

7.3. Соответствие ординарных типов данных между языками программирования

Тuгbо Раscal

Тuгbо Аssembler

С++

Bуtе

Byte

unsigned сhаг

Сhаг

Byte

Char

Shortint

Byte

unsigned сhаг

bоо1еаn

Byte

Bool

Integer

Word

Int

Word

Word

unsigned int

set of

Word

Enum

Нет

Word

unsigned сhort

Нет

Word

Short

Longint

Dword

Long

Нет

Dword

unsigned long

Pointer

Word

Пеаг*

Pointer

Dword

fаг*

Single

Dword

Float

Real

Fword

Нет

Double

Qword

Нет

Extended

tbyte

long double

String, file [of]

Нет

Нет

Pchar

нет

сhаг*