Статьи по Assembler


         

Макросы first и second


Автор: Бордачев Андрей Юльевич (glareboa@mail.ru)

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

Комментарии: assembler.ru

Макросы - это мощный, удобный и гибкий инструмент. По сути дела, это целый язык программирования, имеющий единственную цель - совершенствование языка ассемблера.

И он прекрасно справляется с этой задачей. Возможны и существуют технические решения, построенные исключительно на макросредствах, превращающие язык ассемблера в полноценный структурированный язык (то есть содержащий полностью функциональный набор структурных операторов if-else-endif, while-next, do-while, continue, break и т.д.) или даже в некоторое довольно близкое подобие объектно-ориентированного языка. При этом все достоинства ассемблерного программирования сохраняются.

Здесь приведены два варианта макросов, решающих одну и ту же задачу - групповую загрузку в стек и восстановление из стека регистров и переменных. Основная особенность этих макросов - сохранение очередности упоминания параметров в загружающем и восстанавливающем вызовах. Например:

pushr eax,ecx,edi,vasya,edx,petya;...popr eax,ecx,edi,vasya,edx,petya

Это очень удобно. Во-первых, снижается вероятность ошибок из-за перепутывания очередности загрузки/восстановления параметров. Во-вторых, облегчается набор текста: достаточно скопировать строку и заменить в ней команду pushr на popr. В-третьих, несколько сокращается длина листинга, о чем тайно мечтают, но боятся признаться все ассемблерщики.

Эту же задачу решает пара макросов @push и @pop, описанных в файле @struct.inc для проекта MyCall.

Такое разнообразие демонстрирует нам гибкость макроязыка и гамму возможных приемов, которые он дает.

;#################################################################### ;Вариант FIRST

;//////////////////////////////////////////////////////////////////// ;Макрос pushr

;В процессе макрорасширения (встраивания макроса в тело программы ;во время ее компиляции) проверяется, сколько параметров из 8 ;максимально возможных указал программист, и формируется столько ;последовательных команд push, сколько нужно. Очевидно, что ;максимальное число параметров макроса без труда может быть увеличено ;настолько, насколько нужно. ;==================================================================== pushr MACRO R1,R2,R3,R4,R5,R6,R7,R8 IFNB <R1> push R1 ENDIF IFNB <R2> push R2 ENDIF IFNB <R3> push R3 ENDIF IFNB <R4> push R4 ENDIF IFNB <R5> push R5 ENDIF IFNB <R6> push R6 ENDIF IFNB <R7> push R7 ENDIF IFNB <R8> push R8 ENDIF ENDM ;==================================================================== ;Макрос popr




Содержание  Назад  Вперед