Upload presentasi
Presentasi sedang didownload. Silahkan tunggu
Diterbitkan olehEgi Amin Telah diubah "9 tahun yang lalu
1
Fitur Assembler yang Tidak Berorientasi Mesin Literal, Statement yang Mendefinisikan Simbol, Ekspresi, Blok Program, Control Sections dan Program Linking
2
Fitur Assembler yang Tidak Berorientasi Mesin Lebih berhubungan dengan isu mengenai: –Kemudahan programmer –Lingkungan software Contoh umum: –Literal –Statement yang mendefinisikan simbol –Ekspresi –Blok program –Control sections Assembler directive banyak digunakan untuk mendukung fitur ini
3
Literal Literal ekivalen dengan: –Mendefinisikan konstanta dengan eksplisit dan memberinya label alamat –Menggunakan label tersebut sebagai operand instruksi Alasan pemakaian literal: –Menghindari pendefinisian konstanta di tempat lain dan membuat label untuknya –Sehingga, nilai operand konstanta dituliskan sebagai bagian instruksi Cara penggunaan literal: –Literal diidentifikasi dengan prefix =, diikuti oleh spesifikasi nilai literal
4
Program Asli
5
Menggunakan Literal
6
Object Program Menggunakan Literal Sama seperti sebelumnya
7
Program Asli
8
Menggunakan Literal
9
Object Program Menggunakan Literal Sama dengan sebelumnya
10
Literal vs. Immediate Addressing Persamaan: –Field operand berisi nilai konstanta Perbedaan: –Immediate addressing: assembler meletakkan nilai konstanta sebagai bagian dari instruksi mesin –Literal: assembler menyimpan nilai konstanta di tempat lain dan meletakkan alamat tersebut sebagai bagian dari instruksi mesin
11
Literal Pool Semua operand literal dikumpulkan dalam satu atau lebih literal pool. Letak literal pool: –Pada akhir object program, langsung dibangkitkan mengikuti statement END –Pada lokasi ditemukannya directive LTORG Agar operand literal tetap dekat dengan instruksi yang menggunakannya
12
Duplicate Literal Duplicate literal: –Literal yang sama yang dipakai lebih dari satu kali pada program –Hanya satu kopi nilai yang dispesifikasi yang harus disimpan –Contoh, =X’05’ pada program contoh Cara mengenali the duplicate literal –Bandingkan string karakter yang mendefinisikannya Lebih mudah diimplementasi, tetapi memiliki masalah potensial (lihat selanjutnya) Contoh, =X’05’ –Bandingkan nilai data yang dibangkitkan Lebih baik, tetapi akan menambah kompleksitas assembler Contoh, =C’EOF’ dan =X’454F46’
13
Masalah Pengenalan Duplicate-Literal dengan Menggunakan String Karakter Mungkin ada beberapa literal yang memiliki nama yang sama, tetapi nilai yang berbeda Contoh, literal yang nilainya bergantung pada lokasinya pada program –Nilai pencacah lokasi yang ditandai dengan * BASE * LDB=* –Literal =* digunakan secara berulang pada program dengan nama yang sama, tetapi nilai yang berbeda Semua jenis literal ini harus disimpan pada literal pool
14
Implementasi Literal Struktur data: tabel literal LITTAB –Nama literal –Nilai dan panjang operand –Alamat LITTAB seringkali disusun sebagai tabel hash, dengan menggunakan nama atau nilai literal sebagai key
15
Implementasi Literal Pass 1 –Pada saat setiap operand literal dikenali Telusuri LITTAB untuk mencari nama atau nilai literal tersebut Jika literal telah ada, tidak ada yang harus dilakukan Jika tidak, literal ditambahkan ke LITTAB (simpan nama, nilai, dan panjang, tetapi alamat tidak) –Pada saat LTORG atau END ditemukan Scan LITTAB Untuk setiap literal dengan field yang kosong, tentukan alamat dan update LOCCTR untuk menyesuaikannya
16
Implementasi Literal Pass 2 –Pada saat setiap operand literal dikenali Telusuri LITTAB untuk mencari nama atau nilai literal tersebut Jika literal ditemukan, gunakan alamat asosiatif sebagai operand instruksi Jika tidak, error (tidak boleh terjadi) –Pada saat LTORG atau END ditemukan insert nilai data literal pada object program –Record modifikasi akan dibuat jika perlu
17
Statement yang mendefinisikan simbol Cara mendefinisikan simbol dan nilainya –Address label Label adalah nama simbol dan alamat yang ditentukan adalah nilainya FIRST STL RETADR –Assembler directive EQU simbol EQU nilai Statement ini memasukkan simbol ke SYMTAB dan memberinya nilai Nilai dapat berupa konstanta atau ekspresi –Assembler directive ORG ORG nilai
18
Penggunaan EQU Untuk menambah keterbacaan program, hindari penggunaan magic number, sehingga nilai konstanta lebih mudah ditemukan dan diubah –Ganti +LDT #4096 –dengan MAXLEN EQU 4096 +LDT #MAXLEN Untuk mendefinisikan nama mnemonic untuk register –A EQU 0 –X EQU 1 –BASE EQU R1 –COUNT EQU R2
19
Penggunaan ORG Penentuan nilai tidak langsung: ORG nilai –Ketika menemukan ORG, assembler me-reset LOCCTR-nya ke nilai yang ditentukan –ORG akan memperngaruhi nilai semua label yang didefinisikan sampai menemukan ORG berikutnya –Jika nilai LOCCTR yang sebelumnya dapat diingat secara otomatis, kita dapat kembali ke penggunaan normal LOCCTR dengan hanya menuliskan ORG
20
Contoh Penggunaan ORG Perhatikan struktur data berikut ini: –SYMBOL: 6 bytes –VALUE: 3 bytes (one word) –FLAGS: 2 bytes Kita ingin melakukan referensi ke setiap field dari setiap entry
21
Tidak Menggunakan ORG Kita dapat mengambil field VALUE dengan LDA VALUE,X X = 0, 11, 22, … untuk setiap entry Offsets dari STAB Kurang terbaca dan berarti
22
Menggunakan ORG Ukuran field lebih berarti Restore LOCCTR ke nilai sebelumnya Set LOCCTR ke STAB
23
Forward reference tidak diperbolehkan untuk EQU dan ORG. Yaitu, semua term pada field nilai harus didefinisikan terlebih dulu pada program. Alasannya ialah bahwa semua simbol harus telah didefinisikan di Pass 1 pada two-pass assembler. Diperbolehkan Tidak diperbolehkan Masalah Forward-Reference
24
Tidak diperbolehkan Masalah Forward-Reference
25
Ekspresi Satu term sebagai operand instruksi dapat digantikan dengan ekspresi. STAB RESB 1100 STAB RESB 11*100 STAB RESB (6+3+2)*MAXENTRIES Assembler harus mengevaluasi ekspresi untuk menghasilkan satu alamat atau nilai operand. Ekspresi terdiri dari –Operator +,-,*,/ (pembagian biasanya didefinisikan untuk mendapatkan hasil integer) –Individual term Konstanta Simbol yang didefinisikan user Special term, misalnya, *, nilai LOCCTR pada saat itu
26
Masalah Relokasi pada Ekspresi Nilai term dapat bersifat –Absolut (independen terhadap lokasi program) konstanta –Relatif (terhadap awal program) Label alamat * (nilai LOCCTR) Ekspresi dapat bersifat –Absolut Hanya term absolut Term relatif berpasangan dengan tanda yang berlawanan untuk setiap pasangan –Relatif Semua term relatif kecuali satu dapat dipasangkan sebagaimana dideskripsikan pada “absolut”. Term relatif yang tersisa yang tidak berpasangan harus bertanda positif. Tidak boleh ada term relatif yang boleh masuk dalam operasi perkalian atau pembagian Ekspresi yang tidak memenuhi syarat “absolut” atau “relatif” harus ditandai dengan flag error.
27
Ekspresi Absolut Term relatif atau ekspresi secara implicit merepresentasikan (S+r) –S: alamat awal program –r: nilai term atau ekspresi relatif terhadap S Contoh –BUFFER: S+r1 –BUFEND: S+r2 Ekspresi, BUFEND-BUFFER, adalah absolut. –MAXLEN = (S+r2)-(S+r1) = r2-r1 (no S here) –MAXLEN means the length of the buffer area Ekspresi ilegal : BUFEND+BUFFER, 100-BUFFER, 3*BUFFER Nilai dihubungkan dengan simbol
28
Absolut atau Relatif Untuk menentukan tipe ekspresi, kita harus selalu tahu semua tipe simbol yang didefinisikan pada program. Kita perlu “flag” pada SYMTAB untuk indikasi.
29
Blok Program dan Control Section Walaupun source program secara logika berisi subrutin, data area, dsb, semuanya di-assemble ke dalam satu blok object code dengan instruksi mesin dan data muncul dengan urutan yang sama seperti pada source program. Untuk memberikan fleksibilitas: –Blok program Segmen kode yang disusun ulang dalam satu object program unit –Control section Segments kode yang diterjemahkan menjadi object program unit yang independen
30
Blok Program Sebagai contoh, digunakan tiga blok: –default: instruksi yang dapat dieksekusi –CDATA: semua area data yang panjangnya lebih kecil –CBLKS: semua area data yang terdiri dari blok memori yang lebih besar Assembler directive USE menunjukkan bagian source program mana yang termasuk dalam berbagai blok tersebut.
31
Pada saat awal, diasumsikan blok default. Program dengan Banyak Blok Program
32
Resume blok default Resume blok CDATA Program dengan Banyak Blok Program
33
Resume blok default Resume blok CDATA
34
Blok Program Setiap blok program sebenarnya bisa berisi beberapa segmen source program yang terpisah Secara logika, assembler akan menyusun kembali segmen-segmen ini untuk mengumpulkan bagian-bagian setiap blok. Hasilnya sama dengan programmer secara fisik menyusun kembali source statement untuk mengumpulkan source line yang termasuk dalam setiap blok.
35
Alasan Pemakaian Blok Program Untuk mencapai tujuan yang kontradiktif: –Memisahkan program menjadi blok-blok dengan urutan tertentu Area buffer yang besar dipindahkan ke akhir object program Penggunaan instruksi extended format atau base relative mode dapat dikurangi. (baris 15, 35, dan 65) Penempatan literal pool lebih mudah: hanya diletakkan sebelum area data yang besar, blok CDATA. (baris 253) –Area data bertebaran Keterbacaan program akan lebih baik jika area data diletakkan pada source program berdekatan dengan statement yang melakukan referensi kepadanya.
36
Cara Menyusun Ulang Kode Menjadi Blok Program Pass 1 –Tetap simpan LOCCTR yang terpisah untuk setiap blok program inisialisasi ke 0 ketika blok dimulai untuk pertama kali save ketika beralih ke blok yang lain restore ketika kembali ke blok sebelumnya –Untuk setiap label, berikan alamat yang relatif terhadap awal blok tempat label tersebut berada –Simpan nama atau nomer blok pada SYMTAB bersama dengan alamat relatif label yang diberikan –Nyatakan panjang blok sebagai nilai terakhir LOCCTR untuk setiap blok di akhir Pass1 –Untuk setiap blok, berikan alamat awal pada object program dengan menggabungkan blok-blok program dengan urutan tertentu
37
Cara Menyusun Ulang Kode Menjadi Blok Program Pass 2 –Hitung alamat untuk setiap simbol relatif terhadap awal object program dengan menambahkan lokasi simbol relatif terhadap awal bloknya alamat awal yang diberikan untuk blok ini
38
Loc/Block Object Program dengan Banyak Blok Program 0: default 1: CDATA 2: CBLKS Tidak ada nomer blok, karena MAXLEN merupakan simbol absolut
39
Object Program dengan Banyak Blok Program
41
Tabel untuk Blok Program Di akhir Pass 1:
42
Contoh Perhitungan Alamat 20 0006 0 LDA LENGTH 032060 Nilai operand (LENGTH) –Alamat 0003 relatif terhadap Blok 1 (CDATA) alamat 0003+0066=0069 relatif terhadap program alamat 0069-0009=0060 relatif terhadap PC, tempat alamat PC relatif terhadap program adalah 0009+0000=0009
43
Tidak perlu secara fisik menyusun kembali kode yang dibangkitkan pada object program untuk menempatkan blok program bersama-sama. Assembler hanya menyisipkan alamat load yang benar pada setiap Text record. Object Program
44
Blok Program yang Dimasukkan dalam Memori same order Penyusunan ulang dengan loading Tidak ada pada object program
45
Control Section Control section –merupakan bagian program yang mempertahankan identitasnya setelah assembly –sering digunakan untuk subrutin atau subdivisi logika lainnya dari suatu program –dapat di- assemble, di-load, dan di-relokasi secara independen –lebih fleksibel
46
Program Linking Program linking digunakan untuk menggabungkan control section yang berhubungan secara logika Masalah: –Assembler tidak mengetahui di mana control section yang lain akan ditempatkan pada waktu eksekusi. –Ketika suatu instruksi perlu melakukan referensi ke instruksi atau data pada control section lain, assembler tidak dapat mengolah referensi ini. –Assembler harus membangkitkan informasi untuk referensi semacam ini, disebut referensi eksternal, yang akan memungkinkan loader melakukan linking yang diperlukan.
47
Program dengan Multiple Control Section Control section pertama: COPY Mendefinisikan simbol eksternal Referensi eksternal Didefinisikan secara implisit sebagai simbol eksternal
48
Program dengan Multiple Control Section Control section kedua: RDREC Referensi eksternal Didefinisikan secara implisit sebagai simbol eksternal
49
Program dengan Multiple Control Section Control section ketiga: WRREC Referensi eksternal Didefinisikan secara implisit sebagai simbol eksternal
50
Assembler Directive untuk Control Section START: –memulai control section pertama –menentukan nama program sebagai nama control section –mendefinisikan nama control section sebagai simbol eksternal CSECT: –memulai control section baru –menentukan nama control section –mendefinisikan nama control section sebagai simbol eksternal EXTDEF: –Mendefinisikan simbol eksternal EXTREF: –menamai simbol yang didefinisikan pada control section lain
51
Cara Menangani Referensi Eksternal 15 0003 CLOOP +JSUB RDREC 4B100000 Operand RDREC merupakan referensi eksternal. Assembler –tidak tahu di mana RDREC berada –menyisipkan alamat sebesar nol –hanya bisa menggunakan extended format untuk memberikan tempat yang cukup (yaitu, relative addressing untuk referensi eksternal adalah invalid) –mengirimkan informasi ke loader
52
Cara Menangani Referensi Eksternal 190 0028 MAXLEN WORD BUFEND-BUFFER 000000 Ada dua referensi eksternal pada ekspresi di atas, BUFEND and BUFFER. Assembler –menyisipkan nilai sebesar zero –mengirimkan informasi ke loader Menambahkan alamat BUFEND ke area data ini Mengurangi alamat BUFFER ke area data ini Pada baris 107, BUFEND dan BUFFER didefinisikan pada control section yang sama dan ekspresi tersebut dapat langsung dihitung. 107 1000 MAXLEN EQU BUFEND-BUFFER
53
Object Code dengan Multiple Control Section
56
Cara Menangani Control Section Assembler –mengolah setiap control section secara independen –membuat LOCCTR yang terpisah (diinisialisasi ke 0) untuk setiap control section –menyimpan pada SYMTAB, control section tempat simbol didefinisikan –memungkinkan simbol yang sama digunakan pada control section yang berbeda –melaporkan error ketika berusaha mereferensi simbol pada control section yang lain, kecuali simbol tersebut didefinisikan sebagai referensi eksternal –membangkitkan informasi pada object program untuk referensi eksternal
57
Record Baru untuk Referensi Eksternal Memberi informasi mengenai simbol eksternal yang dinamai oleh EXTDEF membuat daftar simbol yang dipakai sebagai referensi eksternal, yaitu, simbol yang dinamai oleh EXTREF
58
Record Modifikasi yang Direvisi
59
Object Program COPY RDREC WRREC
60
Relokasi Program Sebagaimana untuk program linking, record Modifikasi yang direvisi masih dapat digunakan untuk relokasi program.
61
Ekspresi pada Multiple Control Section Extended restriction –Kedua terms pada setiap pasangan ekspresi harus berada di dalam control section yang sama Legal: BUFEND-BUFFER Illegal: RDREC-COPY Cara menerapkan pembatasan ini –Ketika ada referensi eksternal pada sebuah ekspresi, assembler tidak dapat menentukan apakah ekspresi tersebut legal. –Assembler mengevaluasi semua term yang dapat ia evaluasi, menggabungkannya untuk membentuk nilai ekspresi awal, dan membuat record Modifikasi. –Loader memeriksa adanya error pada ekspresi dan menyelesaikan evaluasi.
Presentasi serupa
© 2024 SlidePlayer.info Inc.
All rights reserved.