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