Mei 07, 2023 Pemrograman Sistem

Function dan Modul Assembler

Function dan Modul Assembler dalam kesempatan kali ini akan dibahas tentang function dan modul pada assembler.

Function dan Modul Assembler: 1. Function Assembler

Dua langkah penting dalam merancang perangkat lunak yaitu membagi perangkat lunak menjadi komponen atau modul yang lebih kecil dan lebih mudah dikelola, dan menentukan bagaimana modul akan berkomunikasi. Untuk kedua langkah ini, perancang perlu mengingat jenis utama fungsionalitas perangkat lunak. Berikut ini adalah fungsi utama dari assembler.

  • Hasilkan keluaran kode mesin
    • Ini adalah tujuan utama dari sebuah assembler. Assembler biasanya menghasilkan salinan file data dan instruksi mesin yang nantinya akan dimuat ke dalam komputer untuk persiapan eksekusi. Salinan file juga harus berisi alamat awal – alamat instruksi pertama yang akan dieksekusi.
  • Berikan informasi kesalahan program untuk programmer
    • Pemrograman bahasa assembly itu sulit. Pemrogram bahasa assembly membuat kesalahan. Beberapa kesalahan ini dapat ditangkap oleh assembler. Kemudahan pemrograman bahasa rakitan sebagian besar bergantung pada kualitas pesan kesalahan assembler.
  • Berikan informasi kode mesin untuk pemrogram
    • Assembler tidak dapat menangkap semua kesalahan pemrogram. Beberapa hanya dapat dideteksi dengan menjalankan program rakitan. Namun, assembler dapat memberikan informasi tentang kode mesin yang membantu pemrogram dalam men-debug error runtime. Untuk masalah debug yang sulit, pemrogram mungkin perlu mengetahui kode apa yang dihasilkan dan di mana data dan instruksi berada di memori.
  • Tetapkan memori untuk data dan instruksi
    • Assembler awal memaksa pemrogram untuk menetapkan alamat memori untuk semua data dan melacak alamat yang ditetapkan untuk instruksi. Assembler modern memungkinkan pemrogram untuk menggunakan simbol (biasanya label pernyataan) untuk mewakili alamat data atau cabang atau target lompatan. Ini membuat pekerjaan programmer lebih sederhana. Namun, alamat diperlukan untuk pembuatan kode mesin. Jadi assembler harus memikul tanggung jawab untuk menetapkan alamat ke simbol program. Penugasan ini harus diingat untuk digunakan saat simbol muncul di operan instruksi.

MENGHADAPI KARAKTER

Input ke assembler terdiri dari aliran karakter yang mewakili informasi perakitan dalam beberapa cara berbeda: bilangan bulat, bilangan real, label, karakter dan string yang dikutip, nama register, dan berbagai jenis tanda baca. Jika pemrosesan karakter dicampur dengan algoritme untuk membangun tabel simbol atau algoritme untuk pembuatan kode, hasilnya adalah kekacauan kompleks yang akan menantang pemrogram terbaik sekalipun. Masalahnya adalah organisasi (atau disorganisasi) ini memaksa pemrogram untuk berurusan dengan dua jenis abstraksi yang berbeda secara bersamaan. Hasilnya adalah pengembangan algoritma yang sulit, sejumlah besar kesalahan, dan kesulitan dalam debugging. Masalah ini diperbesar jika assembler memerlukan pemeliharaan di lain waktu.

Prinsip desain umum yang baik adalah menugaskan tanggung jawab untuk berbagai jenis abstraksi ke modul program yang berbeda. Prinsip ini sangat penting untuk desain yang besar, tetapi juga merupakan praktik yang baik untuk desain yang lebih kecil. Membagi tanggung jawab untuk berbagai jenis abstraksi ke dalam modul yang berbeda memungkinkan pemrogram untuk memusatkan perhatian mereka pada satu aspek masalah pada satu waktu.

Untuk assembler, implikasinya adalah harus ada modul yang didedikasikan untuk menangani teks pada level karakter. Modul ini disebut lexical analyzer atau scanner.

Function dan Modul Assembler: 2. Modul Assembler

Assembler memiliki empat modul utama,

  • A scanner,
  • A pass 1 module,
  • A pass 2 module, and
  • A main program module.

Tanggung jawab modul-modul ini dijelaskan secara lebih rinci di bagian berikut.

LEXICAL ANALYSIS: THE SCANNER

Tujuan utama modul pemindai adalah memproses karakter menjadi unit level yang lebih tinggi yang lebih bermakna untuk modul pass 1 dan pass 2. Unit-unit ini disebut token. Proses pembentukan kelompok-kelompok ini disebut analisis leksikal. Kebutuhan akan pemindai muncul di sebagian besar program yang berhubungan dengan input yang kompleks.

Bagian dari desain scanner melibatkan penentuan dengan tepat apa itu token; yaitu, menentukan level unit yang dikirim scanner ke modul pass. Beberapa kemungkinan dibahas dalam Opsi untuk Antarmuka scanner.

MEMBANGUN TABEL SIMBOL: PASS 1

Selama pass 1, input dibaca dan alamat memori diberikan ke label program. Memori dialokasikan secara berurutan sehingga modul pass 1 dapat menggunakan pencacah lokasi. Untuk setiap pernyataan input, penghitung ini bertambah dengan ukuran memori yang dialokasikan. Setiap kali label ditemui, itu dicatat dalam tabel simbol. Alamat yang diberikan adalah nilai penghitung lokasi di awal pernyataan.

Sebagian besar assembler perlu melakukan beberapa pemrosesan arahan assembler untuk menentukan ukuran data yang terlibat. Prosesor RISC modern memiliki panjang instruksi tetap, sehingga instruksi mesin memerlukan pemrosesan yang sangat sedikit selama pass 1.

Beberapa assembler menyimpan data dan instruksi di wilayah memori yang terpisah. Jika ini dilakukan maka dua counter lokasi terpisah digunakan, satu untuk data dan satu lagi untuk instruksi.

Tabel simbol dapat diperlakukan sebagai sub-modul dari modul pass 1. Pilihan ini memiliki sedikit efek jika ada pada kompleksitas pengkodean, tetapi sub-modul yang dikompilasi secara terpisah memfasilitasi pengujian terpisah.

MENGHASILKAN OUTPUT: PASS 2

Upaya utama dalam pass 2 adalah menerjemahkan instruksi ke dalam kode mesin. Jika assembler menggabungkan data dan instruksi di area memori yang sama maka translasi data harus dilakukan di pass 2. Untuk assembler yang menggunakan area memori terpisah untuk data dan instruksi, translasi data dapat dipindahkan ke pass 1. Ini adalah agak menguntungkan karena menghasilkan keseimbangan yang lebih baik dari kompleksitas dua modul pass.

Sebagian besar laporan kesalahan yang dihasilkan oleh assembler dihasilkan selama pass 2. Laporan ini dapat disisipkan dengan keluaran daftar assembler sehingga pemrogram bahasa rakitan dapat dengan mudah mengasosiasikan laporan kesalahan dengan kode yang menyebabkannya.

Saat pass 2 sedang berjalan, kode mesin disimpan dalam larik byte (dua larik jika data dan instruksi disimpan terpisah). Jika tidak ada kesalahan maka pada akhir pass 2 array ditulis ke file dalam bentuk biner dan juga dapat ditampilkan sebagai dump heksadesimal untuk pemrogram bahasa rakitan. Halaman web Assembler Output menjelaskan teknik pemrograman C untuk menyimpan data biner dalam array dan menulis array ke file. Ada cukup kerumitan yang terlibat dalam menangani array data biner sehingga sub-modul terpisah dapat digunakan.

Untuk set instruksi besar, Desain Berbasis Tabel berguna. Dalam pendekatan ini, instruksi diklasifikasikan menurut jenis operannya. Informasi klasifikasi ini, bersama dengan informasi pengkodean lainnya, disimpan dalam sebuah tabel. Dalam bahasa seperti C yang memungkinkan inisialisasi array, tabel tidak memerlukan kode runtime untuk pembuatannya. Itu hanya array yang diinisialisasi. Modul pass 2 menggunakan informasi dalam tabel untuk menentukan jenis informasi yang dicari dari scanner, dan urutan informasi tersebut.

Desain berbasis tabel juga dapat digunakan untuk menangani direktif. Ini bisa digunakan di pass 1 dan juga pass 2. Namun, jika jumlah direktif assembler kecil maka tidak sepenting penanganan instruksi mesin.

Function dan Modul Assembler: PROGRAM UTAMA

Program utama dalam assembler tidak rumit. Pekerjaan utama adalah menyediakan parameter file untuk pemanggilan fungsi ke modul lain dan meneruskan boolean kesalahan dari pass 1 ke pass 2 sehingga output yang dapat dieksekusi tidak dihasilkan saat ada kesalahan dalam sumber bahasa rakitan.

KOMUNIKASI ANTARA MODUL

Diagram di bawah menunjukkan jalur komunikasi antara modul-modul assembler. Untuk setiap panah dalam diagram, modul di ujung panah berperan sebagai klien dan modul di ujung panah berperan sebagai server. Ini berarti klien memanggil fungsi yang disediakan oleh server.

Function dan Modul Assembler

Komunikasi antara program utama dan dua modul pass cukup sederhana – program utama hanya memanggil fungsi pass 1 atau 2 yang mengarahkan mereka untuk melakukan pekerjaan mereka dalam urutan yang benar. Fungsi tidak mengembalikan data apa pun kecuali kemungkinan indikasi kesalahan.

Komunikasi antara program utama dan scanner juga sederhana. Nama file yang akan dirakit diketahui langsung di program utama. Program utama meneruskan nama ke scanner atau membuka file dan meneruskannya ke scanner. Ini dapat dilakukan secara tidak langsung melalui modul pass 1 dan pass 2.

Komunikasi antara pass 1 dan pass 2 melibatkan informasi tabel simbol. Pass 2 perlu mendapatkan alamat untuk label dan nilai konstanta yang ditentukan dari tabel simbol. Meskipun ada cukup banyak komunikasi, antarmukanya sederhana. Ini bisa menjadi antarmuka tabel standar.

Scanner adalah titik fokus komunikasi assembler. Semua modul lain berkomunikasi dengan scanner. Komunikasi antara modul pass dan scanner lebih kompleks daripada komunikasi di sepanjang jalur lainnya. Untuk alasan ini, tempat terbaik untuk mulai mengerjakan komunikasi assembler adalah antarmuka klien scanner. Ini adalah aspek penting dari desain assembler. Itu tidak bisa dianggap enteng.

Link terkait:

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *