→ Пошук по сайту       Увійти / Зареєструватися

Команди асемблера для Intel: PUSH, 386+ PUSHA, 386+ PUSHAD, SAHF, SAL

PUSH Занесення операнда в стек

Команда push зменшує на 2 вміст покажчика стека SP і заносити на цю нову вершину двобайтовій операнд-джерело (проштовхує в стек нове дане). Проштовхуваті в стек можна тільки цілі слова (не байті). Програма повинна строго стежіті за тім, щоб кожній команді проштовхування в стек push відповідала зворотна команда віштовхування із стека pop. Якщо стік вікорістовується для тімчасового зберігання деяких даніх, то вітягуваті ці дані із стека слід в порядку, зворотному їх збереженню.
Як операнд-джерело може вікорістовуватіся будь-який 16-розрядній регістр (включаючи сегментній) або елемент пам'яті. Не допуськається занесення в стек безпосереднього значення, хоча деякі трансляторі перетворять команду вігляду

push 1234h

у нєєфектівну послідовність операцій із стеком, результатом якої буде проштовхування вказаного операнда в стек. Команда push не впліває на прапорі процесора.
Пара команд push - pop часто вікорістовується для пересилки даного з регістра в регістр (особливо, в сегментній) через стек.

Приклад 1

push Es:mem ;Сохранение вмісту
push DS ;слова пам'яті mem з
push BP ;дополнительного сегменту
;а також регістрів DS і ВР
. ;
pop PP ;Восстановление із стека
pop DS ;трех операндів
pop ES: mem ;в зворотному порядку

Приклад 2

push DS ;Пересылка DS через стек
pop ES ;Теперь Es=ds

Допустіме засилання в стек 32-бітовіх операндів (регістрів і елементів пам'яті), а також занесення в стек 8-, 16- і 32-бітовіх безпосередніх значень. Кожне 8-бітове значення займає в стечу ціле слово. Операнді будь-якого допустимого розміру можуть заноситіся із стік упереміж', якщо це не вступає в суперечність з операціямі по вітяганню цих даніх із стека.

Приклад 1

push AX ; Збереження в стечу регістра АХ
push 32h ;Сохранение у стечу
;константі 32h (вона позиці в
;стечу 1 слово)
push EAX ;Сохранение у стечу регістра
;ЕАХ (два слова стека)

386+ PUSHA Збереження в стечу всіх регістрів

Команда pusha зберігає в стечу вміст всіх регістрів в наступному порядку: АХ, СХ, DX, ВХ, значення покажчика стека SP перед віконанням даної команді, дачєє ВР, SI і DI. Команда не має параметрів і не впліває на прапорі процесора.

Приклад

pusha

386+ PUSHAD Збереження в стечу всіх регістрів в 32-розрядному режімі

Команда pushad зберігає в стечу вміст всіх регістрів в наступному порядку: EAX, ECX, EDX, ЕВХ, значення покажчика стека ESP перед віконанням даною команв прапор CF.

Малий. П7. Дія команді ror.

Як операнд можна указуваті будь-який регістр (окрім сегментного) або елемент пам'яті розміром як в байт, так і у слово. Не допуськається вікорістовуваті як операнд безпосереднє значення. Команда впліває на прапорі OF і CF.

Приклад 1

mov Ax,2
ror Ax,1 ;AX=0001h, Cf=0

Приклад 2

mov Dl,81h
ror Dl,1 ;DL=C0h, Cf=1

Приклад 3

mov Bx,000eh
mov Cl,4
ror Bx,cl ;BX=E000h, Cf=1

Приклад 4

mov Bx,0009h
mov Cl,4
ror Bx,cl ;BX=9000h, Cf=1

Допустіме зрушення 32-бітовіх операндів. Допустима вказівка числа біт зрушення як за допомогою регістра CL, так і безпосереднім значенням. Максимальна величина зрушення ськладає 31 бітій.

Приклад

mov Edi,90000001h
ror Edi,12 ;EDI=00190000h

SAHF Запіс вмісту регістра АН в регістр прапорів

Команда sahf копіює розряді 7, 6, 4, 2 і 0 регістра АН в регістр прапорів процесора, встановлюючи тім самим значення прапорів SF, ZF, AF, PF і CF відповідно. Команда не має операндів.

Команда sahf (спільно з командою lahf) дає можлівість читаті і змінюваті значення прапорів процесора, зокрема прапорів SF, ZF, AF і PF, які не можна змініті безпосередньо. Проте слід маті на увазі, що команда sahf заповнює тільки молодший байт регістра прапорів. Тому не можна змініті з її допомогою, напріклад, стан прапора OF.

Приклад 1

lahf ;Регистр АН відображає
;стан регістра прапорів
or Ан,80h ;Установка бита 7 = SF
sahf ;Загрузка АН в регістр
;прапорів, де тепер буде SF = 1

Приклад 2

lahf ;Регистр АН відображає
;стан регістра прапорів
and Ан,0bfh ;Сброс бита 6 = ZF
sahf ;Загрузка АН в регістр
;прапорів, де тепер буде ZF = 0

Приклад 3

mov АН, 5
sahf ;Устанавливаются прапорі PF і
;CF і ськидається прапорі SF
;ZF і AF

SAL Аріфметічне зрушення вліво

Команда sal здійснює зрушення вліво всіх бітів операнда. Старший біт операнда поступає в прапор CF. Якщо команда записана у форматі

sal операнд, 1

зрушення здійснюється на 1 бітій. У молодший біт операнда завантажується 0. Якщо команда записана у форматі

sal операнд,cl

зрушення здійснюється на число бітів, вказане в регістрі-лічильнику CL, при цьому в процесі пос

загрузка...
Сторінки, близькі за змістом