Язык ассемблера для процессоров
INTEL, 5-е издание
Кип Р. Ирвин
Глава 5: Процедуры
Слайды подготовил: Кип Р. Ирвин
Редакция: С.Б. Мусин
(c) Pearson Education, 2002. All rights reserved. You may modify and copy this slide show for your personal use, or for use in the classroom, as long as this copyright statement, the author's name, and the title are not changed.
Обзор
•Использование библиотек
•Выполнение операций со стеком
•Объявление и использование процедур
•Процедурное программирование
Irvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. |
Web site Examples |
2 |
|
Мусин С.Б., каф. ПОИТ, БГУИР, 2007 http://ppl.yohng.com. |
|||
|
|
Использование библиотек
•Библиотека объектных модулей
•Вызов процедуры из библиотеки
•Компоновка библиотеки
•Примеры вызова функций
библиотеки
Библиотека объектных модулей
•Файл содержащий процедуры в машинном коде
•собирается из объектных модулей .OBJ
•Для создания библиотеки, . . .
•Подготовьте исходные файлы .ASM
•Скомпилируйте из в объектные модули .OBJ
•Создайте пустой файл .LIB
•Используйте утилиту Microsoft LIB для добавления
.OBJ модулей в библиотеку
Irvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. |
Web site Examples |
3 |
Irvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. |
Web site Examples |
4 |
|
Мусин С.Б., каф. ПОИТ, БГУИР, 2007 http://ppl.yohng.com. |
Мусин С.Б., каф. ПОИТ, БГУИР, 2007 http://ppl.yohng.com. |
|||||
|
|
|
|
Вызов процедуры из библиотеки
•Для объявления процедур подключите файл с прототипами с помощью директивы INCLUDE. Вызов процедуры осуществляется с помощью команды CALL.
•Пример:
INCLUDE Irvine32.inc
.code |
; input argument |
mov eax,1234h |
|
call WriteHex |
; show hex number |
call Crlf |
; end of line |
Irvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. |
Web site Examples |
5 |
|
Мусин С.Б., каф. ПОИТ, БГУИР, 2007 http://ppl.yohng.com. |
|||
|
|
Компоновка библиотеки
•Программа связывается с Irvine32.lib командой компоновщика или редактора связей (linker), см. вызов в make32.bat.
•.LIB файлы: Irvine32.lib, and kernel32.lib
•Последний часть Microsoft Win32 Software Development Kit (SDK)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
6 |
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
||
Irvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. |
Web site Examples |
||||||||
Мусин С.Б., каф. ПОИТ, БГУИР, 2007 http://ppl.yohng.com. |
|||||||||
|
|
|
|
|
|||||
|
|
|
|
|
|
|
|
|
1
Пример 1
Очистка экрана, задержка на 500 мс, печать дампа регисров и флагов.
.code
call Clrscr mov eax,500 call Delay call DumpRegs
Вывод:
EAX=00000613 EBX=00000000 ECX=000000FF EDX=00000000 ESI=00000000 EDI=00000100 EBP=0000091E ESP=000000F6 EIP=00401026 EFL=00000286 CF=0 SF=1 ZF=0 OF=0
Пример 2
Вывод строки на экран.
.data
str1 BYTE "Assembly language is easy!",0
.code
mov edx,OFFSET str1 call WriteString
call Crlf
.data
str1 BYTE "Assembly language is easy!",0Dh,0Ah,0
.code
mov edx,OFFSET str1 call WriteString
Irvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. |
Web site Examples |
7 |
Irvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. |
Web site Examples |
8 |
|
Мусин С.Б., каф. ПОИТ, БГУИР, 2007 http://ppl.yohng.com. |
Мусин С.Б., каф. ПОИТ, БГУИР, 2007 http://ppl.yohng.com. |
|||||
|
|
|
|
Пример 3
Вывод числа на экран в различных системах счисления.
IntVal = 35 |
|
|
.code |
eax,IntVal |
|
mov |
; display binary |
|
call |
WriteBin |
|
call |
Crlf |
; display decimal |
call |
WriteDec |
|
call |
Crlf |
; display hexadecimal |
call |
WriteHex |
call Crlf
Вывод:
0000 0000 0000 |
0000 |
0000 |
0000 |
0010 |
0011 |
|
35 |
|
|
|
|
|
|
23 |
|
|
|
|
|
|
Irvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. |
|
Web site |
Examples |
9 |
||
Мусин С.Б., каф. ПОИТ, БГУИР, 2007 http://ppl.yohng.com. |
|
|
||||
|
|
|
|
|
Пример 4
Ввод строки (в EDX – указатель на строку,
в ECX – максимальное количество символов).
.data
fileName BYTE 80 DUP(0)
.code
mov edx,OFFSET fileName mov ecx,SIZEOF fileName – 1 call ReadString
Нулевой байт добавляется в конец строки автоматически.
Irvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. |
Web site Examples |
10 |
|
Мусин С.Б., каф. ПОИТ, БГУИР, 2007 http://ppl.yohng.com. |
|||
|
|
Пример 5
Вывод случайных значений от 0 до 99 на экран.
.code |
|
; loop counter |
mov ecx,10 |
||
L1: mov |
eax,100 |
; ceiling value |
call |
RandomRange |
; generate random int |
call |
WriteInt |
; display signed int |
call |
Crlf |
; goto next display line |
loop |
L1 |
; repeat loop |
Irvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. |
Web site Examples |
11 |
|
Мусин С.Б., каф. ПОИТ, БГУИР, 2007 http://ppl.yohng.com. |
|||
|
|
Пример 6
Форматированный вывод на экран.
.data
str1 BYTE "Color output is easy!",0
.code
mov eax,yellow + (blue * 16) call SetTextColor
mov edx,OFFSET str1 call WriteString call Crlf
Irvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. |
Web site Examples |
12 |
|
Мусин С.Б., каф. ПОИТ, БГУИР, 2007 http://ppl.yohng.com. |
|||
|
|
2
|
Операции со стеком |
|
|
|
|
Работа стека |
|
|||||
|
|
|
|
|
• Участок памяти с организацией LIFO |
|
||||||
• |
Работа стека |
|
|
|
|
Регистр SS (stack segment) содержит базовый адрес |
|
|||||
• Команды PUSH и POP |
|
|
|
|
стека |
|
|
|||||
|
|
|
|
Регистр ESP (stack pointer) смещение вершины стека |
||||||||
• Использование PUSH и POP |
|
|
|
|||||||||
|
|
|
|
|
|
|
|
|
|
|||
• |
Пример: реверс строки |
|
|
|
|
|
|
|
|
Расположение и параметры |
||
|
|
|
|
|
|
|
|
|||||
• |
Related Instructions |
|
|
|
|
|
|
|
|
|
определяет ассемблер, |
|
|
|
|
|
|
|
|
|
|
компоновщик и ОС |
|
||
|
|
|
|
|
|
|
|
|
|
|
Регистры инициализирует |
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
ОС при загрузке |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
программы в память |
|
|
|
|
|
|
|
|
|
|
|
|
Регистр ESP: |
|
|
|
|
|
|
|
|
|
|
|
|
инициализирует ОС при |
|
|
|
|
|
|
|
|
|
|
|
|
загрузке программы в |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Irvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. |
|
13 |
|
Irvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. |
память |
14 |
||||||
Web site Examples |
|
Web site Examples |
||||||||||
Мусин С.Б., каф. ПОИТ, БГУИР, 2007 http://ppl.yohng.com. |
|
Мусин С.Б., каф. ПОИТ, БГУИР, 2007 http://ppl.yohng.com. |
||||||||||
|
|
|
|
|
||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
Команда PUSH (1-2)
• PUSH синтаксис: |
Уменьшает значение ESP (2 или 4), |
|
• PUSH r/m16 |
||
содержимое регистра или |
||
• PUSH r/m32 |
переменной записывается по |
|
• PUSH imm32 |
адресу [SS:ESP] |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Irvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. |
Web site Examples |
15 |
||||||||||
Мусин С.Б., каф. ПОИТ, БГУИР, 2007 http://ppl.yohng.com. |
||||||||||||
|
|
|
|
|
|
|||||||
|
|
|
|
|
|
|
|
|
|
|
|
Команда PUSH (2-2)
Стек растет вниз – в направлении уменьшения адресов
Irvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. |
Web site Examples |
16 |
|
Мусин С.Б., каф. ПОИТ, БГУИР, 2007 http://ppl.yohng.com. |
|||
|
|
|
|
|
Команда POP |
||||||||
• POP syntax: |
|
|
|
• Извлекает число из стека в |
|||||||
|
• POP r/m16 |
|
|
|
регистр или переменную |
||||||
|
|
|
|
• Прибавляет n к ESP (n = 2 или 4) |
|||||||
|
• POP r/m32 |
|
|
|
|||||||
|
|
|
|
• значение n зависит от атрибута |
|||||||
|
|
|
|
|
|
операнда приемника |
|||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Irvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. |
Web site Examples |
17 |
|
Мусин С.Б., каф. ПОИТ, БГУИР, 2007 http://ppl.yohng.com. |
|||
|
|
Использование PUSH и POP
Применяются для временного сохранения информации. Порядок помещения и извлечения элементов в стек обратный.
push |
esi |
; push registers |
push |
ecx |
|
push |
ebx |
|
mov |
esi,OFFSET dwordVal |
; display some memory |
mov |
ecx,LENGTHOF dwordVal |
|
mov |
ebx,TYPE dwordVal |
|
call |
DumpMem |
|
pop |
ebx |
; restore registers |
pop |
ecx |
|
pop |
esi |
|
Irvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. |
Web site Examples |
18 |
|
Мусин С.Б., каф. ПОИТ, БГУИР, 2007 http://ppl.yohng.com. |
|||
|
|
3
Вложенные циклы
Поместить в стек счетчик внешнего цикла перед входом во внутренний цикл:
mov ecx,100 |
; set outer loop count |
L1: |
; begin the outer loop |
push ecx |
; save outer loop count |
, |
|
pop ecx |
; restore outer loop count |
loop L1 |
; repeat the outer loop |
Пример: реверс строки
•Первый цикл помещает символы строки в стек
•Второй цикл восстанавливает символы строки, но уже в обратном порядке.
•см. RevString.asm
•Вопрос: Почему символы строки копируются в EAX перед помещением в стек?
Потому что только слово(16-бит) или двойное слово (32-бита) можно помещать в стек.
Irvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. |
Web site Examples |
19 |
Irvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. |
Web site Examples |
20 |
|
Мусин С.Б., каф. ПОИТ, БГУИР, 2007 http://ppl.yohng.com. |
Мусин С.Б., каф. ПОИТ, БГУИР, 2007 http://ppl.yohng.com. |
|||||
|
|
|
|
Задача
•Измените RevString.asm, так
•#1: чтобы строка вводилась с клавиатуры пользователем
(длина строки не более 50 символов).
•#2: чтобы осуществлялся реверс массива двойных слов
введенных пользователем с клавиатуры, а результат
выводился на экран.
Irvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. |
Web site Examples |
21 |
|
Мусин С.Б., каф. ПОИТ, БГУИР, 2007 http://ppl.yohng.com. |
|||
|
|
Другие команды для работы со стеком
•PUSHFD и POPFD
•поместить/извлечь содержимое регистра EFLAGS
•PUSHAD поместить в стек содержимое всех РОН
•порядок: EAX, ECX, EDX, EBX, ESP, EBP, ESI, EDI
•POPAD извлечь из стека РОН в обратном порядке
•Аналоги PUSHA и POPA работают с 16-битными регистрами
Irvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. |
Web site Examples |
22 |
|
Мусин С.Б., каф. ПОИТ, БГУИР, 2007 http://ppl.yohng.com. |
|||
|
|
Задача
•Напишите программу, которая:
•Инициализирует EAX, EBX, ECX, EDX, ESI, и EDI
•Помещает эти регистры в стек
•В цикле извлекает из стека значения по одному и
отображает их на экране
Irvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. |
Web site Examples |
23 |
|
Мусин С.Б., каф. ПОИТ, БГУИР, 2007 http://ppl.yohng.com. |
|||
|
|
Объявление процедуры
•Divide et impera
•Ассемблер процедуры C/C++ функции
•Лучше использовать предикативную форму: имя процедуры – глагол, аргументы – прямые дополнения
if (its_friday_afternoon_and_close_to_quitting_time()) go_home();
• Пример объявления процедуры на ассемблере:
sample PROC
.
.
ret sample ENDP
Irvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. |
Web site Examples |
24 |
|
Мусин С.Б., каф. ПОИТ, БГУИР, 2007 http://ppl.yohng.com. |
|||
|
|
Allen Holub C/C++ rules
4
Документирование
Совет: комментарии для каждой процедуры
•Описание всех выполняемых задач.
•Receives: список входных параметров; укажите правила использования и требования.
•Returns: описание возвращаемых параметров.
•Requires: Опциональный список предусловий которые должны выполняться для корректного выполнения.
•Changes: Опциональный список изменений.
Irvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. |
Web site Examples |
25 |
|
Мусин С.Б., каф. ПОИТ, БГУИР, 2007 http://ppl.yohng.com. |
|||
|
|
Пример: процедура SumOf
;---------------------------------------------------------
SumOf PROC
;
;Calculates and returns the sum of three 32-bit integers.
;Receives: EAX, EBX, ECX, the three integers. May be
;signed or unsigned.
;Returns: EAX = sum, and the status flags (Carry,
;Overflow, etc.) are changed.
;Requires: nothing
;---------------------------------------------------------
add eax,ebx add eax,ecx ret
SumOf ENDP
Irvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. |
Web site Examples |
26 |
|
Мусин С.Б., каф. ПОИТ, БГУИР, 2007 http://ppl.yohng.com. |
|||
|
|
Команды CALL и RET |
|
|
Пример CALL-RET (1-2) |
|
|||
• Команда CALL вызывает процедуру |
|
|
|
main PROC |
|
|
|
|
|
0000025 смещение |
00000020 call MySub |
|
|||
• смещение следующей команды сохраняется в |
|
|
00000025 mov eax,ebx |
|
|||
|
|
команды следующей за |
|
||||
стеке (точка возврата) |
|
|
|
CALL |
. |
|
|
|
|
|
|
. |
|
|
|
• помещает адрес процедуры в EIP |
|
|
|
main ENDP |
|
|
|
• Команда RET осуществляет возврат из |
|
|
|
MySub PROC |
|
|
|
процедуры |
|
|
|
00000040 смещение |
00000040 mov eax,edx |
|
|
• вершина стека извлекается в EIP |
|
|
первой команды в MySub |
. |
|
|
|
|
|
|
. |
|
|
||
|
|
|
|
|
ret |
|
|
|
|
|
|
|
MySub ENDP |
|
|
Irvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. |
Web site Examples |
27 |
|
Irvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. |
Web site Examples |
28 |
|
Мусин С.Б., каф. ПОИТ, БГУИР, 2007 http://ppl.yohng.com. |
|
Мусин С.Б., каф. ПОИТ, БГУИР, 2007 http://ppl.yohng.com. |
|||||
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
Пример CALL-RET (2-2) |
|
Вложенные вызовы процедур |
|||||||||||
|
|
|
|
|
|
|
|
|
К моменту вызова Sub3, стек |
|||||
|
|
|
|
|
|
|
|
|
||||||
Команда CALL |
|
|
00000025 |
ESP |
00000040 |
|
|
|
||||||
|
|
|
|
|
уже содержит три адреса: |
|||||||||
помещает 00000025 в |
|
|
|
EIP |
|
|
||||||||
|
|
|
|
|
|
|
|
|
|
|
||||
стек, и загружает |
|
|
|
|
|
|
|
|
|
|
|
|
||
00000040 в EIP |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Команда RET |
00000025 |
ESP |
00000025 |
|
извлекает 00000025 из |
||||
|
|
|
||
стека в EIP |
|
|
EIP |
|
|
|
|
(содержимое стека после исполнения RET)
Irvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. |
Web site Examples |
29 |
Irvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. |
Web site Examples |
30 |
|
Мусин С.Б., каф. ПОИТ, БГУИР, 2007 http://ppl.yohng.com. |
Мусин С.Б., каф. ПОИТ, БГУИР, 2007 http://ppl.yohng.com. |
|||||
|
|
|
|
5
Локальные и глобальные метки |
|
|
Передача параметров (1-3) |
|
||
Локальная метка доступна только внутри процедуры, |
|
|
|
|
|
|
глобальная – во всех процедурах. |
|
|
|
• Хорошо написанные процедуры переносимы |
|
|
|
|
|
|
|
||
main PROC |
; error |
|
|
• Не должны быть привязаны к конкретным |
|
|
jmp L2 |
|
|
переменным |
|
|
|
L1:: |
; global label |
|
|
• Параметры делают процедуры гибкими |
|
|
exit |
|
|
|
|
||
main ENDP |
|
|
|
• Не переусердствуйте |
|
|
sub2 PROC |
|
|
|
|
|
|
; local label |
|
|
• Пример WinAPI |
|
|
|
L2: |
|
|
|
|
||
jmp L1 |
; ok |
|
|
|
|
|
ret |
|
|
|
|
|
|
sub2 ENDP |
|
|
|
|
|
|
Irvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. |
Web site Examples |
31 |
|
Irvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. |
Web site Examples |
32 |
Мусин С.Б., каф. ПОИТ, БГУИР, 2007 http://ppl.yohng.com. |
|
Мусин С.Б., каф. ПОИТ, БГУИР, 2007 http://ppl.yohng.com. |
||||
|
|
|
|
|
||
|
|
|
|
|
|
|
Передача параметров (2-3)
Процедура ArraySum вычисляет сумму элементов массива. Она использует два внешних имени:
ArraySum PROC |
; array index |
|
|
mov esi,0 |
|
||
mov eax,0 |
; set the sum to zero |
|
|
mov ecx,LENGTHOF myarray |
; set number of elements |
|
|
L1: add eax,myArray[esi] |
; add each integer to sum |
|
|
add esi,4 |
; point to next integer |
|
|
loop L1 |
; repeat for array size |
|
|
mov theSum,eax |
; store the sum |
|
|
ret |
|
|
|
ArraySum ENDP |
|
|
|
Не универсальна! |
|
|
|
Irvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. |
Web site Examples |
33 |
|
Мусин С.Б., каф. ПОИТ, БГУИР, 2007 http://ppl.yohng.com. |
|||
|
|
||
|
|
|
Передача параметров (3-3)
Процедура ArraySum возвращает в EAX сумму массива двойных слов, адрес которого содержится в ESI, а длина в ECX:
ArraySum PROC
;Receives: ESI points to an array of doublewords,
;ECX = number of array elements.
;Returns: EAX = sum
;----------------------------------------------------- |
|
|
|
mov eax,0 |
; set the sum to zero |
|
|
L1: add eax,[esi] |
; add each integer to sum |
|
|
add esi,4 |
; point to next integer |
|
|
loop L1 |
; repeat for array size |
|
|
ret |
|
|
|
ArraySum ENDP |
|
|
|
Irvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. |
Web site Examples |
34 |
|
Мусин С.Б., каф. ПОИТ, БГУИР, 2007 http://ppl.yohng.com. |
|||
|
|
Оператор USES
• Указывает используемые регистры
ArraySum PROC USES esi ecx |
; set the sum to zero |
mov eax,0 |
|
... |
|
MASM генерирует
ArraySum PROC push esi push ecx
.
.
pop ecx pop esi ret
ArraySum ENDP
Irvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. |
Web site Examples |
35 |
|
Мусин С.Б., каф. ПОИТ, БГУИР, 2007 http://ppl.yohng.com. |
|||
|
|
Исключение
Сумма значений из трех регистров сохраняется в EAX (3), но вызов команды POP теряет возвращаемое в EAX значение(4):
SumOf PROC |
; sum of three integers |
push eax |
; 1 |
add eax,ebx |
; 2 |
add eax,ecx |
; 3 |
pop eax |
; 4 |
ret |
|
SumOf ENDP |
|
Irvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. |
Web site Examples |
36 |
|
Мусин С.Б., каф. ПОИТ, БГУИР, 2007 http://ppl.yohng.com. |
|||
|
|
6
Структурное программирование
•Проектирование сверху вниз (функциональная декомпозиция) :
•проектируйте прежде чем кодировать
•разбивайте задачи на подзадачи
•иерархическая структура (процедуры)
•тестируйте процедуры отдельно
Irvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. |
Web site Examples |
37 |
|
Мусин С.Б., каф. ПОИТ, БГУИР, 2007 http://ppl.yohng.com. |
|||
|
|
Структурная схема (2-3)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
39 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Irvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. |
|
Web site Examples |
||||||||||||
Мусин С.Б., каф. ПОИТ, БГУИР, 2007 http://ppl.yohng.com. |
|
|||||||||||||
|
|
|
|
|
|
|
|
|||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Структурное программирование(2-2)
Main |
|
Clrscr |
; clear screen |
PromptForIntegers |
|
WriteString |
; display string |
ReadInt |
; input integer |
ArraySum |
; sum the integers |
DisplaySum |
|
WriteString |
; display string |
WriteInt |
; display integer |
Irvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. |
Web site Examples |
38 |
|
Мусин С.Б., каф. ПОИТ, БГУИР, 2007 http://ppl.yohng.com. |
|||
|
|
The End
main()
{
char*a="main(){char*a=%c%s%c;printf(a,34,a,34);}"; printf(a,34,a,34);
}
Irvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. |
Web site Examples |
40 |
|
Мусин С.Б., каф. ПОИТ, БГУИР, 2007 http://ppl.yohng.com. |
|||
|
|
7