Слайд 2Размещение многобайтной команды в памяти
Адрес команды в памяти – это адрес ее
![Размещение многобайтной команды в памяти Адрес команды в памяти – это адрес](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1005835/slide-1.jpg)
первого байта (байт СОР).
Каждый последующий байт команды располагается в памяти по адресу, на 1 больше предыдущего
Пример: Пусть, CS:0007 - адрес 4-байтной команды (0007 - 16–разрядный внутрисегментный адрес)
Адреса байтов памяти, которые занимает команда? Байты памяти с адреса CS:0007 по CS: 000A
Слайд 3Основные группы команд
Команды пересылки данных. Перемещают (копируют) данные между регистрами процессора, памятью
![Основные группы команд Команды пересылки данных. Перемещают (копируют) данные между регистрами процессора,](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1005835/slide-2.jpg)
и портами. Не влияют на флаги.
Команды двоичной арифметики. Устанавливают арифметические флаги.
Команды логических операций. Выполняют операции булевой алгебры. Устанавливаются некоторые флаги.
Команды сдвигов. Выполняют сдвиг кода в регистре или памяти на заданное количество бит. Влияют на флаг CF.
Команды битовых операций. Манипулируют с отдельным битом регистра или памяти
Команды передачи управления, вызова процедур, прерываний. Их назначение - нарушить линейную последовательность чтения процессором команд из памяти.
Слайд 4Операнды в командах
Команды без операндов
CLC ; сброс флага CF
◻ Команды с 1-м
![Операнды в командах Команды без операндов CLC ; сброс флага CF ◻](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1005835/slide-3.jpg)
операндом
INC BX ; увеличить на 1 код в регистре ВХ
Команды с 2-мя операндами.
Результат записывается на место 1-го операнда
ADD AL, BL ; AL ← AL + BL
ADD AL, 3 ; AL ← AL + 3
ADD ds:[7], BL ; ds:[0007]←ds:[0007]+BL
!! Недопустимое сочетание двух операндов: “память - память“
Слайд 5Типы операндов в командах
Операнд
Регистр
Память
Непосредственный операнд
Что указывается в команде?
→ Имя регистра
→
![Типы операндов в командах Операнд Регистр Память Непосредственный операнд Что указывается в](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1005835/slide-4.jpg)
Адрес памяти
→ числовой или символьный код
Слайд 6Размер операндов
Операнд может быть размещен в регистре, в памяти или в самой
![Размер операндов Операнд может быть размещен в регистре, в памяти или в](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1005835/slide-5.jpg)
команде – «непосредственный операнд».
Если один из операндов команды - регистр, а второй - память или непосредственный операнд, то длину операндов определяет формат регистра.
Примеры:
mov al, ds:[1] ; чтение из памяти 1 байта. Операнды: регистр-память
mov aх, ds:[1] ; чтение 2 байтов
mov еaх, ds:[1] ; чтение 4 байтов
mov еaх, 5 ; Операнды: регистр-непосредственный операнд.
При занесении непосредственного операнда в регистр ЕАХ процессор расширит его до 4-байтного формата (00 00 00 05)
Слайд 7Обозначение операндов в описании системы команд
r ,sr, reg — регистр;
m, mem —
![Обозначение операндов в описании системы команд r ,sr, reg — регистр; m,](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1005835/slide-6.jpg)
адрес операнда в памяти;
i — непосредственный операнд;
r/m — регистр или память;
r/m/i — регистр, адрес памяти или непосредственный операнд;
r8, r16, r32 — 8-, 16- , 32-разрядный регистр;
m8, m16, m32 — 8-, 16- , 32- разрядный операнд из памяти;
i8, i16, i32— 8-ми, 16-ти , 32-х разрядный непосредственный операнд ;
Слайд 8Пример описания команды процессора
Команда
MOV r/m, r/m/i
MOVZX r16, r/m8
MOVSX r32, r/m8
Как выполняется
![Пример описания команды процессора Команда MOV r/m, r/m/i MOVZX r16, r/m8 MOVSX](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1005835/slide-7.jpg)
процессором
; пересылка r/m ← r/m/i
; пересылка r16 ← r/m8 с беззнаковым расширением
; пересылка r32 ← r/m8 с
расширением знаковым битом
Слайд 9Способы задания внутрисегментного адреса операнда
1. Прямая адресация
Внутрисегментный адрес операнда в команде
![Способы задания внутрисегментного адреса операнда 1. Прямая адресация Внутрисегментный адрес операнда в](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1005835/slide-8.jpg)
задаете явно:
mov bx, es:[2]
2. Косвенная адресация
Внутрисегментный адрес (или его часть) записан в регистре. Процессор будет извлекать адрес из регистра и , возможно, вычислять окончательный внутрисегментный адрес
mov bx, es:[si] - внутрисегментный адрес будет взят процессором из регистра SI
mov bx, es:[si+5] - внутрисегментный адрес будет вычислен процессором, как сумма содержимого регистра SI и 5
Слайд 10Варианты косвенной адресации
Для косвенной адресации используют регистры: si, di, bx, bp. Косвенная
![Варианты косвенной адресации Для косвенной адресации используют регистры: si, di, bx, bp.](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1005835/slide-9.jpg)
адресация имеет несколько вариантов:
[si+disp], [di+disp], [bx+disp], [bp+disp]
[bx+si+disp], [bx+di+disp], [bp+si+disp], [bp+di+disp]
Они отличаются использованием одного или пары регистров.
disp – это знаковое число (не обязательно)
Пример: пусть, BХ=0001 SI=0004
По какому адресу процессор будет обращаться в память за байтом в команде
mov dh, ds:[bx+si-4] ; dh ← ds: [1]