Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
palivo_finalv0_2.docx
Скачиваний:
2
Добавлен:
01.07.2025
Размер:
2 Мб
Скачать
☆

76. Макроси. Приклади програмування

Определение:

Макрос (от англ. macros, мн.ч. от macro) — программный объект, при обработке «развёртывающийся» в последовательность действий и/или команд. Корректный перевод термина с английского — «макрокоманда», слово же «макрос» получило распространение благодаря использованию в локализованных продуктах американской корпорации Microsoft.

Макросы в программировании

В языке ассемблера, а также в некоторых других языках программирования, макрос — символьное имя, заменяемое при обработке препроцессором на последовательность программных инструкций. Для каждого компилятора (ассемблера) существует специальный синтаксис объявления и вызова макросов. При этом внутри макроса могут быть условные операторы препроцессора, многие компиляторы поддерживают при вызове макросов передачу аргументов. В этом случае один и тот же макрос может «разворачиваться» в различные последовательности инструкций при каждом вызове — в зависимости от сработавших разветвлений внутри макроса и переданных ему аргументов.

.586 .model flat, c .code ;процедура StrHex_MY записує текст шістнадцятькового коду ;перший параметр - адреса буфера результату (рядка символів) ;другий параметр - адреса числа ;третій параметр - розрядність числа у бітах (має бути кратна 8) StrHex_MY proc push ebp mov ebp,esp mov ecx, [ebp+8] ;кількість бітів числа cmp ecx, 0 jle @exitp shr ecx, 3 ;кількість байтів числа mov esi, [ebp+12] ;адреса числа mov ebx, [ebp+16] ;адреса буфера результату @cycle: mov dl, byte ptr[esi+ecx-1] ;байт числа - це дві hex-цифри mov al, dl shr al, 4 ;старша цифра call HexSymbol_MY mov byte ptr[ebx], al mov al, dl ;молодша цифра call HexSymbol_MY mov byte ptr[ebx+1], al mov eax, ecx cmp eax, 4 jle @next dec eax and eax, 3 ;проміжок розділює групи по вісім цифр cmp al, 0 jne @next mov byte ptr[ebx+2], 32 ;код символа проміжку inc ebx @next: add ebx, 2 dec ecx jnz @cycle mov byte ptr[ebx], 0 ;рядок закінчується нулем @exitp: pop ebp ret 12 StrHex_MY endp ;ця процедура обчислює код hex-цифри ;параметр - значення AL ;результат -> AL HexSymbol_MY proc and al, 0Fh add al, 48 ;так можна тільки для цифр 0-9 cmp al, 58 jl @exitp add al, 7 ;для цифр A,B,C,D,E,F @exitp: ret HexSymbol_MY endp end

77. Процедури. Визначення, виклик. Приклади програмування

Процедура – группа команд для решения конкретной подзадачи.

Синтаксис процедуры:

имя_процедуры PROC [[модификатор_языка ] язык] [расстояние ]

команды

[имя_процедуры ] ENDP

Пример

model small .stack 100h .data .code my_proc procnear ret my_proc endp start: end start

процедуру можно распологать в конце программы либо вкладывать в другую. Во втором случае неоходимо предусмотреть обход тела процедуры, ограниченного директивами PROC и ENDP, с помощью JMP/

Команда CALL осуществляет вызов процедуры (подпрограммы). Синтаксис команды: call [модификатор] имя_процедуры Подобно команде JMP команда CALL передает управление по адресу с символическим именем имя_процедуры, но при этом в стеке сохраняется адрес возврата (то есть адрес команды, следующей после команды CALL).

http://volgota.com/yaroslavz/assembler-14-procedury-uslovnye-perehody-i-cikly

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]