Программирование на Ассемблер к.т.н., доц. Красов А.В. Лекция 2

Содержание

Слайд 2

Синтаксис ассемблера

На рис. 2.1 представлены синтаксические диаграммы ассемблера.

Оператор директивы

Оператор
команды

Оператор макрокоманды

Комментарий

;

а)

Директива

Операнд N

Операнд

Синтаксис ассемблера На рис. 2.1 представлены синтаксические диаграммы ассемблера. Оператор директивы Оператор
1

Имя
метки

Комментарий

:

,

. . .

б)

Код операции

Имя метки

Операнд 1

Операнд N

Комментарий

;

:

,

в)

. . .

Рис. 2.1. Синтаксические диаграммы языка ассемблера
а – предложение ассемблера; б – директива; в – команды и макрокоманды

Слайд 3

Набор регистров

Синтаксические диаграммы задают все правила формирования программы на языке ассемблера.
Непосредственные

Набор регистров Синтаксические диаграммы задают все правила формирования программы на языке ассемблера.
операнды
Непосредственным операндом называется число, строка или выражение имеющие фиксированное значение, оно может быть заданно конкретным значением в поле операнда или определено через equ или ‘=’. Например:
r equ 13
e = r - 2
mov al, r
mov al, 13
значения 13, r, e, в приведенном фрагменте являются непосредственными операндами.
Адресные операнды
Адресные операнды задают физическое расположение операнда в памяти. Синтаксическая диаграмма адресных операндов представлена на рис. 2.2.

Имя сегмента

cs

fs

:

Имя группы

Целое число

Абсолютное выражение

ds

ss

es

gs

Абсолютное имя

Рис. 2.2. Синтаксическая диаграмма адресных операндов

Например:
mov ax, ss:0013h
приведенный оператор записывает слово из регистра ax по адресу, старшая часть которого хранится в регистре ss, а младшая имеет значение 0013h.

Слайд 4

Перемещаемые операнды
Перемещаемые операнды являются именами переменных или меткам инструкций. В отличие от

Перемещаемые операнды Перемещаемые операнды являются именами переменных или меткам инструкций. В отличие
адресных операндов их значение изменяется в зависимости от значения сегментной составляющей адреса.
Например:
data segment
prim dw 25 dup (0)
. . .
code segment
. . .
lea si, prim
конкретное физическое значение физического адреса переменной prim будет известно только после загрузки программы.
Счетчик адреса
Счетчик адреса позволяет задавать относительные адреса. Для обозначения текущего значения счетчика адреса используется символ $.
Например:
jmp $+3
cld
mov al, 2
в приведенном фрагменте управление передается на оператор mov, минуя оператор cld, имеющий длину 1 байт.

Слайд 5

Арифметические операторы
Синтаксическая диаграмма арифметических операторов представлена на рис. 2.3. К бинарным арифметическим

Арифметические операторы Синтаксическая диаграмма арифметических операторов представлена на рис. 2.3. К бинарным
операциям относятся операции ‘*”, ‘/’, ‘+’, ‘–‘ и ‘mod’; к унарным арифметическим операциям относятся операции ‘–‘ и ‘+’.

+


Слагаемое

+


Выражение

/

*

Множитель

Множитель

Слагаемое

Число

Выражение

Адресный операнд

)

(

Множитель

Рис. 2.3. Синтаксические диаграммы арифметических операторов

Слайд 6

Операторы сдвига
Операторы сдвига выполняют сдвиг числа на указанное количество разрядов влево или

Операторы сдвига Операторы сдвига выполняют сдвиг числа на указанное количество разрядов влево
вправо. Синтаксическая диаграмма оператора сдвига представлена на рис. 2.4.

Число сдвигаемых разрядов

shr
shl

Рис. 2.4. Синтаксическая диаграмма операторов сдвига

Операторы сравнения
Оператор сравнения предназначен для формирования логических выражений. Значение “Да” сответствует числу 1, “Нет” – числу 0. Синтаксическая диаграмма оператора сравнения представлена на рис. 2.5.

Рис. 2.5. Синтаксическая диаграмма оператора сравнения

Соответствие операторов ассемблера математической записи представлено в таблице 2.1.

Таблица 2.1.Операторы сравнения

Слайд 7

Логические операторы
Логические операторы выполняют над аргументами побитовые операции. Синтаксические диаграммы логических операторов

Логические операторы Логические операторы выполняют над аргументами побитовые операции. Синтаксические диаграммы логических
представлены на рис. 2.6.

Рис. 2.6. Синтаксические диаграммы логических операторов

Индексный оператор
Индексный оператор позволяет организовать работу с массивами. В операции используются данные, размещенные по адресу заданному именем переменной плюс смещение, заданное в квадратных скобках. Синтаксическая диаграмма, иллюстрирующая работу индексного оператора, представлена на рис. 2.7.

Рис. 2.7. Синтаксическая диаграмма индексного оператора

Слайд 8

Оператор преобразования типа
Оператор ptr позволяет преобразовать тип переменной или типа адресации. Возможно

Оператор преобразования типа Оператор ptr позволяет преобразовать тип переменной или типа адресации.
использование следующих значений типов: byte, word, dword, qword, tbyte и два указателя на способ адресации: near, far. Синтаксическая диаграмма оператора преобразования типа представлена на рис. 2.8.

Рис. 2.8. Синтаксическая диаграмма оператора преобразования типа

Например:
mov al, byte ptr d_wrd+1 ;пересылка второго байта из двойного слова
Операторы получения сегментной составляющий адреса и смещения
Оператор SEG позволяет получить значение сегмента, а offset – смещения для указанного адреса (см. 2.2 и 1.3).
Например:
mov ex, seg prim
mov dx, offset prim
после выполнения данных операторов в паре регистров ex: dx будет полный адрес переменный prim.

Слайд 9

Директивы сегментации

Программа на ассемблере может работать с шестью сегментами: кода, сетка и

Директивы сегментации Программа на ассемблере может работать с шестью сегментами: кода, сетка
четырьмя сегментами данных. Для простых программ содержащих только с одним сегментом кода, сетка и данных возможно применение упрощенной модели сегментации.
model small
.stack (размер)
.data
описание переменных
.code
main proc
тело программы
main endproc
End
Назначение директив приведено в таблице 2.2.
Таблица 2.2. Назначение директив сегментации

Идентификатор model создает следующие служебные переменные, которые Вы множите использовать в своих программах. Назначение переменных представлено в табл. 2.3.

Слайд 10

Таблица 2.3. Служебные переменные

Таблица 2.4. Модели памяти

Использование сегментов в различных моделях

Таблица 2.3. Служебные переменные Таблица 2.4. Модели памяти Использование сегментов в различных
памяти проиллюстрировано на рис. 2.9.

Рис. 2.9. Использование моделей памяти

Слайд 11

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

Для описания простых данных используются директивы резервирования памяти. Синтаксическая диаграмма описания простых
переменных приведена на рис. 2.10.
Значение количества памяти резервируемое при описании переменных приведена на в табл. 2.5.
Таблица 2.5. Резервирование памяти

Описание простых типов данных

Рис. 2.10. Синтаксическая диаграмма описания простых переменных

Слайд 12

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

При работе с переменными необходимо учитывать следующее, младший байт размещается всегда по
младшему адресу.
Например:
model small
.stack 100h
.data
test1 db 12h
test2 db 10
test3 db 10 dup (' ')
test4 db 10 dup (?)
srt1 db 'строка$'
символ ‘?’ означает что значение ячеек не будет определено.
символ ‘$’ означает что значение ячеек не будет определено.

Организация ввода вывода

Для вывода на экран сообщения, возможно, использовать прерывание 21h.
Вывод строки на экран:
mov ah, 09h ; поместить в регистр ah номер функции прерывания 21h
mov dx, offset str1 ; в регистр dx помещается указатель на строку
int 21h ; вызов прерывания 21h
Вывод символа на экран (выводимый символ находится в регистре dl):
mov ah, 02h ; поместить в регистр ah номер функции прерывания 21h
int 21h ; вызов прерывания 21h
Ввод символа с клавиатуры (введенный символ находится в регистре al):
mov ah, 01h ; поместить в регистр ah номер функции прерывания 21h
int 21h ; вызов прерывания 21h

Имя файла: Программирование-на-Ассемблер-к.т.н.,-доц.-Красов-А.В.-Лекция-2.pptx
Количество просмотров: 168
Количество скачиваний: 0