Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Извлечение из стека




ЗАНЕСЕНИЕ В СТЕК

КОМАНДЫ РАБОТЫ СО СТЕКОМ.

10,11,12,13,14,15

    Так устроен стек:      

PUSH операнд-слово Копирует значение операнда в ячейку стека.

Шаг 1. Сместить указатель стека на предыдущее слово Шаг 2. Скопировать операнд в стек

PОР операнд-слово

Копирует значение ячейки стека в операнд.

Шаг 1. Скопировать ячейку стека в операнд   Шаг 2. Сместить указатель стека на следующее слово

Начиная с 80286 появились новые команды:

· PUSHA (операндов не имеет) Заносит в стек AX, CX, DX, BX, SP, BP, SI, DI

· POPA (операндов не имеет) Извлекает из стека DI, SI, BP, SP (отбрасывается), BX, DX, CX, AX

· PUSHF (операндов не имеет) Копирует в стек регистр флагов

· POPF (операндов не имеет) Восстанавливает регистр флагов из стека

ИТОГИ РАЗДЕЛА

1. Команды пересылки – самые многочисленные в ассемблере («Ассемблер – это наука про команду MOV» А.Х.Пеэтвере)

2. Команды «пересылки» данных - это команды копирования (источник данных не разрушается).

3. Ограничения на операнды и особенности исполнения команд пересылок данных происходят, в основном, из-за особенностей доступа элементов компьютера к шине данных и шине адреса.

4. Некоторые команды пересылки очень специализированы (PUSH, POP, XLAT), а некоторые выглядят парадоксально (XCHG).

 


Раздел 08. АРИФМЕТИЧЕСКИЕ КОМАНДЫ

ПЛАН РАЗДЕЛА

Команды сложения двоичных чисел.

Команды вычитания двоичных чисел.

Команды беззнакового и знакового умножения двоичных чисел.

Команды беззнакового и знакового деления двоичных чисел.

Команда смены знака числа NEG.

Команды знакового расширения целых чисел.

CMP – команда сравнения чисел.

КЛАССИФИКАЦИЯ ЦЕЛОЧИСЛЕННЫХ АРИФМЕТИЧЕСКИХ КОМАНД

 

КОМАНДЫ СЛОЖЕНИЯ ДВОИЧНЫХ ЧИСЕЛ

inc операнд — операция инкремента,

то есть увеличения значения операнда на 1;

Пример: INC SI

add операнд_1,операнд_2 — команда сложения с принципом действия:
операнд_1 = операнд_1 + операнд_2

Пример: ADD DX, 7

ADC операнд_1,операнд_2 — команда сложения с учетом флага переноса C F. Принцип действия команды:
операнд_1 = операнд_1 + операнд_2 + значение_CF

Пример: ADC DX, 0; фактически это DX = DX + CF

ПРИМЕР НА СЛОЖЕНИЕ ДВОИЧНЫХ ЧИСЕЛ

Сложить два байта (AL и ячейку памяти) и результат поместить в АХ, поскольку сумма может оказаться шире 8 бит.

.model small
.stack 256
.data
G db 254

.code;сегмент кода
main:
mov ax,@data
mov ds,ax
...
xor ax,ax; AX = 0000 0000 0000 0000 b
ADD AL,17; AX = 0000 0000 0001 0001 b

; G = 1111 1110 b

ADD AL, G; AX = 0000 0000 0000 1111 b; флаг CF = 1
ADC AH,0; AX = 0000 0001 0000 1111 b
m1:
...
exit:

mov ax, 4c00h;стандартный выход
int 21h
end main;конец программы

 

КОМАНДЫ ВЫЧИТАНИЯ ДВОИЧНЫХ ЧИСЕЛ

DEC операнд — операция декремента,
то есть уменьшения значения операнда на 1;

Пример: DEC DI

SUB операнд_1,операнд_2 — команда вычитания; ее принцип действия:
операнд_1 = операнд_1 – операнд_2

Пример: SUB AX, BX

SBB оп_1,оп_2 — команда вычитания
с учетом заема (флага CF):
оп_1 = оп_1 – оп_2 – текущее_значение_CF

(! ЗАПОМНИТЬ!) Если при этом БЫЛ ЗАЁМ, то
CF ПРИСВАИВАЕТСЯ 1, независимо от значения CF до вычитания.

Пример: SBB DX, AX

УМНОЖЕНИЕ ЧИСЕЛ БЕЗ ЗНАКА

MUL сомножитель_1

Один операнд-сомножитель. Второй операнд (сомножитель_2) задан неявно.

 

сомножитель_1 сомножитель_2 Результат
Байт AL 16 бит в AX: AL — младшая часть результата; AH — старшая часть результата
Слово AX 32 бит в паре DX:AX: AX — младшая часть результата; DX — старшая часть результата

 

ПРИМЕР НА УМНОЖЕНИЕ ДВОИЧНЫХ ЧИСЕЛ

Умножить два байта (AL и ячейку памяти), а старшую и младшую части произведения поместить раздельно в две однобайтовых переменных.

.model small

.stack 256

.data;сегмент данных

REZ_L db 45

REZ_H db 0

.code;сегмент кода

main:;точка входа в программу

...

xor ax,ax

mov al,25

mul REZ_L

jnc m1;если нет переполнения (CF=0), то на m1

mov rez_h,ah;старшую часть результата в rez_h

m1:

mov rez_l,al

exit:

mov ax,4c00h;стандартный выход

int 21h

end main;конец программы

 

УМНОЖЕНИЕ ЧИСЕЛ СО ЗНАКОМ

IMUL оп_1 [, оп_2 [, оп_3] ]

Вариант IMUL оп_1   ОП_1 – это reg|mem Если оп_1 – байт, то AX = оп_1 * AL; Если оп_1 – слово, то DX:AX = оп_1 * АХ.
Вариант IMUL оп_1, оп_2   ОП_1, ОП_2 – это reg|mem, но не mem, mem одновременно. ОП_1 = ОП_1 * ОП_2
Вариант IMUL оп_1, оп_2, ОП_3   ОП_1, ОП_2 – это reg|mem, но не mem, mem одновременно. ОП_3 – НЕПОСРЕДСТВЕННОЕ значение ОП_1 = ОП_2 * ОП_3

 

ДЕЛЕНИЕ ЧИСЕЛ БЕЗ ЗНАКА

div делитель

Один операнд - делитель (reg | mem). Второй операнд (Делимое) задано неявно.

Если делитель – БАЙТ, то
Если делитель – СЛОВО, то  

 

Возможна исключительная ситуация: «деление на 0». Она возникает либо когда делитель равен 0, либо когда частное СЛИШКОМ ВЕЛИКО для его размещения в регистре AX | AL.

 

ДЕЛЕНИЕ ЧИСЕЛ СО ЗНАКОМ

Справедливо ВСЁ, что относится к БЕЗзнаковому делению командой DIV.

Разница в том, что операнды деления и ЧАСТНОЕ рассматриваются как ЗНАКОВЫЕ числа.

ПРИМЕР

… D5 db -5

Mov AX, 128

IDIV D5; 128 / (-5) = остаток 3 и частное (-25)

После этой команды AX = 0000 0011 1110 0111.

0000 0011 = 3, а 1110 0111 = -25 в дополнительном коде

 

СМЕНА ЗНАКА: NEG источник

Выполнить вычитание (0 – источник) и поместить результат на место источника;

Если источник=0, то его значение не меняется.

ПРИМЕР:

MOV AL, 2

NEG AL; AL = 0FEh, это - 2 в дополнительном коде.

Не путайте эту команду с NOT операнд, которая

ИНВЕРТИРУЕТ операнд, то есть меняет биты 0 на 1
и 1 на 0.

КОМАНДЫ ЗНАКОВОГО РАСШИРЕНИЯ

CBW (Convert Byte to Word)

Берёт число в AL (ширина 8 бит) и заполняет биты AH копиями знакового бита AL. Получается число шириной 16 бит, такое же по величине и знаку как было в AL! Пример 1:

До выполнения команды

; АХ = 1001 1001 0111 1010 (AL = 122)

CBW;; АХ = 0000 0000 0111 1010 (AX = 122)

Пример 2:

До выполнения команды

; АХ = 1001 1001 1111 1010 (AL = -6)

CBW;; АХ = 1111 1111 1111 1010 (AX = -6)

CWD (Сonvert Word to Doubleword)

Берёт число в AX (ширина 16 бит) и заполняет биты DX копиями знакового бита AX. Получается число в DX:AX шириной 32 бита, такое же по величине и знаку как было в AХ!

Примеры:

1) До выполнения команды:

DX = неважно какой, АХ = 0001 1001 0111 1010

Выполняется CWD. Стало:

DX = 0000 0000 0000 0000, АХ = 0001 1001 0111 1010

До выполнения команды:

DX = неважно какой, АХ = 1101 1001 0111 1010

Выполняется CWD. Стало:

DX = 1111 1111 1111 1111, АХ = 1101 1001 0111 1010

 

КОМАНДА СРАВНЕНИЯ

CMP (СoMPare = сравнить)

CMP оп1,оп2

Работает так:

А) выполнить вычитание (оп1-оп2);

Б) в зависимости от результата установить флаги,
В) операнд1 и операнд2 не изменять (то есть результат не запоминать).

Состояние флагов после выполнения команды:

Смещение флага            
Имя флага OF SF ZF AF PF CF
Значение флага после операции R R R R R R

(«R» означает, что значение флага определяется результатом операции)

ИТОГИ РАЗДЕЛА

1. Мы рассмотрели арифметические команды, которые работают ТОЛЬКО с ДВОИЧНЫМИ ЦЕЛЫМИ числами.
Еще есть команды для работы с двоично-десятичными числами и команды математического сопроцессора, которые работают с числами с плавающей точкой. Но эти группы команд мы не рассматривали.

2. По двоичной записи числа невозможно отличить знаковое число от беззнакового. Поэтому выбор логики выполнения арифметической операции над числами (знаковая или беззнаковая) возлагается на программиста. Для этого в системе команд процессора предусмотрены РАЗНЫЕ команды умножения и деления для знаковых и беззнаковых чисел.

 

 


Раздел 09. СРЕДСТВА ПОБИТОВОЙ ОБРАБОТКИ ДАННЫХ

ПЛАН РАЗДЕЛА

1. КЛАССИФИКАЦИЯ КОМАНД ПОБИТОВОЙ ОБРАБОТКИ.




Поделиться с друзьями:


Дата добавления: 2014-01-07; Просмотров: 367; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.03 сек.