Начало » Програмиране » Оператори в асемблер

<b>Оператори </b>
<b>AND</b>
Приложение: AND dest,src
Цел: Извършва се логическо И върху входните данни, като се заменя dest с резултата от операцията
Пример: AND BX, 03h
<b>CALL</b>
Приложение: CALL физически адрес
Цел: Изпълнява функция която е на адреса на този физически адрес.
Пример: CALL 10284312
След като функцията завърши, кода продължава от линията след инструкцията call.
<b>CMP</b>
Приложение: CMP dest,src
Цел: Изважда src от dest и попълва флаговете.
Пример: CMP AX,03h
Тази инструкция се предхожда от някакъв тип jump инструкция.
<b>INT</b>
Приложение: INT номер на прекъсване
Цел: Извиква функция по подразбиране, обикновено закодирана в BIOS
Пример: INT 10h
Обикновено параметрите които приема са основните регистри ( AX,BX,CX и т.н.)
<b>JMP</b>
Приложение: JMP адрес
Цел: Еквивалентен на GOTO в бейсик, прескача към секция от код
Пример: JMP 00402011
JMP е безусловен скок към секция от код. Има много вариации на тази инструкция, най-важните са:
JZ - Скочи ако имаш установен zero flag. ( Еднакъв с JE )
JNZ - Скочи ако нямаш установен zero flag. ( Еднакъв в JNE )
Обикновено следват инструкцията за сравнение CMP:
CMP RealPassword,BadPassword ; Сравнява истинската парола с нашата парола
JNE GoAway ; Ако не съвпадат тогава излизаме.
<b>MOV</b>
Приложение: MOV dest,src
Цел: Копира стойността от източника към крайната цел
Пример: MOV AX,DX
<b>OR</b>
Приложение: OR dest,src
Цел: Извършва логическо ИЛИ върху двата входни параметри и заменя dest с резултата
Пример: OR DX, AX
<b>RET</b>
Приложение: RET
Цел: Да върне кода от дадена функция
Пример: RET
Обикновено ще виждате RET в края на една функция. Това просто инструктира процесора да се върне към адреса на извикване на функцията.
<b>Push/Pop операции със стека</b>
--------------------
Преди всяко извикване на дадена функция, програмата трябва да 'push'(пъхне) в стека параметрите които функцията очаква. Мислете за стека като за купа чинии - първата поставена последна трябва да се вземе. Важно е да се помни принципа FILO - първи влязъл, последен излязъл. Защото това означава, че параметрите ще бъдат подавани към функцията в обратен ред.
<q>Нека видим следния пример:
windows-ката api функция GetDlgItemText изисква следните параметри:
(1) Handle на диалоговата кутия
(2) Идентификатор на контрола-та
(3) Адрес на буфера за текст
(4) Максимална дължина на низа
Следователно те трябва да и бъдат подадени по този начин:
MOV EDI,[ESP+00000220] ; Зареждаме Handle-а на диалоговата кутия в EDI
PUSH …
| 01 | Използване на Debug - 2 част |
| 02 | Полиморфизъм в C++ |
| 03 | JQuery - в детайли |
| 04 | Класове в C++ II част |
| 05 | Класове в C++ I част |
|
Коментари за Оператори в асемблер