'

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

Понравилась презентация – покажи это...





Слайд 0

Программирование на Ассемблер к.т.н., доц. Красов А.В. Лекция 2 Факультет МТС Курс 3 Семестр 6 Форма контроля зачет Лекции 14 часов Лабораторные работы 12 часов к.т.н., доцент Красов Андрей Владимирович директор УИЦ ИТТ, доцент кафедры ИБТС Куратор специальности 201800 «Защищенные системы связи» Автор курса


Слайд 1

Синтаксис ассемблера На рис. 2.1 представлены синтаксические диаграммы ассемблера. Оператор директивы Оператор команды Оператор макрокоманды Комментарий ; а) Директива Операнд N Операнд 1 Имя метки Комментарий : , . . . б) Код операции Имя метки Операнд 1 Операнд N Комментарий ; : , в) . . . Рис. 2.1. Синтаксические диаграммы языка ассемблера а – предложение ассемблера; б – директива; в – команды и макрокоманды


Слайд 2

Набор регистров Синтаксические диаграммы задают все правила формирования программы на языке ассемблера. Непосредственные операнды Непосредственным операндом называется число, строка или выражение имеющие фиксированное значение, оно может быть заданно конкретным значением в поле операнда или определено через 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.


Слайд 3

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


Слайд 4

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


Слайд 5

Операторы сдвига Операторы сдвига выполняют сдвиг числа на указанное количество разрядов влево или вправо. Синтаксическая диаграмма оператора сдвига представлена на рис. 2.4. Число сдвигаемых разрядов shr shl Рис. 2.4. Синтаксическая диаграмма операторов сдвига Операторы сравнения Оператор сравнения предназначен для формирования логических выражений. Значение “Да” сответствует числу 1, “Нет” – числу 0. Синтаксическая диаграмма оператора сравнения представлена на рис. 2.5. Рис. 2.5. Синтаксическая диаграмма оператора сравнения Соответствие операторов ассемблера математической записи представлено в таблице 2.1. Таблица 2.1.Операторы сравнения


Слайд 6

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


Слайд 7

Оператор преобразования типа Оператор 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.


Слайд 8

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


Слайд 9

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


Слайд 10

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


Слайд 11

При работе с переменными необходимо учитывать следующее, младший байт размещается всегда по младшему адресу. Например: 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


Слайд 12

Пример программы model small .stack 100h .data str0 db 13,10,'$' str1 db 'Введите символ: $' str2 db 'Введенный символ: $' t1 db 1 dup(' '),'$' .code start: mov ax,@data mov ds,ax mov ah,09h mov dx, offset str1 ; вывод строки str1 на экран int 21h mov ah,01h ; ввод символа с клавиатуры в регистр al int 21h mov t1,al ; перенос значения регистра al в переменную t3 mov ah,09h mov dx, offset str0 ; вывод строки str0 на экран int 21h mov dx, offset str2 ; вывод строки str2 на экран int 21h mov ah,02h mov dl,t1 ; вывод символа из регистра dl на экран int 21h mov ah,4ch ; завершение работы программы int 21h end start


×

HTML:





Ссылка: