Upload presentasi
Presentasi sedang didownload. Silahkan tunggu
Diterbitkan olehSary Wati Telah diubah "10 tahun yang lalu
1
Macro Processor Fungsi Dasar Fitur Berorientasi Mesin Pilihan Rancangan Contoh Implementasi
2
Instruksi macro Instruksi macro (macro) Contoh:
Merupakan kemudahan notasi bagi programer untuk menulis versi steno sebuah program. Merepresentasikan kelompok statements yang umum digunakan pada source program. Digantikan oleh macro processor dengan kelompok statement bahasa sumber yang berhubungan. Operasi ini dinamakan “expanding the macro” Contoh: Misalnya perlu dilakukan saving isi semua register sebelum memanggil subrutin. Ini memerlukan serangkaian instruksi. Kita dapat mendefisikan dan menggunakan macro, SAVEREGS, untuk merepresentasikan rangkaian instruksi ini.
3
Macro Processor Macro processor
Fungsinya terutama melibatkan substitusi satu kelompok karakter atau baris dengan yang lainnya. Biasanya, ia tidak melakukan analisis teks yang ditanganinya. Ia tidak peduli terhadap arti statement yang terlibat pada saat macro expansion. Dengan demikian, perancangan macro processor pada umumnya tidak berorientasi mesin. Macro processor digunakan pada bahasa assembly bahasa pemrograman tingkat tinggi, misalnya, C or C++ command language Sistem Operasi tujuan umum
4
Fungsi Dasar Definition macro Invokasi macro Ekspansi macro One-Pass Algorithm Struktur Data
5
Definisi Macro Dua assembler directive yang baru digunakan pada definisi macro: MACRO: mengidentifikasi awal definisi macro MEND: mengidentifikasi akhir definisi macro Prototype (pattern) untuk macro: Setiap parameter dimulai dengan ‘&’ label op operands name MACRO parameter : body MEND Body: statement yang akan dibangkitkan sebagai ekspansi macro.
6
Contoh Definisi Macro Definisi Macro Macro tidak memiliki label
7
Contoh Definisi Macro Definisi macro Macro tidak memiliki label
8
Invokasi Macro Statement invokasi macro (macro call) memberi nama instruksi macro yang dipanggil dan argument pada ekspansi macro. Proses invokasi macro invocation pemanggilan subrutin sangat berbeda. Statement macro body di-ekspan setiap kali macro dipanggil. Statement subrutin hanya muncul sekali, tidak bergantung dari berapa kali subrutin tersebut dipanggil.
9
Contoh Invokasi Macro Invokasi macro
10
Ekspansi Macro Setiap statement invokasi macro akan di-ekspan menjadi statement-statement yang membentuk body macro tersebut. Argumen dari invokasi macro disubstitusi untuk parameter pada prototipe macro. Argumen dan parameter berhubungan satu sama lain menurut posisi mereka. Argumen pertama pada invokasi macro berhubungan dengan parameter pertama pada prototipe macro, dst.
11
Ekspansi Macro Comment line di dalam macro body telah dihapus, tetapi comment untuk statement individual tetap ada. Statement invokasi macro itu sendiri dimasukkan sebagai comment line. Label statement invokasi macro CLOOP tetap ada sebagai label statement pertama yangg dibangkitkan pada ekspansi macro. Ini memungkinkan programmer memakai instruksi macro dengan cara yang sama seperti mnemonic bahasa assembler.
12
Contoh Ekspansi Macro
13
Contoh Ekspansi Macro .
14
Contoh Ekspansi Macro
15
Tidak Ada Label pada Macro
Masalah label di body macro: Akan ada label yang duplikat, yang akan dianggap sebagai error oleh assembler, jika macro yang sama di-ekspan berkali-kali pada beberapa tempat di program program. Solusi: Mudahnya, jangan gunakan label pada macro. Melainkan, gunakan PC-relative addressing secara eksplisit. Contoh, pada macro RDBUFF dan WRBUFF, JEQ * +11 JLT *-14 Cara ini tidak memudahkan dan cenderung menyebabkan error. Solusi lain yang lebih baik?
16
Two-Pass Macro Processor
Memproses definisi macro Pass 2: Expand semua statement invokasi macro Masalah Macro processor jenis ini tidak memungkinkan definisi macro rekursif, yaitu, body macro berisi definisi macro yang lain (karena semua macro harus didefinisikan pada saat pass pertama sebelum invokasi macro di-ekspan).
17
Contoh Definisi Macro Recursif
MACROS (untuk SIC) berisi definisi RDBUFF dan WRBUFF yang ditulis dalam instruksi SIC. MACROX (for SIC/XE) berisi definisi RDBUFF dan WRBUFF yang ditulis dalam instruksi SIC/XE. Program yang akan dijalankan pada SIC system dapat memanggil MACROS sementara program yang akan dijalankan pada SIC/XE dapat memanggil MACROX. Mendefinisikan MACROS atau MACROX tidak berarti mendefinsikan RDBUFF dan WRBUFF. Definisi ini hanya diolah ketika invokasi MACROS atau MACROX di-ekspan. The same macro name
18
Contoh Definisi Macro Rekursif
19
Contoh Definisi Macro Rekursif
20
One-Pass Macro Processor
One-pass macro processor yang berulang-alik antara definisi macro definition dan ekspansi macro dengan cara yang recursif dapat menangani definisi macro recursif. Karena struktur one-pass structure, definisi macro harus muncul pada source program sebelum statement yang memanggil macro tersebut.
21
Struktur Data DEFTAB (tabel definisi) NAMTAB ARGTAB
Menyimpan definisi macro, termasuk macro prototype macro body Comment lines dihilangkan. Referensi ke parameter instruksi macro dikonversi ke notasi posisi untuk efisiensi dalam substitusi argumen. NAMTAB Menyimpan nama macro Brfungsi sebagai indeks untuk DEFTAB pointer ke awal dan akhir definisi macro ARGTAB Menyimpan argumen invokasi macro invocation menurut posisi pada list argumen Sementara macro di-ekspan, argumen dari ARGTAB disubstitusikan untuk parameter yang berhubungan pada macro body.
22
Struktur Data
23
Algoritma Prosedur MAIN procedure Prosedur PROCESSLINE Prosedur DEFINE
iterasi GETLINE PROCESSLINE Prosedur PROCESSLINE DEFINE EXPAND output source line Prosedur DEFINE memasukkan entry yang sesuai ke DEFTAB dan NAMTAB Prosedur EXPAND menetapkan nilai argumen pada ARGTAB expand statement invokasi macro (seperti pada prosedur MAIN) Prosedur GETLINE Mendapatkan baris berikutnya yang akan diproses dari input file DEFTAB
24
Menangani Definisi Macro Recursif
Pada prosedur DEFINE Ketika definisi macro sedang dimasukkan ke DEFTAB, pendekatan yang normal adalah meneruskan sampai directive MEND ditemukan. Cara ini tida bisa dipakai pada definisi macro recursif karena MEND pertama yang ditemui pada macro sebelah dalam macro akan mengakhiri seluruh proses definisi macro. Untuk memecahkan masalah ini, counter LEVEL digunakan untuk mencatat level definisi macro. Menaikkan LEVEL sebesar 1 setiap kali directive MACRO terbaca. Menurunkan LEVEL sebesar 1 setiap kali directive MEND terbaca. MEND hanya dapat mengakhiri seluruh proses definisi macro ketika LEVEL mencapai 0. Proses ini hampir sama dengan menyesuaikan jumlah tanda kurung kiri dan kanan ketika scan ekspresi aritmatik.
25
Algoritma
26
Algoritma
Presentasi serupa
© 2024 SlidePlayer.info Inc.
All rights reserved.