Fitur Assembler Berorientasi Mesin (SIC/XE Assembler) Format Instruksi, Addressing Mode, dan Relokasi Program
Program Assembly SIC/XE indirect addressing immediate addressing extended format
Program Assembly SIC/XE
Keuntungan Addressing Mode SIC/XE Instruksi register-to-register –Lebih singkat dari instruksi register-to-memory. –Tidak ada referensi memori. Immediate addressing mode –Tidak ada referensi memori. Operand sudah ada sebagai bagian dari instruksi. Indirect addressing mode –Menghindari perlunya instruksi lain. Relative addressing mode –Lebih singkat dari instruksi extended. –Relokasi program yang mudah.
Mengenai Format Instruksi Directive START menspesifikasi alamat awal program yang merupakan 0: program yang dapat direlokasi. Instruksi register-to-register: hanya mengkonversi mnemonic menjadi ekivalen bilangannya. –OPTAB: untuk opcode. –SYMTAB: di-load sebelumnya dengan nama register dan nilainya.
Mengenai Addressing Modes PC atau base relative addressing –Menghitung displacement. –Displacement harus cukup kecil agar bisa masuk pada field 12-bit ( untuk PC relative mode, untuk base relative mode). Format instruksi extended (4-byte) –Field 20-bit untuk displacement yang besar.
Cara Assembler Mengenali Addressing Mode Extended format:+op m Indirect addressing: Immediate addressing: op #c Index addressing: op m,X Relative addressing: op m –Pilihan pertama: PC relative (dipilih secara acak) –Pilihan kedua: base relative (jika displacement invalid pada PC relative mode) –Pilihan ketiga: error message (jika displacement invalid pada kedua relative mode)
SIC/XE Assembly dengan Object Code
Instruction: LDA # (00) (003) 16 (01) 16 (0) 16 (003) 16 Instruction: C +LDT # (74) (01000) 16 (75) 16 (1) 16 (01000) 16 Immediate Addressing Mode
Extended Format Instruction: CLOOP +JSUB RDREC 4B (48) (01036) 16 (4B) 16 (1) 16 (01036) 16
PC Relative Addressing Mode Instruction: FIRST STL RETADR 17202D LDB #LENGTH 69202D : : RETADR RESW 1 (14) (02D) 16 (17) 16 (2) 16 (02D) 16 PC ditambah setelah setiap instruksi diambil dan sebelum dieksekusi. Yaitu, PC berisi alamat instruksi berikutnya. disp = (0030) 16 -(0003) 16 = (002D) 16
PC Relative Addressing Mode Instruction: CLOOP +JSUB RDREC 4B : : J CLOOP 3F2FEC A ENDFIL LDA EOF (3C) (FEC) 16 (3F) 16 (2) 16 (FEC) 16 disp = (0006) 16 -(001A) 16 = (FFEC) 16
Base Relative Addressing Mode Instruction: LDB #LENGTH 69202D 13 BASE LENGTH : : LENGTH RESW BUFFER RESB 4096 : : E STCH BUFFER,X 57C003 (54) (003) 16 (57) 16 (C) 16 (003) 16 disp = (0036) 16 -(0033) 16 = (0003) 16 PC relative tidak lagi dapat diterapkan BASE directive secara eksplisit memberi informasi kepada assembler bahwa base register akan berisi alamat LENGTH (gunakan NOBASE untuk invalidasi) LDB load alamat LENGTH ke dalam base register pada saat eksekusi
Instruction: LDB #LENGTH 69202D 13 BASE LENGTH CLOOP +JSUB RDREC 4B : : LENGTH RESW 1 (68) (02D) 16 (69) 16 (2) 16 (02D) 16 Immediate + PC Relative Addressing Mode disp = (0033) 16 -(0006) 16 = (002D) 16
Instruction: A 3E D EOF BYTE C’EOF’ 454F RETADR RESW 1 Indirect + PC Relative Addressing Mode (3C) (003) 16 (3E) 16 (2) 16 (003) 16 disp = (0030) 16 -(002D) 16 = (0003) 16
Alasan Relokasi Program Untuk menambah produktifitas mesin Ingin load dan jalankan beberapa program pada saat yang sama (multiprogramming) Harus dapat load program ke dalam memori jika ada ruang kosong Alamat awal program yang sebenarnya tidak diketahui sampai waktu load
Program Absolut Program dengan alamat awal yang dispesifikasi pada waktu assembly Pada contoh SIC assembly program Alamat mungkin invalid jika program di- load ke tempat lain. Instruction: B LDA THREE 00102D Dihitung dari alamat awal 1000
Program yang dapat Direlokasi
Perlu dimodifikasi: –Bagian alamat dari instruksi yang menggunakan absolute (direct) addresses. Tidak perlu dimodifikasi: –Instruksi register-to-register (tidak ada referensi memori) –PC atau base-relative addressing (relative displacement tetap sama, tidak bergantung pada alamat awal yang berbeda) Hal-hal yang Perlu Direlokasi
Untuk Assembler –Untuk label alamat, alamatnya ditentukan relatif terhadap awal program (alasan untuk START 0) –Membuat record modifikasi untuk menyimpan lokasi awal dan panjang field alamat yang akan dimodifikasi. Untuk loader –Untuk setiap record modifikasi, tambahkan alamat awal program yang sebenarnya ke field alamat pada waktu load. Cara Relokasi Alamat
Format Record Modifikasi Satu record modifikasi untuk setiap alamat yang akan dimodifikasi Panjangnya disimpan dengan format half-bytes (20 bit = 5 half-byte) Lokasi awal merupakan lokasi byte yang berisibit-bit paling kiri dari field alamat yang akan dimodifikasi. Jika field berisi half-byte dengan nilai ganjil, lokasi awal dimulai dari tengah byte pertama.
Object Program yang dapat Direlokasi 15 +JSUB RDREC 5 half-bytes 35 +JSUB WRREC 65 +JSUB WRREC