Макроасемблер
Макроасемблер — компілятор мови програмування асемблера, об'єднаний з макропроцесором, та мова програмування, що підтримується таким компілятором. Широко застосовується в системах, що мають асемблер за основний засіб розробки, такі системи також включають розвинуті бібліотеки макросів.
Призначення
Використання мови програмування макроасемблера дозволяє скоротити час на розробку програми за рахунок зменшення її обсягу та підвищення наочності коду. Інструкції макроасеблера можуть використовуватись одночасно з інструкціями асемблера і в подальшому розгортаються в інструкції асемблера.
Макроасемблер мейнфреймів IBM
Ранні версії мейнфреймів компанії IBM — IBM/360 та IBM/370 — використовували асемблер як основний інструмент системного програмування та включали бібліотеки макросів для системного і прикладного програмування, а також засоби розробки макросів.
Приклад використання макроасемблера в ОС VM, в якій асемблер виступав як основний інструмент системного програмування. Код програми Hello world! на макроасеблері:
HELLO CSECT USING HELLO,15 SAVE (14,12) WTO 'HELLO, WORLD!' RETURN (14,12),RC=0 END
Програма містить наступні інструкції макроасемблера:
- SAVE — групове збереження регістрів процесора окрім R13, який містить адресу області збереження;
- WTO — вивід повідомлення на термінал (Write To Operator);
- RETURN — групове відновлення регістрів, встановлення коду завершення і повернення в основну програму.
Аналогічний код на асемблері (не цілком тотожний і зі збереженням одного макрооператора WTO):
HELLO CSECT The name of this program is 'HELLO' * Register 15 points here on entry from OPSYS or caller. STM 14,12,12(13) Save registers 14,15, and 0 thru 12 in caller's Save area LR 12,15 Set up base register with program's entry point address USING HELLO,12 Tell assembler which register we are using for pgm. base LA 15,SAVE Now Point at our own save area ST 15,8(13) Set forward chain ST 13,4(15) Set back chain LR 13,15 Set R13 to address of new save area * -end of housekeeping (similar for most programs) - WTO 'Hello World' Write To Operator (Operating System macro) * L 13,4(13) restore address to caller-provided save area XC 8(4,13),8(13) Clear forward chain LM 14,12,12(13) Restore registers as on entry DROP 12 The opposite of 'USING' SR 15,15 Set register 15 to 0 so that the return code (R15) is Zero BR 14 Return to caller * SAVE DS 18F Define 18 fullwords to save calling program registers END HELLO This is the end of the program
Макроасеблер MASM
Microsoft Macro Assembler надає можливості створення та використання макросів.
Приклад програми Hello world! на макроасемблері MASM[1]:
include \masm32\include\masm32rt.inc .data HelloWorld db "Hello World!",13,10,0 .code start: invoke StdOut, addr HelloWorld invoke ExitProcess, 0 end start
Див. також
Примітки
Посилання
- Ассемблер и макроассемблер (рос.)