Similar presentations:
1.1 Ассемблер и языки высокого уровня
1. ЛЕКЦИЯ 1
1.1. АССЕМБЛЕР И ЯЗЫКИВЫСОКОГО УРОВНЯ
2. Передача параметров
Процедуры на ЯВУПроцедуры на
Aссемблере
Договоренности
(конвенции) о
передаче
параметров
3. Основные правила
• Параметры в стеке• Возвращаемое значение в ax (eax)
• Конвенция определяет:
– порядок занесения параметров в стек
(прямой, обратный);
– процедуру, которая должна выполнять
очистку стека (вызывающая/вызываемая);
– искажение имен процедур.
4. Конвенция С
ss:spspo(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 apush 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;
}