🗊 Презентация Глава 3. Модульное программирование (ассемблер)

Нажмите для полного просмотра!
Глава 3. Модульное программирование (ассемблер), слайд №1 Глава 3. Модульное программирование (ассемблер), слайд №2 Глава 3. Модульное программирование (ассемблер), слайд №3 Глава 3. Модульное программирование (ассемблер), слайд №4 Глава 3. Модульное программирование (ассемблер), слайд №5 Глава 3. Модульное программирование (ассемблер), слайд №6 Глава 3. Модульное программирование (ассемблер), слайд №7 Глава 3. Модульное программирование (ассемблер), слайд №8 Глава 3. Модульное программирование (ассемблер), слайд №9 Глава 3. Модульное программирование (ассемблер), слайд №10 Глава 3. Модульное программирование (ассемблер), слайд №11 Глава 3. Модульное программирование (ассемблер), слайд №12 Глава 3. Модульное программирование (ассемблер), слайд №13 Глава 3. Модульное программирование (ассемблер), слайд №14 Глава 3. Модульное программирование (ассемблер), слайд №15 Глава 3. Модульное программирование (ассемблер), слайд №16 Глава 3. Модульное программирование (ассемблер), слайд №17 Глава 3. Модульное программирование (ассемблер), слайд №18 Глава 3. Модульное программирование (ассемблер), слайд №19 Глава 3. Модульное программирование (ассемблер), слайд №20 Глава 3. Модульное программирование (ассемблер), слайд №21 Глава 3. Модульное программирование (ассемблер), слайд №22 Глава 3. Модульное программирование (ассемблер), слайд №23 Глава 3. Модульное программирование (ассемблер), слайд №24 Глава 3. Модульное программирование (ассемблер), слайд №25 Глава 3. Модульное программирование (ассемблер), слайд №26 Глава 3. Модульное программирование (ассемблер), слайд №27 Глава 3. Модульное программирование (ассемблер), слайд №28 Глава 3. Модульное программирование (ассемблер), слайд №29 Глава 3. Модульное программирование (ассемблер), слайд №30 Глава 3. Модульное программирование (ассемблер), слайд №31 Глава 3. Модульное программирование (ассемблер), слайд №32 Глава 3. Модульное программирование (ассемблер), слайд №33 Глава 3. Модульное программирование (ассемблер), слайд №34 Глава 3. Модульное программирование (ассемблер), слайд №35 Глава 3. Модульное программирование (ассемблер), слайд №36 Глава 3. Модульное программирование (ассемблер), слайд №37 Глава 3. Модульное программирование (ассемблер), слайд №38 Глава 3. Модульное программирование (ассемблер), слайд №39 Глава 3. Модульное программирование (ассемблер), слайд №40 Глава 3. Модульное программирование (ассемблер), слайд №41 Глава 3. Модульное программирование (ассемблер), слайд №42 Глава 3. Модульное программирование (ассемблер), слайд №43 Глава 3. Модульное программирование (ассемблер), слайд №44 Глава 3. Модульное программирование (ассемблер), слайд №45 Глава 3. Модульное программирование (ассемблер), слайд №46 Глава 3. Модульное программирование (ассемблер), слайд №47 Глава 3. Модульное программирование (ассемблер), слайд №48 Глава 3. Модульное программирование (ассемблер), слайд №49 Глава 3. Модульное программирование (ассемблер), слайд №50 Глава 3. Модульное программирование (ассемблер), слайд №51 Глава 3. Модульное программирование (ассемблер), слайд №52 Глава 3. Модульное программирование (ассемблер), слайд №53 Глава 3. Модульное программирование (ассемблер), слайд №54 Глава 3. Модульное программирование (ассемблер), слайд №55 Глава 3. Модульное программирование (ассемблер), слайд №56 Глава 3. Модульное программирование (ассемблер), слайд №57 Глава 3. Модульное программирование (ассемблер), слайд №58 Глава 3. Модульное программирование (ассемблер), слайд №59 Глава 3. Модульное программирование (ассемблер), слайд №60 Глава 3. Модульное программирование (ассемблер), слайд №61 Глава 3. Модульное программирование (ассемблер), слайд №62 Глава 3. Модульное программирование (ассемблер), слайд №63 Глава 3. Модульное программирование (ассемблер), слайд №64 Глава 3. Модульное программирование (ассемблер), слайд №65 Глава 3. Модульное программирование (ассемблер), слайд №66 Глава 3. Модульное программирование (ассемблер), слайд №67 Глава 3. Модульное программирование (ассемблер), слайд №68 Глава 3. Модульное программирование (ассемблер), слайд №69 Глава 3. Модульное программирование (ассемблер), слайд №70 Глава 3. Модульное программирование (ассемблер), слайд №71 Глава 3. Модульное программирование (ассемблер), слайд №72 Глава 3. Модульное программирование (ассемблер), слайд №73 Глава 3. Модульное программирование (ассемблер), слайд №74 Глава 3. Модульное программирование (ассемблер), слайд №75 Глава 3. Модульное программирование (ассемблер), слайд №76 Глава 3. Модульное программирование (ассемблер), слайд №77 Глава 3. Модульное программирование (ассемблер), слайд №78 Глава 3. Модульное программирование (ассемблер), слайд №79 Глава 3. Модульное программирование (ассемблер), слайд №80 Глава 3. Модульное программирование (ассемблер), слайд №81 Глава 3. Модульное программирование (ассемблер), слайд №82

Содержание

Вы можете ознакомиться и скачать презентацию на тему Глава 3. Модульное программирование (ассемблер). Доклад-сообщение содержит 82 слайдов. Презентации для любого класса можно скачать бесплатно. Если материал и наш сайт презентаций Mypresentation Вам понравились – поделитесь им с друзьями с помощью социальных кнопок и добавьте в закладки в своем браузере.

Слайды и текст этой презентации


Слайд 1


Глава 3 Модульное программирование МГТУ им. Н.Э. Баумана Факультет Информатика и системы управления Кафедра Компьютерные системы и сети Лектор:...
Описание слайда:
Глава 3 Модульное программирование МГТУ им. Н.Э. Баумана Факультет Информатика и системы управления Кафедра Компьютерные системы и сети Лектор: д.т.н., проф. Иванова Галина Сергеевна

Слайд 2


3.1 Организация передачи управления в процедуру и обратно Процедура в ассемблере – это относительно самостоятельный фрагмент, к которому возможно...
Описание слайда:
3.1 Организация передачи управления в процедуру и обратно Процедура в ассемблере – это относительно самостоятельный фрагмент, к которому возможно обращение из разных мест программы. На языках высокого уровня такие фрагменты оформляют соответствующим образом и называют подпрограммами: функциями или процедурами в зависимости от способа возврата результата. Поддержка модульного принципа для ассемблера означает, что в языке существуют специальные машинные команды вызова подпрограммы и обратной передачи управления. Кроме машинных команд в языке существует набор макрокоманд и директив, упрощающий работу с процедурами.

Слайд 3


Команды вызова процедуры и возврата управления 1. Команда вызова процедуры: CALL rel32/r32/m32 ; вызов внутрисегментной ; процедуры (near - ближний )...
Описание слайда:
Команды вызова процедуры и возврата управления 1. Команда вызова процедуры: CALL rel32/r32/m32 ; вызов внутрисегментной ; процедуры (near - ближний ) CALL sreg:r32/m48 ; вызов межсегментной процедуры ; (far - дальний ) 2. Команда возврата управления: RET [] где – количество байт, извлекаемых из стека при возврате управления – используется для удаления из стека параметров процедуры (см. далее). При выполнении команды вызова процедуры автоматически в стек заносится адрес команды, следующей за командой вызова процедуры, – адрес возврата. Команда возврата управления выбирает этот адрес из стека и осуществляет переход по нему.

Слайд 4


Организация передачи управления в процедуру
Описание слайда:
Организация передачи управления в процедуру

Слайд 5


Описание процедуры В отличие от языков высокого уровня, ассемблер не требует специального оформления процедур. На любой адрес программы можно...
Описание слайда:
Описание процедуры В отличие от языков высокого уровня, ассемблер не требует специального оформления процедур. На любой адрес программы можно передать управление командой вызова процедуры, и оно вернется к вызвавшей процедуре, как только встретится команда возврата управления. Такая организация может привести к трудночитаемым программам, поэтому в язык Ассемблера включены директивы логического оформления процедур. Для описания процедуры используются специальные директивы начала и завершения. В минимальной форме (при опущенных операндах) они выглядят так: PROC ENDP

Слайд 6


Пример 3.1 Процедура MaxDword () .CONST MsgExit DB "Press Enter to Exit",0AH,0DH,0 .DATA A DWORD 56 B DWORD 34 .DATA? D DWORD ? inbuf DB...
Описание слайда:
Пример 3.1 Процедура MaxDword () .CONST MsgExit DB "Press Enter to Exit",0AH,0DH,0 .DATA A DWORD 56 B DWORD 34 .DATA? D DWORD ? inbuf DB 100 DUP (?) .CODE Start: call MaxDword ; вызов процедуры XOR EAX,EAX Invoke StdOut,ADDR MsgExit Invoke StdIn,ADDR inbuf,LengthOf inbuf Invoke ExitProcess,0 END Start

Слайд 7


Текст процедуры MaxDword PROC push EAX ; сохранить регистр push EBX ; сохранить регистр lea EBX,D; загрузить адрес результата mov EAX,A; загрузить...
Описание слайда:
Текст процедуры MaxDword PROC push EAX ; сохранить регистр push EBX ; сохранить регистр lea EBX,D; загрузить адрес результата mov EAX,A; загрузить первое число в регистр cmp EAX,B ; сравнить числа jg con ; если первое больше, то на запись mov EAX,B; загрузить второе число в регистр con: mov [EBX],EAX ; записать результат pop EBX ; восстановить регистр pop EAX ; восстановить регистр ret ; вернуть управление MaxDword ENDP

Слайд 8


3.2 Передача параметров в подпрограмму Параметры могут быть переданы в подпрограмму: через регистры – перед вызовом процедуры параметры или их адреса...
Описание слайда:
3.2 Передача параметров в подпрограмму Параметры могут быть переданы в подпрограмму: через регистры – перед вызовом процедуры параметры или их адреса загружаются в регистры, также в регистрах возвращаются результаты; напрямую – с использованием механизма глобальных переменных: при совместной трансляции, при раздельной трансляции; через таблицу адресов – в программе создается таблица, содержащая адреса параметров, и адрес этой таблице передается в процедуру через регистр; через стек – перед вызовом процедуры параметры или их адреса заносятся в стек, после завершения процедуры они из стека удаляются.

Слайд 9


3.2.1 Передача параметров в регистрах Пример 3.2 a. Определение суммы двух целых чисел .DATA A DWORD 56 B DWORD 34 .DATA? D DWORD ? inbuf DB 100 DUP...
Описание слайда:
3.2.1 Передача параметров в регистрах Пример 3.2 a. Определение суммы двух целых чисел .DATA A DWORD 56 B DWORD 34 .DATA? D DWORD ? inbuf DB 100 DUP (?) .CODE Start: ; Занесение параметров в регистры lea EDX,D ; адрес результата mov EAX,A ; первое число mov EBX,B ; второе число call SumDword ; вызов процедуры Invoke StdOut,ADDR MsgExit Invoke StdIn,ADDR inbuf,LengthOf inbuf Invoke ExitProcess,0

Слайд 10


Процедура, получающая параметры в регистрах SumDword PROC add EAX,EBX mov [EDX],EAX ret SumDword ENDP ; завершение модуля End Start Процедуры,...
Описание слайда:
Процедура, получающая параметры в регистрах SumDword PROC add EAX,EBX mov [EDX],EAX ret SumDword ENDP ; завершение модуля End Start Процедуры, получающие параметры в регистрах, используется, если количество параметров невелико, и в программе на ассемблере можно найти соответствующее количество незанятых регистров.

Слайд 11


3.2.2 Процедуры с глобальными переменными (совместная трансляция) При совместной трансляции, когда основная программа и процедура объединены в один...
Описание слайда:
3.2.2 Процедуры с глобальными переменными (совместная трансляция) При совместной трансляции, когда основная программа и процедура объединены в один исходный модуль, ассемблер строит общую таблицу символических имен. Следовательно, и основная программа и процедура могут обращаться к символическим именам, объявленным в том же модуле. Способ не технологичен: процедуры не универсальны; большое количество ошибок.

Слайд 12


Процедура, работающая с глобальными переменными при совместной трансляции Пример 3.2 b. Определение суммы двух чисел. .DATA A DWORD 56 ; первое число...
Описание слайда:
Процедура, работающая с глобальными переменными при совместной трансляции Пример 3.2 b. Определение суммы двух чисел. .DATA A DWORD 56 ; первое число B DWORD 34 ; второе число .DATA? D DWORD ? ; место для результата .CODE Start: call SumDword . . . SumDword PROC mov EAX,A ; поместили в регистр 1-е число add EAX,B ; сложили со вторым mov D,EAX ; результат отправили на место ret SumDword ENDP End Start

Слайд 13


3.2.3 Многомодульные программы Объединение модулей осуществляется во время компоновки программ. Программа и процедуры, размещенные в разных исходных...
Описание слайда:
3.2.3 Многомодульные программы Объединение модулей осуществляется во время компоновки программ. Программа и процедуры, размещенные в разных исходных модулях, на этапе ассемблирования «не видят» символических имен друг друга. Чтобы сделать имена видимыми за пределами модуля, их объявляют «внешними». Для этого используют директивы PUBLIC, EXTERN или EXTERNDEF.

Слайд 14


Директивы описания глобальных переменных Директива описания внутренних имен, к которым возможно обращение извне: PUBLIC [] [, ] ... где – описатель,...
Описание слайда:
Директивы описания глобальных переменных Директива описания внутренних имен, к которым возможно обращение извне: PUBLIC [] [, ] ... где – описатель, определяющий правила формирования внутренних имен (см. далее); – символическое имя, которое должно быть доступно (видимо) в других модулях. Директива описания внешних имен, к которым есть обращение в этом модуле: EXTERN [] [()]: [,[] [()]:... где - NEAR, FAR, BYTE, WORD, DWORD и т.д. Универсальная директива описания имен обоих типов – может использоваться вместо PUBLIC и EXTERN: EXTERNDEF [] :[[] :]...

Слайд 15


Основная программа при раздельной трансляции Пример 3.2 c. Сложение двух чисел. .DATA A DWORD 56 B DWORD 34 .DATA? D DWORD ? PUBLIC A,B,D ;...
Описание слайда:
Основная программа при раздельной трансляции Пример 3.2 c. Сложение двух чисел. .DATA A DWORD 56 B DWORD 34 .DATA? D DWORD ? PUBLIC A,B,D ; объявление внутренних имен EXTERN SumDword:near ; объявление внеш. имен .CODE Start: call SumDword ; вызов подпрограммы . . .

Слайд 16


Процедура при раздельной трансляции .586 .MODEL flat, stdcall OPTION CASEMAP:NONE EXTERN A:DWORD,B:DWORD,D:DWORD .CODE SumDword PROC c push EAX mov...
Описание слайда:
Процедура при раздельной трансляции .586 .MODEL flat, stdcall OPTION CASEMAP:NONE EXTERN A:DWORD,B:DWORD,D:DWORD .CODE SumDword PROC c push EAX mov EAX,A add EAX,B mov D,EAX pop EAX ret SumDword ENDP END

Слайд 17


3.2.4 Передача параметров через таблицу адресов Пример 3.2 d. Сумма элементов массива .DATA ary SWORD 5,6,1,7,3,4 ; массив count DWORD 6 ; размер...
Описание слайда:
3.2.4 Передача параметров через таблицу адресов Пример 3.2 d. Сумма элементов массива .DATA ary SWORD 5,6,1,7,3,4 ; массив count DWORD 6 ; размер массива .DATA? sum SWORD ? ; сумма элементов tabl DWORD 3 dup(?) ; таблица адресов параметров EXTERN masculc:near .CODE Start: ; формирование таблицы адресов параметров mov tabl,offset ary mov tabl+4,offset count mov tabl+8,offset sum mov EBX,offset tabl call masculc . . .

Слайд 18


Процедура, получающая параметры через таблицу адресов .586 .MODEL flat, stdcall OPTION CASEMAP:NONE .CODE masculc proc c push AX ; сохранение...
Описание слайда:
Процедура, получающая параметры через таблицу адресов .586 .MODEL flat, stdcall OPTION CASEMAP:NONE .CODE masculc proc c push AX ; сохранение регистров push ECX push EDI push ESI ; использование таблицы адресов параметров mov ESI,[EBX] ;адрес массива mov EDI,[EBX+4];адрес размера mov ECX,[EDI] ;размер массива mov EDI,[EBX+8];адрес результата

Слайд 19


Процедура, получающая параметры через таблицу адресов ; суммирование элементов массива xor AX,AX cycl: add AX,[ESI] add ESI,2 loop cycl ;...
Описание слайда:
Процедура, получающая параметры через таблицу адресов ; суммирование элементов массива xor AX,AX cycl: add AX,[ESI] add ESI,2 loop cycl ; формирование результатов mov [EDI],AX pop ESI ; восстановление регистров pop EDI pop ECX pop AX ret masculc endp END

Слайд 20


3.2.5 Передача параметров через стек
Описание слайда:
3.2.5 Передача параметров через стек

Слайд 21


Пример 3.2 e. Максимальное из двух чисел. .DATA A DWORD 56 B DWORD 34 .DATA? D DWORD ? .CODE Start: lea EBX,D ; получение адреса результата push EBX...
Описание слайда:
Пример 3.2 e. Максимальное из двух чисел. .DATA A DWORD 56 B DWORD 34 .DATA? D DWORD ? .CODE Start: lea EBX,D ; получение адреса результата push EBX ; загрузка в стек адреса результата push B ; загрузка в стек второго числа push A ; загрузка в стек первого числа call MaxDword . . .

Слайд 22


Процедура, получающая параметры через стек MaxDword PROC push EBP mov EBP,ESP push EAX push EBX mov EBX,[EBP+16] ;адрес D mov EAX,[EBP+8];A cmp...
Описание слайда:
Процедура, получающая параметры через стек MaxDword PROC push EBP mov EBP,ESP push EAX push EBX mov EBX,[EBP+16] ;адрес D mov EAX,[EBP+8];A cmp EAX,[EBP+12];B jg con mov EAX,[EBP+12] con: mov [EBX],EAX pop EBX pop EAX mov ESP,EBP pop EBP ret 12 MaxDword ENDP

Слайд 23


3.3 Директивы описания процедур 1. Директива заголовка процедуры: PROC [] [] [] [USES ] [, [:]]... Тип вызова: far – межсегментный; near –...
Описание слайда:
3.3 Директивы описания процедур 1. Директива заголовка процедуры: PROC [] [] [] [USES ] [, [:]]... Тип вызова: far – межсегментный; near – внутрисегментный (используется по умолчанию). Конвенция о связи (по умолчанию используется указанная в .MODEL): STDCALL – стандартные Windows; C – принятые в языке С, PASCAL – принятые в языке Pascal и др. Доступность – видимость процедуры из других модулей: public – общедоступная (используется по умолчанию); private – внутренняя; export – межсегментная и общедоступная.

Слайд 24


Директивы описания процедур (2) Список используемых регистров – содержит регистры, используемые в процедуре, для их автоматического сохранения и...
Описание слайда:
Директивы описания процедур (2) Список используемых регистров – содержит регистры, используемые в процедуре, для их автоматического сохранения и восстановления. Параметр – имя параметра процедуры. Тип – тип параметра или VARARG. Если тип не указан, то по умолчанию для 32-х разрядной адресации берется DWORD. Если указано VARARG, то вместо одного аргумента разрешается использовать список аргументов через запятую. Пример: ABC PROC NEAR STDCALL PUBLIC USES EAX, X:DWORD,Y:BYTE,H:DWORD PTR

Слайд 25


Директивы описания процедур (3) 2. Директива описания локальных переменных: LOCAL [[]][:] [,[[]][:]]... Описывает переменные, размещаемые в стеке,...
Описание слайда:
Директивы описания процедур (3) 2. Директива описания локальных переменных: LOCAL [[]][:] [,[[]][:]]... Описывает переменные, размещаемые в стеке, т.е. локальные. Используется только в процедурах. Помещается сразу после PROC. Пример: ABC PROC USES EAX,X:VARARG LOCAL ARRAY[20]:BYTE . . .

Слайд 26


Директивы описания процедур (3) 3. Директива объявления прототипа: PROTO [] [] [] [, [:]]... Значения параметров совпадают со значениями параметров...
Описание слайда:
Директивы описания процедур (3) 3. Директива объявления прототипа: PROTO [] [] [] [, [:]]... Значения параметров совпадают со значениями параметров директивы PROC. Используется для указания списка и типов параметров для директивы INVOKE. Пример: MaxDword PROTO NEAR STDCALL PUBLIC X:DWORD,Y:DWORD,ptrZ:PTR DWORD или с учетом умолчаний: MaxDword PROTO X:DWORD,Y:DWORD,ptrZ:PTR DWORD

Слайд 27


Директивы описания процедур (4) 4. Директива вызова процедуры: INVOKE [, ] Аргументы должны совпадать с параметрами по порядку и типу. Типы...
Описание слайда:
Директивы описания процедур (4) 4. Директива вызова процедуры: INVOKE [, ] Аргументы должны совпадать с параметрами по порядку и типу. Типы аргументов директивы INVOKE: целое значение, например: 27h, -128; выражение целого типа, использующее операторы получения атрибутов полей данных: TYPE mas, SYZEOF mas+2, OFFSET AR, (10*20); регистр, например: EAX, BH; адрес переменной, например: Ada1, var2_2; адресное выражение, например: 4[EDI+EBX], Ada+24, ADDR AR.

Слайд 28


Операторы получения атрибутов полей данных ADDR – возвращает ближний или дальний адрес переменной в зависимости от модели памяти – для Flat –...
Описание слайда:
Операторы получения атрибутов полей данных ADDR – возвращает ближний или дальний адрес переменной в зависимости от модели памяти – для Flat – ближний; OFFSET – возвращает смещение переменной относительно начала сегмента – для Flat совпадает с ADDR; TYPE – возвращает размер в байтах элемента описанных данных, например: A BYTE 34 dup (?); // размер = 1 LENGTHOF – возвращает количество элементов, заданных при определении данных, например A BYTE 34 dup (?); // 34 элемента SIZEOF – возвращает размер поля данных в байтах; PTR – изменяет тип поля данных на время выполнения команды.

Слайд 29


Пример 3.3 Использование PROC, PROTO и INVOKE MaxDword PROTO X:DWORD,Y:DWORD,ptrZ:PTR DWORD .DATA A DWORD 56 B DWORD 34 .DATA? D DWORD ? .CODE Start:...
Описание слайда:
Пример 3.3 Использование PROC, PROTO и INVOKE MaxDword PROTO X:DWORD,Y:DWORD,ptrZ:PTR DWORD .DATA A DWORD 56 B DWORD 34 .DATA? D DWORD ? .CODE Start: INVOKE MaxDword,A,B,ADDR D . . . MaxDword PROC USES EAX EBX, X:DWORD, Y:DWORD, ptrZ:PTR DWORD mov EBX,ptrZ mov EAX,X cmp EAX,Y jg con mov EAX,Y con: mov [EBX],EAX ret MaxDword ENDP

Слайд 30


3.4 Функции ввода-вывода консольного режима (MASM32.lib) Библиотека MASM32.lib содержит специальные функции ввода вывода консольного режима: 1....
Описание слайда:
3.4 Функции ввода-вывода консольного режима (MASM32.lib) Библиотека MASM32.lib содержит специальные функции ввода вывода консольного режима: 1. Процедура ввода в консольном режиме: StdIn PROC lpszBuffer:DWORD, ; буфер ввода bLen:DWORD ; размер буфера ввода до 128 байт 2. Процедура удаления символов конца строки при вводе: StripLF PROC string:DWORD ; буфер ввода 3. Процедура вывода завершающейся нулем строки в окно консоли: StdOut PROC lpszText:DWORD ; буфер вывода, зав. нулем 4. Функция позиционирования курсора: locate PROC x:DWORD, y:DWORD ; местоположение курсора, (0,0) – левый верхний угол 5. Процедура очистки окна консоли: ClearScreen PROC

Слайд 31


Пример 3.4 Программа извлечения корня квадратного 1 = 12 1+3 = 4 = 22 1+3+5 = 9 = 32 .DATA zap DB 'Input value
Описание слайда:
Пример 3.4 Программа извлечения корня квадратного 1 = 12 1+3 = 4 = 22 1+3+5 = 9 = 32 .DATA zap DB 'Input value

Слайд 32


Программа извлечения корня квадратного (2) .CODE Start: ;Ввод vvod: Invoke StdOut,ADDR zap ; вывод запроса Invoke StdIn,ADDR string,LengthOf string...
Описание слайда:
Программа извлечения корня квадратного (2) .CODE Start: ;Ввод vvod: Invoke StdOut,ADDR zap ; вывод запроса Invoke StdIn,ADDR string,LengthOf string ;ввод Invoke StripLF,ADDR string ; преобразование конца ; строки в ноль

Слайд 33


Программа извлечения корня квадратного (3) ; Преобразование mov BH,'9' mov BL,'0' lea ESI,string cld xor DI,DI cycle: lodsb ; загружаем символ cmp...
Описание слайда:
Программа извлечения корня квадратного (3) ; Преобразование mov BH,'9' mov BL,'0' lea ESI,string cld xor DI,DI cycle: lodsb ; загружаем символ cmp AL,0 ; если 0, то на вычисление je calc cmp AL,BL ; это цифра ? jb vvod cmp AL,BH ja vvod sub AL,30h ; получаем цифру из символа cbw ; расширяем push AX ; сохраняем mov AX,10 ; заносим 10 mul DI ; умножаем, результат в DX:AX pop DI ; в DI - цифра add AX,DI mov DI,AX ; в DI - число jmp cycle

Слайд 34


Программа извлечения корня квадратного (4) ;Вычисление sqrt(dx#ax) calc: mov BX,1 mov CX,0 mov AX,1 ; сумма cycle: cmp AX,DI ja preobr add BX,2 add...
Описание слайда:
Программа извлечения корня квадратного (4) ;Вычисление sqrt(dx#ax) calc: mov BX,1 mov CX,0 mov AX,1 ; сумма cycle: cmp AX,DI ja preobr add BX,2 add AX,BX jc vvod inc CX jmp cycle

Слайд 35


Программа извлечения корня квадратного (5) ; Преобразование preobr: mov AX,CX mov EDI,2 mov BX,10 again: cwd div BX add DL,30h mov rez[EDI],DL dec...
Описание слайда:
Программа извлечения корня квадратного (5) ; Преобразование preobr: mov AX,CX mov EDI,2 mov BX,10 again: cwd div BX add DL,30h mov rez[EDI],DL dec EDI cmp AX,0 jne again Invoke StdOut,ADDR otw

Слайд 36


Функции преобразования данных 1. Функция преобразования завершающейся нулем строки в число: atol proc lpSrc:DWORD ; результат – в EAX 2. Функция...
Описание слайда:
Функции преобразования данных 1. Функция преобразования завершающейся нулем строки в число: atol proc lpSrc:DWORD ; результат – в EAX 2. Функция преобразования строки (зав. нулем) в беззнаковое число: ustr2dw proc pszString:DWORD ; результат – в EAX 3. Функция преобразования строки в число: atodw proc uses edi esi, String:PTR BYTE ; результат – в EAX 4. Процедура преобразования числа в строку (16 байт): ltoa proc lValue:DWORD, lpBuffer:DWORD 5. Процедура преобразования числа в строку: dwtoa proc public uses esi edi, dwValue:DWORD, lpBuffer:PTR BYTE 6. Процедура преобразования беззнакового числа в строку: udw2str proc dwNumber:DWORD, pszString:DWORD

Слайд 37


Пример 3.5 Преобразование ввода .CODE Start: ; Ввод vvod: Invoke StdOut,ADDR zap Invoke StdIn,ADDR string,LengthOf string Invoke StripLF,ADDR string...
Описание слайда:
Пример 3.5 Преобразование ввода .CODE Start: ; Ввод vvod: Invoke StdOut,ADDR zap Invoke StdIn,ADDR string,LengthOf string Invoke StripLF,ADDR string ; Преобразование Invoke atol,ADDR string ;результат в EAX mov DI,AX

Слайд 38


Пример 3.5 Преобразование вывода ; Преобразование preobr: mov word ptr root,CX Invoke dwtoa,root,ADDR rez ; Вывод Invoke StdOut,ADDR otw . . . .DATA...
Описание слайда:
Пример 3.5 Преобразование вывода ; Преобразование preobr: mov word ptr root,CX Invoke dwtoa,root,ADDR rez ; Вывод Invoke StdOut,ADDR otw . . . .DATA root DWORD 0 otw DB 13,10,'Root =' rez DB 16 dup (?)

Слайд 39


3.5 Создание рекурсивных процедур Рекурсивные алгоритмы предполагают реализацию в виде процедуры, которая сама себя вызывает. При этом необходимо...
Описание слайда:
3.5 Создание рекурсивных процедур Рекурсивные алгоритмы предполагают реализацию в виде процедуры, которая сама себя вызывает. При этом необходимо обеспечить, чтобы каждый последовательный вызов процедуры не разрушал данных, полученных в результате предыдущего вызова. Для этого, каждый вызов должен запоминать свой набор параметров, регистры и все промежуточные результаты. Для сохранения данных очередного вызова и передачи параметров следующей активации процедуры лучше использовать стек. А удобную организацию стека позволяет организовать структуры.

Слайд 40


Структура Структура представляет собой шаблон с описаниями форматов данных, который можно накладывать на различные участки памяти, чтобы затем...
Описание слайда:
Структура Структура представляет собой шаблон с описаниями форматов данных, который можно накладывать на различные участки памяти, чтобы затем обращаться к полям этих участков памяти с помощью имен, определенных в описании структуры. Формат описания структуры: STRUCT ENDS где – любой набор псевдокоманд определения переменных или вложенных структур. Пример: Student struct Family db 20 dup (' ' ) ; Фамилия студента Name db 15 dup(' ') ; Имя Birthdata db ' / / ' ; Дата рождения Student ends Последовательность директив описывает, но не размещает в памяти структуру данных!!!

Слайд 41


Структура (2) Кроме того, структуры используются, когда в программе многократно повторяются сложные коллекции данных с единым строением, но с...
Описание слайда:
Структура (2) Кроме того, структуры используются, когда в программе многократно повторяются сложные коллекции данных с единым строением, но с различными значениями полей. В этом случае, для создания такой структуры в памяти достаточно использовать имя структуры как псевдокоманды по шаблону: Примеры: stud1 Student stud2 Student Для чтения или записи в элемент структуры применяется точечная нотация: . . Пример: stud1.Name[EBX]

Слайд 42


Пример Ex03_06. Вычисление факториала  N*(N-1)! , при N0 – рекурсивное утверждение; N! =   1 , при N=0 – базисное утверждение. Фрейм активации...
Описание слайда:
Пример Ex03_06. Вычисление факториала  N*(N-1)! , при N0 – рекурсивное утверждение; N! =   1 , при N=0 – базисное утверждение. Фрейм активации включает: значение регистра EBP – 4 байта, адрес возврата для случая ближнего вызова – 4 байта, число N на данном уровне рекурсии – 2 байта, адрес результата – 4 байта. Для работы с фреймом опишем структуру, перечисляя поля в том порядке, в котором они будут размещаться в стеке: FRAME STRUCT SAVE_EBP DD ? SAVE_EIP DD ? N DW ? RESULT_ADDR DD ? FRAME ENDS

Слайд 43


Факториал. Основная программа .DATA n DW 5 ; исходное число .DATA? result DW ? ; память под результат .CODE Start: push offset result ;запись адреса...
Описание слайда:
Факториал. Основная программа .DATA n DW 5 ; исходное число .DATA? result DW ? ; память под результат .CODE Start: push offset result ;запись адреса результата push n ; запись исходного числа call fact ...

Слайд 44


Факториал. Рекурсивная процедура fact PROC push EBP mov EBP,ESP push EBX push AX ; извлечение из стека адреса результата mov...
Описание слайда:
Факториал. Рекурсивная процедура fact PROC push EBP mov EBP,ESP push EBX push AX ; извлечение из стека адреса результата mov EBX,FRAME.result_addr[EBP] ; извлечение из стека текущего N mov AX,FRAME.n[EBP] cmp AX,0 je done ; выход из рекурсии push EBX ; сохранение в стеке адреса рез. dec AX ; N=N-1 push AX ; сохранение в стеке очередного N call fact ; рекурсивный вызов

Слайд 45


Факториал. Рекурсивная процедура (2) ; извлечение из стека адреса результата mov EBX,FRAME.result_addr[EBP] ; вычисление результата очередной...
Описание слайда:
Факториал. Рекурсивная процедура (2) ; извлечение из стека адреса результата mov EBX,FRAME.result_addr[EBP] ; вычисление результата очередной активации mov AX,[EBX] mul FRAME.n[EBP] jmp short return done: mov EAX,1 ; запоминаем результат активации return: mov [EBX],AX pop AX pop EBX pop EBP ret 6 fact ENDP End Start

Слайд 46


3.6 Связь разноязыковых модулей Основные проблемы связи разноязыковых модулей: осуществление совместной компоновки модулей; организация передачи и...
Описание слайда:
3.6 Связь разноязыковых модулей Основные проблемы связи разноязыковых модулей: осуществление совместной компоновки модулей; организация передачи и возврата управления; передача параметров: с использованием глобальных переменных, с использованием стека (по значению и по ссылке), обеспечение возврата результата функции; обеспечение корректного использования регистров процессора.

Слайд 47


Конвенции о связях WINDOW’s Конвенции о связи определяют правила передачи параметров.
Описание слайда:
Конвенции о связях WINDOW’s Конвенции о связи определяют правила передачи параметров.

Слайд 48


Конвенции о связях WINDOW’s (2) тип вызова: NEAR; модель памяти: FLAT; пролог и эпилог – стандартные, текст зависит от конвенции и наличия локальных...
Описание слайда:
Конвенции о связях WINDOW’s (2) тип вызова: NEAR; модель памяти: FLAT; пролог и эпилог – стандартные, текст зависит от конвенции и наличия локальных переменных: пролог: push EBP mov EBP,ESP [ sub ESP,] эпилог: mov ESP,EBP pop EBP ret []

Слайд 49


Конвенции о связях WINDOW’s (3) особенности компиляции и компоновки: можно не сохранять регистры: EAX, EDX, ECX. необходимо сохранять регистры: EBX,...
Описание слайда:
Конвенции о связях WINDOW’s (3) особенности компиляции и компоновки: можно не сохранять регистры: EAX, EDX, ECX. необходимо сохранять регистры: EBX, EBP, ESI, EDI.

Слайд 50


3.6.1 Delphi PASCAL – MASM32 в модуле на Delphi Pascal процедуры и функции, реализованные на ассемблере, должны быть объявлены и описаны как внешние...
Описание слайда:
3.6.1 Delphi PASCAL – MASM32 в модуле на Delphi Pascal процедуры и функции, реализованные на ассемблере, должны быть объявлены и описаны как внешние external с указанием конвенции связи, например: procedure ADD1 (A,B:integer; Var C:integer); pascal;external; модуль ассемблера предварительно ассемблируется и подключается с использованием директивы обычно – в секции реализации модуля Delphi Pascal: {$l }

Слайд 51


Delphi PASCAL – MASM32 совместимость часто используемых данных: Word – 2 байта, Byte, Char, Boolean – 1 байт, Integer, Pointer – 4 байта, массив –...
Описание слайда:
Delphi PASCAL – MASM32 совместимость часто используемых данных: Word – 2 байта, Byte, Char, Boolean – 1 байт, Integer, Pointer – 4 байта, массив – располагается в памяти по строкам, строка (shortstring) – содержит байт длины и далее символы; параметры передаются через стек: по значению – в стеке копия значения, по ссылке – в стеке указатель на параметр; результаты функций возвращаются через регистры: байт, слово – в AX, двойное слово, указатель – в EAX, строка – через указатель, помещенный в стек после параметров.

Слайд 52


Пример 3.7 Delphi PASCAL – MASM32 Описание в Delphi: Implementation {$l .obj} // Имя файла совпадает с конвенцией procedure ADD1 (A,B:integer; Var...
Описание слайда:
Пример 3.7 Delphi PASCAL – MASM32 Описание в Delphi: Implementation {$l .obj} // Имя файла совпадает с конвенцией procedure ADD1 (A,B:integer; Var C:integer); ;external; Вызов процедуры: ADD1(A,B,C); Указание Для ассемблирования установить в настройках проекта RadASM: 3,O,$B\ML.EXE /c,2 или добавить в Turbo Delphi инструмент (меню Tools/Configure tools/Add), назначив в качестве инструмента программу-ассемблер ml.exe: Title: Masm32 - название; Program: C:\masm32\bin\ml.exe - путь и ассемблер; Working Dir: - пусто (текущий каталог); Parameters: /c /Fl $EDNAME - текущий файл редактора среды, ассемблирование и листинг

Слайд 53


Пример 3.7 Конвенция PASCAL .586 .model flat .code public ADD1 ADD1 proc push EBP mov EBP,ESP mov EAX,[EBP+16] add EAX,[EBP+12] mov EDX,[EBP+8] mov...
Описание слайда:
Пример 3.7 Конвенция PASCAL .586 .model flat .code public ADD1 ADD1 proc push EBP mov EBP,ESP mov EAX,[EBP+16] add EAX,[EBP+12] mov EDX,[EBP+8] mov [EDX],EAX pop EBP ret 12 ADD1 endp end

Слайд 54


Пример 3.7 Конвенция cdecl .586 .model flat .code public ADD1 ADD1 proc push EBP mov EBP,ESP mov EAX,[EBP+8] add EAX,[EBP+12] mov EDX,[EBP+16] mov...
Описание слайда:
Пример 3.7 Конвенция cdecl .586 .model flat .code public ADD1 ADD1 proc push EBP mov EBP,ESP mov EAX,[EBP+8] add EAX,[EBP+12] mov EDX,[EBP+16] mov [EDX],EAX pop EBP ret ADD1 endp end

Слайд 55


Пример 3.7 Конвенция stdcall (safecall = stdcall + исключение при ошибке) .586 .model flat .code public ADD1 ADD1 proc push EBP mov EBP,ESP mov...
Описание слайда:
Пример 3.7 Конвенция stdcall (safecall = stdcall + исключение при ошибке) .586 .model flat .code public ADD1 ADD1 proc push EBP mov EBP,ESP mov EAX,[EBP+8] add EAX,[EBP+12] mov EDX,[EBP+16] mov [EDX],EAX pop EBP ret 12 ADD1 endp end

Слайд 56


Пример 3.7 Конвенция register .586 .model flat .code public ADD1 ADD1 proc add EDX,EAX mov ECX],EDX ret ADD1 endp end
Описание слайда:
Пример 3.7 Конвенция register .586 .model flat .code public ADD1 ADD1 proc add EDX,EAX mov ECX],EDX ret ADD1 endp end

Слайд 57


Глава 3. Модульное программирование (ассемблер), слайд №57
Описание слайда:

Слайд 58


Окно CPU
Описание слайда:
Окно CPU

Слайд 59


Пример 3.7 Процедура без параметров Увеличение каждого элемента массива А на 5 procedure Array_add;pascal;external; .586 .MODEL flat .DATA EXTERNDEF...
Описание слайда:
Пример 3.7 Процедура без параметров Увеличение каждого элемента массива А на 5 procedure Array_add;pascal;external; .586 .MODEL flat .DATA EXTERNDEF A:SBYTE; описание внешнего имени .CODE PUBLIC Array_add Array_add proc mov eax,offset A ; обращение к массиву A mov ecx,5 cycl: add byte ptr 0[eax],5 inc eax loop cycl ret Array_add endp end

Слайд 60


Пример 3.7 Pascal – Assembler - Pascal implementation {$L string.obj} function Dell1(S:ShortString): ShortString;pascal;external; procedure...
Описание слайда:
Пример 3.7 Pascal – Assembler - Pascal implementation {$L string.obj} function Dell1(S:ShortString): ShortString;pascal;external; procedure Print(n:byte);pascal; begin Form1.Edit3.text:=inttostr(n); end;

Слайд 61


Пример 3.7 Pascal – Assembler – Pascal (2) .586 .MODEL flat .CODE PUBLIC Dell1 EXTERNDEF Print:near Dell1 PROC push EBP mov EBP,ESP push ESI push EDI...
Описание слайда:
Пример 3.7 Pascal – Assembler – Pascal (2) .586 .MODEL flat .CODE PUBLIC Dell1 EXTERNDEF Print:near Dell1 PROC push EBP mov EBP,ESP push ESI push EDI push EBX mov ESI,[EBP+12] ; адрес исходной строки mov EDI,[EBP+8] ; адрес строки-результата xor ECX,ECX mov CL,[ESI] ; загрузка длины строки inc ESI inc EDI

Слайд 62


Пример 3.7 Pascal – Assembler – Pascal (3) mov DL,0 jcxz prod3 mov BX,1 cld cycl1: lodsb cmp AL,' ' je prod1 mov BX,0 inc DL stosb jmp prod2 prod1:...
Описание слайда:
Пример 3.7 Pascal – Assembler – Pascal (3) mov DL,0 jcxz prod3 mov BX,1 cld cycl1: lodsb cmp AL,' ' je prod1 mov BX,0 inc DL stosb jmp prod2 prod1: cmp BX,1 je prod2 mov BX,1 inc DL stosb prod2: loop cycl1

Слайд 63


Пример 3.7 Pascal – Assembler – Pascal (4) cmp DL,0 je prod3 cmp BX,1 jne prod3 dec DL prod3: mov AL,DL mov EDI,[EBP+8] stosb pop EBX pop EDI pop ESI...
Описание слайда:
Пример 3.7 Pascal – Assembler – Pascal (4) cmp DL,0 je prod3 cmp BX,1 jne prod3 dec DL prod3: mov AL,DL mov EDI,[EBP+8] stosb pop EBX pop EDI pop ESI push AX call Print mov ESP,EBP pop EBP ret 8 Dell1 endp end

Слайд 64


Дисассемблер функции копирования строки Function Dell(S:ShortString):ShortString; pascal; Begin Result:=S; End; push EBP пролог mov EBP,ESP add...
Описание слайда:
Дисассемблер функции копирования строки Function Dell(S:ShortString):ShortString; pascal; Begin Result:=S; End; push EBP пролог mov EBP,ESP add ESP,$FFFF FF00; лок.память push ESI сохранение регистров push EDI mov ESI,[EBP+$C]; адрес исходной строки lea EDI,[EBP-$0000 0100] ; строка-буфер xor ECX,ECX установка счетчика mov CL,[ESI] inc ECX ; учет байт длины rep movsb ; копирование строки-параметра

Слайд 65


Дисассемблер функции копирования строки (2) mov EAX,[EBP+8] lea EDX,[EBP-$100] вызов процедуры копирования call @PStrCpy pop EDI восстановление...
Описание слайда:
Дисассемблер функции копирования строки (2) mov EAX,[EBP+8] lea EDX,[EBP-$100] вызов процедуры копирования call @PStrCpy pop EDI восстановление регистров pop ESI mov ESP,EBP эпилог pop EBP ret 8

Слайд 66


Локальные данные подпрограмм Паскаль не позволяет создавать в подпрограммах глобальные переменные, поэтому в подпрограммах работают с локальными...
Описание слайда:
Локальные данные подпрограмм Паскаль не позволяет создавать в подпрограммах глобальные переменные, поэтому в подпрограммах работают с локальными данными, размещаемыми в стеке. Пример 3.13. Организация локальных переменных без использования директив ассемблера Подпрограмма на ассемблере: получает строку, копирует в локальную память, затем копирует из лок. памяти в результат, вызывает Паскаль для вывода длины строки.

Слайд 67


Пример 3.13. Организация локальных переменных implementation {$L Copy} {$R *.dfm} function CopyS(St:ShortString):ShortString;pascal;external;...
Описание слайда:
Пример 3.13. Организация локальных переменных implementation {$L Copy} {$R *.dfm} function CopyS(St:ShortString):ShortString;pascal;external; procedure Print(n:integer);pascal; begin Form1.Edit3.Text:=inttostr(n);end; procedure TForm1.Button1Click(Sender: TObject); Var S,St:ShortString; begin St:=Edit1.Text; S:=CopyS(St); Edit2.Text:=S; end;

Слайд 68


Пример 3.13а. Без использования директив .586 .MODEL flat A STRUCT ; объявляем структуру S BYTE 256 DUP (?) ; лок. переменная A ENDS ; завершение...
Описание слайда:
Пример 3.13а. Без использования директив .586 .MODEL flat A STRUCT ; объявляем структуру S BYTE 256 DUP (?) ; лок. переменная A ENDS ; завершение структуры .CODE public CopyS externdef Print:near CopyS proc push EBP ; сохранение EBP mov EBP,ESP ; загрузка нового EBP sub ESP,260 ; место под лок. переменные push ESI ; сохранение регистров push EDI mov ESI,[EBP+12] ; адрес параметра lea EDI,A.S[EBP-256];обращение к лок.п. xor EAX,EAX lodsb ; загрузка длины строки stosb ; сохранение длины строки

Слайд 69


Пример 3.13а. Без использования директив mov ECX,EAX ; загрузка счетчика cld rep movsb ; копирование строки lea ESI,A.S[EBP-256] ; загрузка адр.копии...
Описание слайда:
Пример 3.13а. Без использования директив mov ECX,EAX ; загрузка счетчика cld rep movsb ; копирование строки lea ESI,A.S[EBP-256] ; загрузка адр.копии mov EDI,[EBP+8] ; загрузка адр. рез-та lodsb ; загрузка длины строки stosb ; сохранение длины строки mov ECX,EAX ; загрузка счетчика rep movsb ; копирование строки pop EDI ; восстановление регистров pop ESI push EAX ; сохранение длины строки call Print ; вывод длины строки mov ESP,EBP ; удаление лок. переменных pop EBP ; восстан. старого EBP ret 8 ; выход и удал. параметров CopyS endp end

Слайд 70


Пример 3.13б. С помощью директив .CODE public CopyS externdef Print:near CopyS PROC NEAR PASCAL PUBLIC USES ESI EDI, Str1:PTR DWORD,Str2:PTR DWORD...
Описание слайда:
Пример 3.13б. С помощью директив .CODE public CopyS externdef Print:near CopyS PROC NEAR PASCAL PUBLIC USES ESI EDI, Str1:PTR DWORD,Str2:PTR DWORD LOCAL S[256]:byte ; Копируем строку в локальную память mov ESI,Str1 lea EDI,S xor EAX,EAX lodsb stosb mov ECX,EAX cld rep movsb

Слайд 71


Пример 3.13б. С помощью директив ; Копируем строку в результат lea ESI,S mov EDI,Str2 lodsb stosb mov ECX,EAX rep movsb ; Выводим длину строки push...
Описание слайда:
Пример 3.13б. С помощью директив ; Копируем строку в результат lea ESI,S mov EDI,Str2 lodsb stosb mov ECX,EAX rep movsb ; Выводим длину строки push EAX call Print ret CopyS endp end

Слайд 72


3.6.2 С++ Builder – MASM32 в модуле на C++ Builder процедуры и функции, реализованные на ассемблере, должны быть объявлены и описаны как внешние...
Описание слайда:
3.6.2 С++ Builder – MASM32 в модуле на C++ Builder процедуры и функции, реализованные на ассемблере, должны быть объявлены и описаны как внешние extern с указанием конвенции связи, например: extern void __pascal add1(int a,int b,int *c); модуль ассемблера предварительно ассемблируется и подключается с использованием директивы USEOBJ к файлу реализации проекта Project1.cpp: USEOBJ (“.obj”);

Слайд 73


Пример 3.8 С++ Builder – MASM32 в модуле на C++ процедуры и функции, реализованные на ассемблере, должны быть объявлены и описаны как внешние extern...
Описание слайда:
Пример 3.8 С++ Builder – MASM32 в модуле на C++ процедуры и функции, реализованные на ассемблере, должны быть объявлены и описаны как внешние extern с указанием конвенции связи, например: extern void add1(int a,int b,int *c); при выполнении ассемблирования должны быть использованы опции: для Masm32: ml /coff /c add1.asm для Tasm 5.0: tasm32 /ml add1.asm объектный модуль необходимо подключить к проекту Project1.cpp, используя директиву USEOBJ: USEOBJ (“asm1.obj”); вызов процедуры должен осуществляться по правилам С++: add1(a,b,&c);

Слайд 74


Пример 3.8 Конвенция cdecl extern void __cdecl ADD1(int a,int b,int *c); .586 .model flat .code public @add1$qiipi @add1$qiipi proc push EBP mov...
Описание слайда:
Пример 3.8 Конвенция cdecl extern void __cdecl ADD1(int a,int b,int *c); .586 .model flat .code public @add1$qiipi @add1$qiipi proc push EBP mov EBP,ESP mov EAX,[EBP+8] add EAX,[EBP+12] mov EDX,[EBP+16] mov [EDX],EAX pop EBP ret @add1$qiipi endp end

Слайд 75


Пример 3.8 Конвенция cdecl + «С» extern ”C” void __cdecl ADD1(int a,int b,int *c); .586 .model flat .code public _ADD1 _ADD1 proc push EBP mov...
Описание слайда:
Пример 3.8 Конвенция cdecl + «С» extern ”C” void __cdecl ADD1(int a,int b,int *c); .586 .model flat .code public _ADD1 _ADD1 proc push EBP mov EBP,ESP mov EAX,[EBP+8] add EAX,[EBP+12] mov EDX,[EBP+16] mov [EDX],EAX pop EBP ret _ADD1 endp end

Слайд 76


3.6.3 Visual С++ – MASM32 в модуле на Visual C++ подключаемые процедуры и функции должны быть объявлены как внешние extern с указанием конвенции...
Описание слайда:
3.6.3 Visual С++ – MASM32 в модуле на Visual C++ подключаемые процедуры и функции должны быть объявлены как внешние extern с указанием конвенции связи, например: extern void __pascal add1(int a,int b,int *c); при ассемблировании должны быть использованы опции: для Masm32: ml /coff /c add1.asm для Tasm 5.0: tasm32 /ml add1.asm если ассемблирование выполняется в Visual Studio, то необходимо добавить внешний инструмент Tools\External Tools…\Add: Title: Masm32 Command: C:\masm32\bin\ml.exe Arguments: /coff /c /Fl $(ItemPath) Initial directory: $(ItemDir) файл с расширением .obj необходимо подключить к проекту посредством пункта меню Project/Add existing item… вызов процедуры должен оформляться по правилам С++, например: add1(a,b,&c);

Слайд 77


Пример 3.9 Конвенция _ _cdecl extern ”C” void _cdecl add1(int a,int b,int *c); .586 .model flat .code public _add1 _add1 proc push EBP mov EBP,ESP...
Описание слайда:
Пример 3.9 Конвенция _ _cdecl extern ”C” void _cdecl add1(int a,int b,int *c); .586 .model flat .code public _add1 _add1 proc push EBP mov EBP,ESP mov EAX,[EBP+8] add EAX,[EBP+12] mov EDX,[EBP+16] mov [EDX],EAX pop EBP ret _add1 endp end

Слайд 78


Пример 3.10 Объявление внешних переменных #include "stdafx.h" #include #include extern "C" void __cdecl ADD1(int a,int b); extern...
Описание слайда:
Пример 3.10 Объявление внешних переменных #include "stdafx.h" #include #include extern "C" void __cdecl ADD1(int a,int b); extern int d; int main() { int a,b; printf("Input a and b:\n"); scanf("%d %d",&a,&b); ADD1(a,b); printf("d=%d.",d); getch(); return 0; };

Слайд 79


Объявление внешних переменных в процедуре на ассемблере .586 .model flat .data public ?d@@3HA ?d@@3HA DD ? .code public _ADD1 _ADD1 proc push EBP mov...
Описание слайда:
Объявление внешних переменных в процедуре на ассемблере .586 .model flat .data public ?d@@3HA ?d@@3HA DD ? .code public _ADD1 _ADD1 proc push EBP mov EBP,ESP mov EAX,[EBP+8] add EAX,[EBP+12] mov ?d@@3HA,EAX pop EBP ret _ADD1 endp end

Слайд 80


Пример 3.11 Конвенция _ _stdcall extern ”C” void __stdcall ADD1(int a,int b,int *c); .386 .model flat .code public ?ADD1@@YGXHHPAH@Z...
Описание слайда:
Пример 3.11 Конвенция _ _stdcall extern ”C” void __stdcall ADD1(int a,int b,int *c); .386 .model flat .code public ?ADD1@@YGXHHPAH@Z ?ADD1@@YGXHHPAH@Z proc push EBP mov EBP,ESP mov ECX,[EBP+8] add ECX,[EBP+12] mov EAX,[EBP+16] mov [EAX],ECX pop EBP ret 12 ?ADD1@@YGXHHPAH@Z endp end

Слайд 81


Пример 3.12 Конвенция _ _fastcall extern ”С” void __fastcall add1(int a,int b,int *c); .386 .model flat .code public @ADD1@12 @ADD1@12 proc push EBP...
Описание слайда:
Пример 3.12 Конвенция _ _fastcall extern ”С” void __fastcall add1(int a,int b,int *c); .386 .model flat .code public @ADD1@12 @ADD1@12 proc push EBP mov EBP,ESP add ECX,EDX mov EDX,[EBP+8] mov [EDX],ECX pop EBP ret 4 ; стек освобождает процедура @ADD1@12 endp end

Слайд 82


Глава 3. Модульное программирование (ассемблер), слайд №82
Описание слайда:



Похожие презентации
Mypresentation.ru
Загрузить презентацию