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

Лабораторная работа №1.

Встроенный ассемблер

Ассемблером называется машинно-зависимый компилятор, преобразующий специ­альным образом составленные текстовые строки в машинные инструкции. Как и лю­бой другой компилятор, ассемблер упрощает разработку программ за счет того, что предоставляет пользователю доступ к кодам машинных инструкций и операндам с помощью символьных имен. Встроенный ассемблер имеется в версиях 6.0 и 7.0 Турбо Паскаля и в руках опытного программиста представляет собой мощный инструмент, позволяющий «выжать» из ПК все возможное.

1.1. Общее описание мп 8086/8088

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

Чтобы использовать средства ассемблера, необходимо ясно представлять себе де­тали архитектуры микропроцессоров Intel 80x86.

1.2. Регистры

В МП 8086/8088 имеется 14 регистров. В функциональном отношении они делятся на группы:

  • регистры общего назначения (АХ, ВХ, СХ, DX); предназначены для хранения операндов и выполнения основных команд; любой из них может использовать­ся как совокупность двух независящих друг от друга 8-разрядных регистров: старшего байта регистра (АН, ВН, СH, DH) и младшего байта (AL, BL, CL, DL); например, АХ состоит из АН и AL;

  • сегментные регистры (CS, DS, SS, ES); используются для указания сегмента при адресации памяти;

  • регистры-указатели (SP, BP, IP); используются для указания смещения при ад­ресации памяти;

  • индексные регистры (SI, DI); применяются для индексной адресации;

  • регистр флагов; используется для хранения признаков состояния процессора.

Внутри одной и той же функциональной группы регистры используются различ­ным образом. Ниже описывается специфика использования регистров.

Регистр АХ. Является основным сумматором. Используется во всех арифметиче­ских операциях (сложить, умножить и т.п.). Только с помощью АХ и его полурегистров AH и AL возможен обмен данными с портами ввода/вывода.

Регистр ВХ. Используется как сумматор в арифметических операциях, а также как базовый регистр при индексной адресации.

Регистр СХ. В основном используется как счетчик при выполнении операций по­вторения и сдвига. Может также участвовать в арифметических операциях.

Регистр DX. Используется как регистр данных в операциях ввода/вывода, а также как сумматор при обработке длинных целых чисел (32-разрядных).

ОБЗОР ПРИЕМОВ ПРОГРАММИРОВАНИЯ НА АССЕМБЛЕРЕ

1.1. Программирование арифметических выражений.

Программа на языке Ассемблер состоит из операторов (команд) . Каждый оператор занимает одну строку. Общий вид оператора:

<оператор> <операнд1>,<операнд2>

Некоторые операторы могут содержать только один из операндов.

Пример наиболее часто встречающейся команды:

Mov ax,x

Команда копирует содержимое переменной (операнда) x в регистр процессора ax. Соответствует команде в языке Паскаль:

Ax:=x;

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

mov x,y { в Паскале x:=y}

где x и y – переменные, недопустима. Следует писать:

mov ax,x

mov y,ax

В данном курсе рассмотрена арифметика для целых двоичных чисел. В табл. 1 представлены основные команды для выполнения арифметических операции, а в табл. 2 — дополни тельные .

Таблица 1 Двоичная арифметика.

Обозначения, используемые в таблице :

on 1, on 2, on — операнды, т.е. содержимое, стоящее по первому (оп 1), вто­рому (оп 2) адресам или единственный операнд (on); al, ah, ax, dx, eax, edx — регистры, при­чем eax, edx допустимы только для процессоров 80386 и выше.

Как видно из табл. 1, в командах умножения и деления задается один операнд, второй сомножитель или делимое в фиксированных регистрах. Ко­манда умножения возвращает результат в два раза длиннее сомножителей, команда деления требует, чтобы делимое было в два раза длиннее делителя. Ре­зультатом выполнения команды деления являются частное (регистр, запи­санный первым в таблице) и остаток (регистр, запи­санный вторым).

Если перед кодом стоит буква i (imul, idiv, i-integer-целый), операции выполняются с учетом знаков исходных данных, в противном случае — без­знаковые операции.

ПРИМЕР: Вычислить значение выражения x=y+(z-u*v)/w, если исход­ные данные занимают одно слово.

Program asm_prg;

Var

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]