ЛЕКЦИЯ 1
Передача параметров
Основные правила
Конвенция С
_spo proc
Конвенция Pascal
SPO proc
Конвенция stdcall
Ассемблерные вставки в программе на С
139.50K
Category: programmingprogramming

1.1 Ассемблер и языки высокого уровня

1. ЛЕКЦИЯ 1

1.1. АССЕМБЛЕР И ЯЗЫКИ
ВЫСОКОГО УРОВНЯ

2. Передача параметров

Процедуры на ЯВУ
Процедуры на
Aссемблере
Договоренности
(конвенции) о
передаче
параметров

3. Основные правила

• Параметры в стеке
• Возвращаемое значение в ax (eax)
• Конвенция определяет:
– порядок занесения параметров в стек
(прямой, обратный);
– процедуру, которая должна выполнять
очистку стека (вызывающая/вызываемая);
– искажение имен процедур.

4. Конвенция С

ss:sp
spo(a,b,c); = push c
push b
push a
call _spo
add sp,6
с
b
a
ip
A

5. _spo proc

; пролог
push bp
mov bp,sp
;первый аргумент [bp+4]
;…
pop bp
ret
_spo endp
bp=sp
c
b
a
ip
bp
bp+8
bp+6
bp+4
bp+2
A

6. Конвенция Pascal

spo(a,b,c); = push a
push b
push c
call SPO
ss:sp
a
b
c
ip
A

7. SPO proc

; пролог
push bp
mov bp,sp
;первый аргумент [bp+8]
;…
pop bp
ret 6
SPO endp
bp=sp
a
b
c
ip
bp
bp+8
bp+6
bp+4
bp+2

8. Конвенция stdcall

Standard Calling Convention
соглашение о передаче параметров
функций Win API
• обратный порядок занесения в стек
• вызываемая функция очищает стек

9. Ассемблерные вставки в программе на С

#include <stdio.h>
int main()
{
int a = 1, b = 2, c;
_asm
{
mov eax, a
mov ebx, b
add eax, ebx
mov c, eax
}
printf("a + b = %d + %d = %d\n",a,b,c);
return 0;
}
English     Русский Rules