Подпрограммы. Выполнение подпрограмм презентация

Содержание

Слайд 2

Выполнение подпрограмм Команда №1 Команда №2 Команда №3 Команда №4

Выполнение подпрограмм

Команда №1

Команда №2

Команда №3

Команда №4

Команда №1

Команда №2

Команда №3

Команда №4

Основная программа

Подпрограмма

Слайд 3

Команды процессора для работы с подпрограммами Вызов подпрограммы – CALL

Команды процессора для работы с подпрограммами

Вызов подпрограммы – CALL
Возврат из подпрограммы

– RET
команды относятся к командам передачи управления
Слайд 4

Команды процессора для работы с подпрограммами 012 013 MOV … CALL 567 014 MOV … Программа

Команды процессора для работы с подпрограммами

012

013

MOV …

CALL 567

014

MOV …

Программа

Слайд 5

Команды процессора для работы с подпрограммами 012 013 MOV …

Команды процессора для работы с подпрограммами

012

013

MOV …

CALL 567

014

MOV …

Программа

EIP

012

Слайд 6

Команды процессора для работы с подпрограммами 012 013 MOV …

Команды процессора для работы с подпрограммами

012

013

MOV …

CALL 567

014

MOV …

Программа

EIP

013

Слайд 7

Команды процессора для работы с подпрограммами 012 013 MOV …

Команды процессора для работы с подпрограммами

012

013

MOV …

CALL 567

014

MOV …

Программа

EIP

014

Слайд 8

Команды процессора для работы с подпрограммами 012 013 MOV …

Команды процессора для работы с подпрограммами

012

013

MOV …

CALL 567

014

MOV …

Программа

EIP

014

567

568

MOV …

ADD …

569

RET

Подпрограмма

Слайд 9

Команды процессора для работы с подпрограммами 012 013 MOV …

Команды процессора для работы с подпрограммами

012

013

MOV …

CALL 567

014

MOV …

Программа

EIP

014

567

568

MOV …

ADD …

569

RET

Подпрограмма

014

Стек

Слайд 10

Команды процессора для работы с подпрограммами 012 013 MOV …

Команды процессора для работы с подпрограммами

012

013

MOV …

CALL 567

014

MOV …

Программа

EIP

567

567

568

MOV …

ADD …

569

RET

Подпрограмма

014

Стек

Слайд 11

Команды процессора для работы с подпрограммами 012 013 MOV …

Команды процессора для работы с подпрограммами

012

013

MOV …

CALL 567

014

MOV …

Программа

EIP

568

567

568

MOV …

ADD …

569

RET

Подпрограмма

014

Стек

Слайд 12

Команды процессора для работы с подпрограммами 012 013 MOV …

Команды процессора для работы с подпрограммами

012

013

MOV …

CALL 567

014

MOV …

Программа

EIP

569

567

568

MOV …

ADD …

569

RET

Подпрограмма

014

Стек

Слайд 13

Команды процессора для работы с подпрограммами 012 013 MOV …

Команды процессора для работы с подпрограммами

012

013

MOV …

CALL 567

014

MOV …

Программа

EIP

570

567

568

MOV …

ADD …

569

RET

Подпрограмма

014

Стек

Слайд 14

Команды процессора для работы с подпрограммами 012 013 MOV …

Команды процессора для работы с подпрограммами

012

013

MOV …

CALL 567

014

MOV …

Программа

EIP

014

567

568

MOV …

ADD …

569

RET

Подпрограмма

Слайд 15

Команды процессора для работы с подпрограммами 012 013 MOV …

Команды процессора для работы с подпрограммами

012

013

MOV …

CALL 567

014

MOV …

Программа

EIP

015

567

568

MOV …

ADD …

569

RET

Подпрограмма

Слайд 16

Где описываются программы MOV … Procedure: ADD … NEG …

Где описываются программы

MOV …
Procedure:
ADD …
NEG …
RET
SUB …
MULL …
CALL Procedure
CDQ
IDIV …

Слайд 17

Где описываются программы MOV … JMP MainNext Procedure: ADD …

Где описываются программы

MOV …
JMP MainNext
Procedure:
ADD …
NEG …
RET
MainNext:
SUB …
MULL …
CALL Procedure
CDQ
IDIV …

Слайд 18

Где описываются программы Перед основной программой После основной программы В отдельном модуле

Где описываются программы

Перед основной программой
После основной программы
В отдельном модуле

Слайд 19

Где описываются программы Перед основной программой .code Procedure: ; код

Где описываются программы

Перед основной программой
.code
Procedure:
; код подпрограммы
RET
Start:
; код основной программы
CALL Procedure
;

код основной программы
end Start
Слайд 20

Где описываются программы После основной программы .code Start: ; код

Где описываются программы

После основной программы
.code
Start:
; код основной программы
CALL Procedure
; код основной

программы
CALL ExitProcess
Procedure:
; код подпрограммы
RET
end Start
Слайд 21

Способы передачи параметров в подпрограммы Через регистры общего назначения Через общую память Через стек

Способы передачи параметров в подпрограммы

Через регистры общего назначения
Через общую память
Через стек

Слайд 22

Передача параметров через регистры общего назначения Factorial: MOV ECX, EAX

Передача параметров через регистры общего назначения

Factorial:
MOV ECX, EAX
MOV EBX, 2
MOV EAX,

1
Cycle:
CMP EBX, ECX
JG EndFunction
MUL EBX
INC EBX
JMP Cycle
EndFunction:
RET
Слайд 23

Передача параметров через регистры общего назначения .data n dd 5

Передача параметров через регистры общего назначения

.data
n dd 5
.data?
result dd ?
.code
Factorial:
; тело

функции
RET
Start:
MOV EAX, n
CALL Factorial
MOV result, EAX
Слайд 24

Передача параметров через регистры общего назначения Достоинства легко использовать большая скорость работы можно возвращать несколько значений

Передача параметров через регистры общего назначения

Достоинства
легко использовать
большая скорость работы
можно возвращать несколько

значений
Слайд 25

Передача параметров через регистры общего назначения Недостатки малое количество параметров

Передача параметров через регистры общего назначения

Недостатки
малое количество параметров
трудности использования регистров в

подпрограмме
трудности вложенных и рекурсивных вызовов
Слайд 26

Передача параметров через общую память Factorial: MOV ECX, param MOV

Передача параметров через общую память

Factorial:
MOV ECX, param
MOV EBX, 2
MOV EAX, 1
Cycle:
CMP

EBX, ECX
JG EndFunction
MUL EBX
INC EBX
JMP Cycle
EndFunction: MOV param+4, EAX
RET
Слайд 27

Передача параметров через общую память .data n dd 5 .data?

Передача параметров через общую память

.data
n dd 5
.data?
result dd ?
param dd 2

dup(?)
.code
MOV EAX, n
MOV param, EAX
CALL Factorial
MOV EAX, param+4
MOV result, EAX
Слайд 28

Передача параметров через общую память Достоинства произвольное количество параметров переменное количество параметров регистры общего назначения свободны

Передача параметров через общую память

Достоинства
произвольное количество параметров
переменное количество параметров
регистры общего назначения

свободны
Слайд 29

Передача параметров через общую память Недостатки низкое быстродействие трудности рекурсивных вызовов

Передача параметров через общую память

Недостатки
низкое быстродействие
трудности рекурсивных вызовов

Слайд 30

Передача параметров через стек Команды работы со стеком push –

Передача параметров через стек

Команды работы со стеком
push – помещает в вершину

стека некоторое значение
pop – извлекает из вершины стека некоторое значение
Слайд 31

Передача параметров через стек Команды работы со стеком pusha –

Передача параметров через стек

Команды работы со стеком
pusha – помещает в вершину

стека значения всех регистров общего назначения
popa – извлекает из вершины стека значения всех регистров общего назначения
Слайд 32

Передача параметров через стек Команды работы со стеком pushf –

Передача параметров через стек

Команды работы со стеком
pushf – помещает в вершину

стека значение регистра флагов
popf – извлекает из вершины стека значения регистра флагов
Слайд 33

Передача параметров через стек Стек: Позволяет обрабатывать только 32-разрядные числа

Передача параметров через стек

Стек:
Позволяет обрабатывать только 32-разрядные числа
Адрес вершины стека храниться

в регистре ESP (смещение относительно сегментного регистра SS)
Вершина стека, это ячейка памяти, содержащая последнее помещённое в стек значение
Слайд 34

Передача параметров через стек Алгоритм работы команды push: add ESP, 4 mov [ESP],

Передача параметров через стек

Алгоритм работы команды push:
add ESP, 4
mov [ESP], <источник>

Слайд 35

Передача параметров через стек Алгоритм работы команды pop: mov , [ESP] sup ESP, 4

Передача параметров через стек

Алгоритм работы команды pop:
mov <приёмник>, [ESP]
sup ESP, 4

Слайд 36

Передача параметров через стек Алгоритм работы команды call: add EIP,

Передача параметров через стек

Алгоритм работы команды call:
add EIP, <размер команды call>
add

ESP, 4
mov [ESP], EIP
mov EIP, <адрес метки>
Слайд 37

Передача параметров через стек Алгоритм работы команды ret: mov EIP, [ESP] sub ESP, 4

Передача параметров через стек

Алгоритм работы команды ret:
mov EIP, [ESP]
sub ESP, 4

Слайд 38

Передача параметров через стек Factorial: MOV ECX, [ESP+8] MOV EBX,

Передача параметров через стек

Factorial:
MOV ECX, [ESP+8]
MOV EBX, 2
MOV EAX, 1
Cycle:
CMP EBX,

ECX
JG EndFunction
MUL EBX
INC EBX
JMP Cycle
EndFunction: MOV [ESP+4], EAX
RET
Слайд 39

Передача параметров через стек .data n dd 5 .data? result

Передача параметров через стек

.data
n dd 5
.data?
result dd ?
.code
PUSH n
PUSH 0
CALL Factorial
POP

result
ADD ESP, 4
Слайд 40

Передача параметров через стек Достоинства произвольное количество параметров переменное количество параметров простота использования легкая организация рекурсии

Передача параметров через стек

Достоинства
произвольное количество параметров
переменное количество параметров
простота использования
легкая организация рекурсии

Слайд 41

Передача параметров через стек Недостатки трудно отслеживать состояние стека после

Передача параметров через стек

Недостатки
трудно отслеживать состояние стека
после вызова подпрограммы основная программа

должна выравнивать стек
Слайд 42

Подпрограммы в C параметры передаются через стек (при этом в

Подпрограммы в C

параметры передаются через стек (при этом в стек параметры

помещаются с конца)
Результат возвращается в регистрах
1 байт – AL
2 байта – AX
4 байта – EAX
8 байт – (EAX, EDX)
Слайд 43

Функции Windows API после вызова функций с фиксированным числом параметров не нужно выравнивать стек

Функции Windows API

после вызова функций с фиксированным числом параметров не нужно

выравнивать стек
Слайд 44

Передача параметров с использование STDCALL Factorial: MOV ECX, [ESP+4] MOV

Передача параметров с использование STDCALL

Factorial:
MOV ECX, [ESP+4]
MOV EBX, 2
MOV EAX, 1
Cycle:
CMP

EBX, ECX
JG EndFunction
MUL EBX
INC EBX
JMP Cycle
EndFunction:
RET 4
Слайд 45

Передача параметров с использование STDCALL .data n dd 5 .data?

Передача параметров с использование STDCALL

.data
n dd 5
.data?
result dd ?
.code
PUSH n
CALL Factorial
MOV

result, EAX
Слайд 46

Создание локальных переменных в стеке [ESP] – точка возврата [ESP

Создание локальных переменных в стеке

[ESP] – точка возврата
[ESP + 4] –

первый параметр функции
[ESP + 8] – второй параметр функции
и т. д.
Слайд 47

Создание локальных переменных в стеке SUB ESP, 4 [ESP] –

Создание локальных переменных в стеке

SUB ESP, 4
[ESP] – локальная переменная
[ESP +

4] – точка возврата
[ESP + 8] – первый параметр функции
[ESP + 12] – второй параметр функции
и т. д.
Слайд 48

Пролог функции PUSH EBP MOV EBP, ESP SUB ESP, 8

Пролог функции

PUSH EBP
MOV EBP, ESP
SUB ESP, 8
[EBP] – исходное значение EBP
[EBP

+ 4] – точка возврата
[EBP + 8] – первый параметр функции
[EBP + 12] – второй параметр функции
и т. д.
[EBP – 4] – вторая локальная переменная
[EBP – 8] – первая локальная переменная
и т. д.
Имя файла: Подпрограммы.-Выполнение-подпрограмм.pptx
Количество просмотров: 66
Количество скачиваний: 0