Программирование на языке ассемблер. Система команд процессора презентация

Содержание

Слайд 2

Структура машинной команды
Машинная команда представляет собой закодированную информацию о выполняемом процессором действии.

Программирование

на языке ассемблер к.т.н., проф. Красов А.В.

Префиксы – необязательные элементы машинной команды, модифицирующие выполнение машиной команды. Префикс повторения позволяет организовать цепочное исполнение команд; префикс размера адреса позволяет менять разрядность (16 или 32 разрядов); префикс размера оператора позволяет менять размер оператора (16 или 32 разряда); префикс замены сегмента позволяет сменить сегменты;

Код операции – обязательный элемент машинной команды, обозначающий выполняемое действие.

Байт режима адресации modr/m – определяет режим работы с адресом. Поле 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 разрядное числовое значение.

Слайд 3

Способы задания операндов
Неявный способ – команда работает с конкретными, уже заранее известными

операндами или регистрами.
Непосредственный операнд - операнд находится в самой команде, см. выше.
Регистровый операнд – операнд размещается в одном из регистров процессора.
Размещение операнда в памяти – в качестве адреса используется адрес ячейки памяти.
Порт ввода/вывода – в качестве операнда выступает адрес ячейки памяти выделенной для обмена с внешними устройствами, например LPT, COM.
Стек – в качестве операнда выступает стек.

Программирование на языке ассемблер к.т.н., проф. Красов А.В.

Слайд 4

Способы адресации
Относительная прямая адресация – эффективный адрес формируется как сумма содержания операнда

программы и регистра указателя команд ip/eip. Например, переход на указанное количество операторов, относительно текущей команды.
Абсолютная прямая адресация – эффективный адрес содержится в поле операнда.
Косвенная адресация – адрес размещается в одном из регистров, например: [ecx] (имя регистра заключается в квадратные скобки).

Программирование на языке ассемблер к.т.н., проф. Красов А.В.

Слайд 5

Классификация машинных команд
Все машинные команды можно разбить на группы:
Пересылки данных:
общего назначения;
работа

со стеком;
преобразования типов.
Арифметические:
двоичные;
десятичные.
Логические:
побитовые;
сдвиг.
Передачи управления:
безусловные;
условные.
Цепочные
Управление состоянием процессора:
работа с флагами;
работа с системными регистрами.

Программирование на языке ассемблер к.т.н., проф. Красов А.В.

Слайд 6

Команды пересылки данных

Программирование на языке ассемблер к.т.н., проф. Красов А.В.

Пересылка данных –

mov.
Формат команды: mov <операнд назначения> <операнд источник>

К примеру, рассмотрим фрагмент программы для пересылки байта из ячейки fls в ячейку fld:

Особенности команды mov:
Команда mov не может непосредственно пересылать данные из одной области памяти в другую, для подобной пересылки необходимо воспользоваться одним из регистров.
Нельзя загрузить в сегментный регистр значение непосредственно из памяти.
Нельзя переслать содержимое одного сегментного регистра в другой.
Нельзя использовать сегментный регистр cs в качестве операнда назначения (в данном регистре содержится адрес следующей команды, изменение его значения приведет к сбою работы программы).
Примечание: При пересылки данных необходимо не забывать о типе переменных, для преобразования типов используется оператор ptr.

Слайд 7

Обмен данными – xchg.
Формат команды: xchg <первый операнд> <второй операнд>
Команда xchg

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

Программирование на языке ассемблер к.т.н., проф. Красов А.В.

Слайд 8

Команды работы с портам ввода/вывода
Работу оборудованием компьютера можно представить в виде

изображенном на рисунке.

Программирование на языке ассемблер к.т.н., проф. Красов А.В.

Слайд 9

Программирование на языке ассемблер к.т.н., проф. Красов А.В.

Для взаимодействия с аппаратурой компьютера в

адресном пространстве выделен определенный диапазон адресов, называемых портами ввода/вывода.
Для работы с портами предусмотрены команды:
in <регистр> <порт>
out <порт> <регистр>

Слайд 10

Программирование на языке ассемблер к.т.н., проф. Красов А.В.

Организация работы встроенного динамика. Для генерации

звука используется микросхема таймера i8253 и программируемого периферийного интерфейса i8255.

Таймер имеет три канала, построенных по одинаковому принципу. На таймер подаются импульсы с частотой 1.19 МГц с системных часов.

Выходы каждого из каналов подключены к соответствующим устройствам компьютера. Канал 0 подается на контроллер прерываний и является источником аппаратного прерывания от таймера, возникающего 18.2 раз в секунду. Канал 1 является источником служебных сигналов для контроллера прямого доступа к памяти. Рассматриваемый нами канал 2, подключен к динамику.

Служебные регистры каждого канала имеют следующие характеристики: регистр ввода/вывода – 8 разрядов; регистр защелка и регистр счетчик – по 16 разрядов. Значение, записанное в регистр ввода/вывода (порт 42h), сразу же переписывается в регистр-защелку, значение которого сохраняется неизменным до следующего обращения.

Для программирования звука необходимо проделать следующие действия:
Занести в порт 43h режим работы и тип операции передачи значения в канал, например – 10110110 (0b6h).
Подать ток на динамик, для этого необходимо установить бит 1 порта 61h.
Через служебный регистр записать значение в порт 42h, определяющие высоту тона.

Слайд 11

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

с адресами переменных. Для поддержки данных операций создана группа команд:
lea назначение, источник
lds назначение, источник
les назначение, источник
lgs назначение, источник
lfs назначение, источник
lss назначение, источник

Программирование на языке ассемблер к.т.н., проф. Красов А.В.

Слайд 12

Загрузка эффективного адреса – lea
Команда lea записывает эффективный адрес регистр назначение.
Загрузка полного

адреса. Команды lds, les, lfs и lss позволяют получить полный адрес переменный. Полный адрес переменной, состоящий из сегментной части и смещения, размещается в указанной паре регистров.

Программирование на языке ассемблер к.т.н., проф. Красов А.В.

Слайд 13

Программирование на языке ассемблер к.т.н., проф. Красов А.В.

Назначение команд загрузки полного адреса представлено

в таблице

Слайд 14

Подстановка данных из таблицы
Команды xlat. Функция xlat замещает значение в регистре al байтом

из таблицы. Номер элемента таблицы определяе6тся старым значением al.
Формат команды:
xalt [адрес таблицы]
Адрес таблицы должен быть предварительно загружен в регистр bx (с помощью команды lea). Максимальная длинна таблицы – 256 байт.

Программирование на языке ассемблер к.т.н., проф. Красов А.В.

Слайд 15

Программирование на языке ассемблер к.т.н., проф. Красов А.В.

Работа со стеком
Для работы со

стеком выделяются следующие регистры:
ss – сегментный регистр;
sp/esp – Регистр указателя стека;
bp/ebp – регистр указателя базы кадра.
Максимальный размер стека 64Кбайт.
Принцип работы стека иллюстрируется на рисунке.
Имя файла: Программирование-на-языке-ассемблер.-Система-команд-процессора.pptx
Количество просмотров: 80
Количество скачиваний: 0