Макроасемблер

Макроасемблеркомпілятор мови програмування асемблера, об'єднаний з макропроцесором, та мова програмування, що підтримується таким компілятором. Широко застосовується в системах, що мають асемблер за основний засіб розробки, такі системи також включають розвинуті бібліотеки макросів.

Призначення

Використання мови програмування макроасемблера дозволяє скоротити час на розробку програми за рахунок зменшення її обсягу та підвищення наочності коду. Інструкції макроасеблера можуть використовуватись одночасно з інструкціями асемблера і в подальшому розгортаються в інструкції асемблера.

Макроасемблер мейнфреймів 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

Див. також

Примітки

Посилання

This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.