Сумма положительного и отрицательного даёт 0. Проверим:
; al = 01011011 (двоичное)
shr al, 3 ; al= 00001011
Это означает: сдвиг всех битов регистра al на 3 разряда вправо. Так что al станет 00001011.
Биты слева заполняются нулями, а биты справа выдвигаются (исчезают). Последний выдвинутый бит, становится значением флага переноса CF.
;al = 10100110
sar al, 3
;al = 11110100
sar al, 2
;al = 11111101
;bl = 00100110
sar bl, 3
;bl = 00000010
Последний выдвинутый бит, становится значением флага переноса CF.
rol операнд, количество_сдвигов ; циклический сдвиг операнда влево
ror операнд, количество_сдвигов ; циклический сдвиг операнда вправо
rcl операнд, количество_сдвигов ; циклический сдвиг операнда влево через флаг переноса
rcr операнд, количество_сдвигов ; циклический сдвиг операнда вправо через флаг переноса
Задача: дано некое однобайтное число. Нужно инвертировать его биты. То есть в итоге первый бит должен стать восьмым, второй – седьмым и так далее.
pop
push
mov ax, 4560h
push ax
mov ax, 0FFFFh
push ax
Обратите внимание, что команда pop не чистит стек
SomeProc proc
...ещё код...
Ret ; обязательно
SomeProc endp
Вызов процедуры
Call SomeProc
Параметры процедуры должны быть выложены в стек перед её вызовом в обратном порядке.
STDCALL указывать необязательно. DWORD тип. Возможны типы, например WORD, BYTE и т. д..
Вызов процедуры:
Invoke testproc, 1d, 2d, 3d,
При этом ещё на этапе компиляции будут проверено количество параметров и их тип, что подстрахует вас от ошибок.
Для этого нужно сначала объявить прототип:
Invoke <функция>, <параметр1>, <параметр2>, <параметр3>
ebp+8,esp →
ebp →
ebp +8
ebp +0C
ebp +4
→
Внутри процедуры происходит следующее:
В стек помещается содержимое EBP;
Содержимое ESP помещается в EBP;
В стек записываются локальные переменные в порядке следования;
Выполняется основная часть процедуры
Перед выходом из процедуры происходит следующее:
Вызывается команда Leave. Она эквивалента помещению значения EBP в ESP (в этот момент вершина стека уходит за локальные переменные). Затем из стека выталкивается сохранённое значение EBP в EBP.
Вызывается команда ret в ходе работы которой вершина стека отодвигается за передаваемые параметры и происходит извлечения адреса возврата из стека и помещение его в EIP.
Если не удалось найти и скачать презентацию, Вы можете заказать его на нашем сайте. Мы постараемся найти нужный Вам материал и отправим по электронной почте. Не стесняйтесь обращаться к нам, если у вас возникли вопросы или пожелания:
Email: Нажмите что бы посмотреть