Скачать презентацию
Идет загрузка презентации. Пожалуйста, подождите
Презентация была опубликована 12 лет назад пользователемwww.mts-sut.ru
1 Программирование на Ассемблер к.т.н., доц. Красов А.В. Лекция 3 ФакультетМТС Курс3 Семестр6 Форма контролязачет Лекции14 часов Лабораторные работы12 часов к.т.н., доцент Красов Андрей Владимирович директор УИЦ ИТТ, доцент кафедры ИБТС Куратор специальности «Защищенные системы связи» Автор курса
2 Машинная команда представляет собой закодированную информацию о выполняемом процессором действии. Структура машинной команды приведена на рис Префиксы – необязательные элементы машинной команды, модифицирующие выполнение машиной команды. Префикс повторения позволяет организовать цепочное исполнение команд; префикс размера адреса позволяет менять разрядность (16 или 32 разрядов); префикс размера оператора позволяет менять размер оператора (16 или 32 разряда); префикс замены сегмента позволяет сменить сегменты; Код операции – обязательный элемент машинной команды, обозначающий выполняемое действие. Байт режима адресации modr/m – определяет режим работы с адресом. Поле mod на рис.3.1, определяет количество байт адреса. Возможные значения поля mod приведены в табл.3.1. Рис.3.1. Структура машинной команды Структура машинной команды
3 ЗначениеОписание 00 Смещение не используется, адрес определяется содержимым базового и индексного регистров. 01 Смещение имеет размер 1 байт. 10 Смещение имеет размер 2 или 4 байта (в зависимости от режима). 11 Память не используется, все операторы размещаются в регистрах или заданы числовыми значениями. Таблица 3.1. Значения поля mod Поле reg/коп определяет содержимое первого операнда, это может быть либо регистр, либо продолжение кода операции. Поле r/m используется совместно с полем mod и определяет использование первого операнда, который может быть либо регистром, либо использоваться для вычисления эффективного адреса (при значении mod=11). Байт sib – используется для задания адресов операторов. При этом поля mod и b r/m имеют следующие значения mod=01 или mod=10, r/m=100. Поля байта sib имеют следующие значения: ss – масштабный множитель для индексного регистра, возможные значения 1, 2, 4 или 8; index – номер регистра используемого в качестве индексного; base – номер базового регистра. Поле смещения в команде – 8, 16 или 32 разрядное значение адреса операнда. Непосредственный операнд – 8, 16 или 32 разрядное числовое значение. Способы задания операндов Неявный способ – команда работает с конкретными, уже заранее известными операндами или регистрами. Непосредственный операнд – операнд находится в самой команде, см. выше. Регистровый операнд – операнд размещается в одном из регистров процессора. Размещение операнда в памяти – в качестве адреса используется адрес ячейки памяти. Порт ввода/вывода – в качестве операнда выступает адрес ячейки памяти выделенной для обмена с внешними устройствами, например LPT, COM. Стек – в качестве операнда выступает стек.
4 Относительная прямая адресация – эффективный адрес формируется как сумма содержания операнда программы и регистра указателя команд ip/eip. Например, переход на указанное количество операторов, относительно текущей команды. Абсолютная прямая адресация – эффективный адрес содержится в поле операнда. Косвенная адресация – адрес размещается в одном из регистров, например: [ecx] (имя регистра заключается в квадратные скобки). Классификация машинных команд Все машинные команды можно разбить на группы: Пересылки данных:Пересылки данных: общего назначения;общего назначения; работа со стеком; преобразования типов. Арифметические:двоичные;десятичные. Логические: Логические:побитовые;сдвиг. Передачи управления: Передачи управления:безусловные;условные. Цепочные Цепочные Управление состоянием процессора: Управление состоянием процессора: работа с флагами; работа с системными регистрами. Способы адресации
5 Команды пересылки данных Пересылка данных – mov. Формат команды: mov Формат команды: mov Особенности команды mov: Команда mov не может непосредственно пересылать данные из одной области памяти в другую, для подобной пересылки необходимо воспользоваться одним из регистров.Команда mov не может непосредственно пересылать данные из одной области памяти в другую, для подобной пересылки необходимо воспользоваться одним из регистров. Нельзя загрузить в сегментный регистр значение непосредственно из памяти. Нельзя переслать содержимое одного сегментного регистра в другой. Нельзя использовать сегментный регистр cs в качестве операнда назначения (в данном регистре содержится адрес следующей команды, изменение его значения приведет к сбою работы программы). Примечание: При пересылки данных необходимо не забывать о типе переменных, для преобразования типов используется оператор ptr. Обмен данными – xchg. Формат команды: xchg Формат команды: xchg Команда cxhg позволяет поменять данные. Обмениваемые данные должны иметь один тип, не допускается обмен содержимого двух ячеек памяти.
6 Команды работы с портам ввода/вывода Работу оборудованием компьютера можно представить в виде изображенном на рис Рис Работа программы с аппаратурой компьютера Для взаимодействия с аппаратурой компьютера в адресном пространстве выделен определенный диапазон адресов, называемых портами ввода/вывода. Программа может организовать взаимодействие с аппаратурой одним из трех способов, представленных на рис В данном курсе рассматривается работа программы с аппаратурой непосредственно через порты ввода/вывода. Для работы с портами предусмотрены команды: in in out out
7 i8255Порт 61hi8255Порт 61h В качестве примера работы с портами приведем организацию работы встроенного динамика. Для генерации звука используется микросхема таймера i8253 и программируемого периферийного интерфейса i8255. Таймер имеет три канала, построенных по одинаковому принципу. На таймер подаются импульсы с частотой 1.19 МГц с системных часов. Выходы каждого из каналов подключены к соответствующим устройствам компьютера. Канал 0 подается на контроллер прерываний и является источником аппаратного прерывания от таймера, возникающего 18.2 раз в секунду. Канал 1 является источником служебных сигналов для контроллера прямого доступа к памяти. Рассматриваемый нами канал 2, подключен к динамику. Служебные регистры каждого канала имеют следующие характеристики: регистр ввода/вывода – 8 разрядов; регистр защелка и регистр счетчик – по 16 разрядов. Значение, записанное в регистр ввода/вывода (порт 42h), сразу же переписывается в регистр-защелку, значение которого сохраняется неизменным до следующего обращения.
8 Из рис. 3.2 видно, что динамик будет издавать звук если установлены соответствующие значения битов по адресу 61h и значение счетчика count=0. Для программирования звука необходимо проделать следующие действия: Занести в порт 43h режим работы и тип операции передачи значения в канал, например – (0b6h). Подать ток на динамик, для этого необходимо установить бит 1 порта 61h. Через служебный регистр записать значение в порт 42h, определяющие высоту тона. Режим переноса определяется значением регистра состояния (порт 43h). Назначение битов регистра представлены на рис. 3.3.
9 При разработки программ на ассемблере часто приходится работать с адресами переменных. Для поддержки данных операций создана группа команд: lea назначение, источник lds назначение, источник les назначение, источник lgs назначение, источник lfs назначение, источник lss назначение, источник Загрузка эффективного адреса - lea. Команда lea записывает эффективный адрес регистр назначение. Загрузка полного адреса. Команды lds, les, lfs и lss позволяют получить полный адрес переменный. Полный адрес переменной, состоящий из сегментной части и смещения, размещается в указанной паре регистров. Назначение команд загрузки полного адреса представлено в табл.3.2. Работа с адресами и указателями Таблица 3.2. Назначение команд загрузки полного адреса Команда xalt. Функция xalt замещает значение в регистре al байтом из таблицы. Номер элемента таблицы определяется старым значением al. Формат команды: xalt [адрес таблицы] Адрес таблицы должен быть предварительно загружен в регистр bx (с помощью команды lea). Максимальная длинна таблицы – 256 байт. Подстановка данных из таблицы
10 Для работы со стеком выделяются следующие регистры: ss – сегментный регистр; sp/esp – Регистр указателя стека; bp/ebp – регистр указателя базы кадра. Максимальный размер стека 64Кбайт. Принцип работы стека иллюстрируется на рис Работа со стеком Для работы со стеком есть следующие команды. Записать значение в стек: push. Формат команды: push Формат команды: push Команда push помещает значение в стек, при этом указатель ss:sp уменьшается на 2. Прочитать значение из стека: pop. Формат команды: pop Формат команды: pop Команда pop извлекает значение из стека и записывает его по указанному адресу, при этом указатель ss:sp увеличивается на 2. Записать в стек все регистры: pusha. По команде pusha в стек последовательно заносятся значение регистров ax, cx, dx, bx, sp, bp, si, di. Заносимое в стек значение регистра sp соответствует значению указателя до выполнения команды push. Значение указателя сдвигается после помещения значений регистров в стек. Записать в стек все регистры: pushw. В отличие от команды pusha, команда работает с регистрами размером в одно машинное слово не зависимо от разрядности модели памяти. При модели памяти use16 команды pusha и pushw полностью идентичны. Извлечь значение регистров из стека: popa и popw. Команды popa и popw позволяют извлечь значения регистров из стека. Сохранить значение регистра флагов: pushf и pushfw. Команды pushf и pushfw позволяют сохранить в стеке содержимое регистра флагов. Извлечь из стека значение регистра флагов: popf и popfw. Команды popf и popfw позволяют извлечь из стека значение регистра флагов.
Еще похожие презентации в нашем архиве:
© 2024 MyShared Inc.
All rights reserved.