Bahasa Assembler

(1)

(2)

A. Bahasa Assembly

1.Pengertian

Bahasa Assembly adalah bahasa komputer yang kedudukannya di antara bahasa mesin dan bahasa level tinggi misalnya bahasa C, C++, Pascal, Turbo Basic, Java, dan sebagainya. Bahasa C atau Pascal dikatakan sebagai bahasa level tinggi karena memakai kata-kata dan pernyataan yang mudah dimengerti manusia, meskipun masih jauh berbeda dengan bahasa manusia sesungguhnya. Assembler adalah program yang bekerja membantu penulisan instruksi dalam format bahasa inggris sehingga mudah dibaca dan dipahami.

MOV R0, #02h MOV A, #03h ADD A, R0

Perintah baris pertama bekerja menjalankan proses pengisian register R0 dengan data 02h. Perintah baris kedua bekerja menjalankan proses pengisian register A dengan data 03h. Kemudian proses penjumlahan data pada register A dengan data pada register R0 dijalankan menggunakan perintah ADD A,R0 dan menghasilkan data 05h tersimpan di register A.

Perintah MOV dan ADD adalah mnemonik atau singkatan dari perintah MOVE dan ADD.

Mnemonik dari perintah lainnya dapat dirangkum dalam tabel 8 berikut. Tabel 8 Memonik Perintah Assembly AT89S51

No PERINTAH MNEMONIK

1. ADD ADD

2. ADD WITH CARRY ADC

3. SUB WITH BORROW SBB


(3)

5. DECREMENT DEC

6. MULTIPLY MUL

7. DEVIDE DIV

8. AND LOGIC ANL

9. OR LOGIC ORL

10. EXLUSIVE OR LOGIK XRL

11. DECIMAL ADJUST ACCUMULATOR DAA

12. CLEAR ACCUMULATOR CLR A

13. COMPLEMENT ACCUMULATOR CPL A

14. ROTATE ACCUMULATOR LEFT RLA

15. ROTATE ACCUMULATOR LEFT THROUGH CARRY

RLCA

16. ROTATE ACCUMULATOR RIGHT RRA

17. ROTATE ACCUMULATOR RIGHT THROUGH CARRY

RRCA 18. SWAPP NIBBLE WITHIN ACCUMULATOR SWAP

19. PUSH DIRECT BYTE KE STACK PUSH

20. POP DIRECT BYTE DARI STACK POP

21. JUMP IF CARRY SET C=1 JC

22. JUMP IF CARRY NOT SET C = 0 JNC

23. JUMP IF DIRECT BIT SET JB

24. JUMP IF DIRECT BIT NOT SET JNB

25. JUMP IF DIRECT BIT SET & CLEAR BIT JBC

26. ABSOLUTE CALL ACALL

27. LONG CALL LCALL

28. RETURN RET

29. RETURN FROM INTERRUPT RETI

30. ABSOLUTE JUMP AJMP

31. LONG JUMP LJMP

32. SHORT JUMP SJMP

33. JUMP INDIRECT JMP

34. JUMP IF ACCUMULATOR ZERRO JZ

35. JUMP IF ACCUMULATOT NOT ZERRO JNZ

36. COMPARE AND JUMP IF NOT EQUAL CJNE

37. DECREAMENT AND JUMP IF NOT ZERO DJNZ

38. NO OPERATION NOP

Bahasa mesin adalah kumpulan kode biner yang merupakan instruksi yang bisa dijalankan oleh komputer. Di dalam mikrokontroler instruksi disimpan


(4)

dalam kode heksa sehingga sulit dibaca dan dipahami maknanya. Sedangkan bahasa assembly memakai kode mnemonik untuk menggantikan kode biner, agar lebih mudah diingat sehingga lebih memudahkan dalam penulisan program.

No OPERATION CODE

ASSEMBLY

1. 78 02 MOV R0,

#02h

2. 74 03 MOV A, #03h

3. 28 ADD A, R0

Kode bahasa mesin atau sering disebut dengan operation code dari perintah MOV R0,#02h adalah 78 02. Untuk MOV A,#03h kode operasinya dalah 74 03 dan 28 adalah kode operasi dari perintah ADD A, R0. Kode operasi untuk setiap perintah dapat dibaca pada lembar instruction set.

Program yang ditulis dengan bahasa assembly terdiri dari label; kode mnemonik, operand 1, operand 2, keterangan, dan lain sebagainya. Program ini disebut sebagai program sumber (Source Code). Source code belum bisa diterapkan langsung pada prosesor untuk dijalankan sebagai program. Source code harus diterjemahkan dulu menjadi bahasa mesin dalam bentuk kode biner atau operasi.

Source code ditulis dengan program editor biasa, misalnya Note Pad pada Windows atau SideKick pada DOS, TV demo, lalu source code diterjemahkan ke bahasa mesin dengan menggunakan program Assembler. Proses menterjemahkan source code menjadi bahasa mesin disebut dengan proses assembled. Hasil kerja program Assembler adalah “program objek” dan juga “assemly listing”.


(5)

Program Objek berisikan kode kode operasi bahasa mesin. Biasanya file program objek menguanakan ekstensi .HEX. Kode-kode operasi bahasa mesin inilah yang dituliskan ke memoriprogram prosesor. Dalam dunia mikrokontroler biasanya program objek ini diisikan ke UV EPROMatau EEPROM dan khusus untuk mikrokontroler buatan Atmel, program ini diisikan ke dalam Flash PEROM yang ada di dalam chip mikrokontroler AT89S51 atau AT89C2051.

Assembly Listing merupakan naskah yang berasal dari program sumber, dalam naskah tersebut pada bagian sebelah setiap baris dari program sumber diberi tambahan hasil terjemahan program Assembler. Tambahan tersebut berupa nomor memori-program berikut dengan kode yang akan diisikan pada memori-program bersangkutan. Naskah ini sangat berguna untuk dokumentasi dan sarana untuk menelusuri program yang ditulis. Gambar 22 menunjukkan model editor program assembly dan bagan kerja proses assembly.


(6)

Yang perlu diperhatikan adalah setiap prosesor mempunyai konstruksi yang berlainan, instruksi untuk mengendalikan masing-masing prosesor juga berlainan, dengan demikian bahasa Assembly untuk masing-masing prosesor juga berlainan, yang sama hanyalah pola dasar cara penulisan program Assembly saja.

2. Konstruksi Program Assembly

Source program dalam bahasa Assembly menganut prinsip 1 baris untuk satu perintah tunggal. Setiap baris perintah tersebut bisa terdiri atas beberapa bagian (field), yakni bagian Label, bagian mnemonik, bagian operand yang bisa lebih dari satu dan terakhir bagian komentar. Untuk membedakan masing-masing bagian tersebut dibuat ketentuan sebagian berikut:

1. Masing-masing bagian dipisahkan dengan spasi atau TAB, khusus untuk operand yang lebih dari satu masing-masing operand dipisahkan dengan koma.

ORG 0 MOV . . ADD ..

Source Program

PLASH Memori Mikrokontrole r

Assembler

78 02 48 03 28

----; ---- ----; ---- Program Objek

Assembly Listing


(7)

2. Bagian-bagian tersebut tidak harus semuanya ada dalam sebuah baris, jika ada satu bagian yang tidak ada maka spasi atau TAB sebagai pemisah bagian tetap harus ditulis.

3. Bagian Label ditulis mulai huruf pertama dari baris, jika baris bersangkutan tidak mengandung Label maka label tersebut digantikan dengan spasi atau TAB, yakni sebagai tanda pemisah antara bagian Label dan bagian mnemonik.

DJNZ R0,Delay1 RET

END

Label mewakili nomor memori-program dari instruksi pada baris bersangkutan, pada saat menulis instruksi JUMP, Label ini ditulis dalam bagian operand untuk menyatakan nomor memori-program yang dituju. Dengan demikian Label selalu mewakili nomor memoriprogram dan harus ditulis dibagian awal baris instruksi.

Disamping Label dikenal pula Symbol, yakni satu nama untuk mewakili satu nilai tertentu dan nilai yang diwakili bisa apa saja tidak harus nomor memori-program. Cara penulisan Symbol sama dengan cara penulisan Label, harus dimulai di huruf pertama dari baris instruksi.

Mnemonik (artinya sesuatu yang memudahkan diingat) merupakan singkatan perintah, dikenal dua macam mnemonik, yakni manemonic yang dipakai sebagai instruksi mengendalikan prosesor, misalnya ADD, MOV, DJNZ dan lain sebagainya. Ada pula mnemonik yang dipakai untuk mengatur kerja dari program Assembler misalnya ORG, EQU atau DB,

ORG 0H

MOV A,#11111110B Mulai:

MOV P0,A ACALL Delay RL A

SJMP Mulai Delay: MOV R0,#0FFH Delay1: MOV R1,#0FFH DJNZ R1,Delay2 Delay2:

Tab/Spasi Koma


(8)

mnemonik untuk mengatur kerja dari program Assembler ini dinamakan sebagai ‘Assembler Directive’.

Operand adalah bagian yang letaknya di belakang bagian mnemonik, merupakan pelangkap bagi mnemonik. Kalau sebuah instruksi di-ibaratkan sebagai kalimat perintah, maka mnemonik merupakan subjek (kata kerja) dan operand merupakan objek (kata benda) dari kalimat perintah tersebut.

Tergantung pada jenis instruksinya, operand bisa berupa berbagai macam hal. Pada instruksi JUMP operand berupa Label yang mewakili nomor memori-program yang dituju misalnya LJMP Start, pada instruksi untuk pemindahan/pengolahan data, operand bisa berupa Symbol yang mewakili data tersebut, misalnya ADD A,#Offset. Banyak instruksi yang operandnya adalah register dari prosesor, misalnya MOV A,R1. Bahkan ada pula instruksi yang tidak mempunyai operand, misalnya RET.

Komentar merupakan bagian yang sekedar sebagai catatan, tidak berpengaruh pada prosesor juga tidak berpengaruh pada kerja program Assembler, tapi bagian ini sangat penting untuk keperluan dokumentasi.

3. Element dari Bahasa Pemrograman Assembler

Bahasa assembly dikategorikan sebagai bahasa tingkat rendah (low level languange). Ini untuk menggambarkan kekhususannya sebagai bahasa yang berorientasi pada machine dependent. Untuk membandingkan bahasa mesin dan bahasa assembly, kita dapat melihatnya dari tiga karakteristik berikut :

1. Mnemonic operation code. Sebagai pengganti numeric operation code (opcodes) yang digunakan pada bahasa mesin, digunakankanlah mnemonic code pada bahasa assembly. Selain kemudahan dalam penulisannya dibandingkan dari bahasa mesin juga mendukung pelacakan kesalahan seperti kesalahan penulisan operation code. Gambar 2.1. berikut


(9)

menunjukkan daftar instuksi operation codes dari bahasa dan bahasa assembly.

Instuction

Op Code

Assembly

Mnemonic

Remarks

00 STOP

01 ADD Operand pertama yang diasumsikan

sebagai akumulator

02 SUB

03 MULT

04 LOAD Memanggil akumulator

05 STORE Menyimpan akumulator ke dalam lokasi

storage

06 TRANS Mentransfer kontrol ke alamat yang

disebutkan

07 TRIM Mentransfer hanya jika akumulator < 0

08 DIV Membagi akumulator dengan isi lokasi storage

09 READ Membaca kartu pada lokasi storage

10 PRINT Mencetak isi lokasi storage LIR Memanggil index register dengan 3 digit terakhir dari storage

operand

11 IIR Menaikkan index register dengan 3 digit terakhir dari storage operand

12 LOOP Mengurangi index register, jika isi baru . 0 kemudian sama denan TRANS

2. Symbolic operand specification. Penamaan simbol diasosiasikan sebagai suatu data atau instruksi. Operand lebih menunjukkan symbolic reference dibandingkan dengan alamat mesin suatu data atau instruksi. Hal ini akan mempermudah pada saat harus dilakukan modifikasi program.


(10)

3. Declaration of data/storage area. Data dapat dinyatakan dalam notasi desimal. Ini dilakukan untuk mencegah konversi secara manual dari konstanta ke dalam representasi internal mesin. Sebagai contoh :

-5 menjadi (11111010)2 atau 10.5 menjadi (41A80000)16

Suatu statement bahasa assembly mempunyai bentuk umum sebagai berikut :

[Label] Menmonic OpCode Operand [operand…]

Tanda kurung siku menunjukkan isi di dalamnya boleh digunakan atau tidak dalam statement tersebut, sebagai contoh : label bersifat optional. Jika label digunakan, hal tersebut menujukkan suatu symbolic name akan dibuat dalam machine word untuk keperluan assembly statement. Bila digunakan lebih dari satu operand, digunakan tanda “koma” untuk memisahkannya. Jika digunakan index, nomor index register ditunjukan dalam sebuah simbol, seperti contoh berikut :

AGAIN LOAD NUMBER(4)

Dimana ‘4’ menunjukkan register yang memiliki index. AGAIN diasosiasikan dengan instruksi mesin yang dihasilkan untuk statement LOAD.

Gambar 2.2 berikut ini mengilustrasikan program bahasa mesin yang dipersamakan dengan bahasa assembly


(11)

100) + 09 0 114 101) + 11 4

114 102) + 04 0

115 103) + 05 0

117 104) + 05 0

116 105) + 04 0

117 106) + 03 0

116 107) + 05 0

117 108) + 04 0

116 109) + 01 0

115 110) + 05 0

116 111) + 13 4

105 112) + 100

117 113) + 00 0

000 114)

115) + 00 0 001 AGAIN A ONE TERM RESULT START READ LIR LOAD STORE STORE LOAD MULT STORE LOAD ADD STORE LOOP PRINT STOP DS DC DS DS END 100 A 4, A ONE RESULT TERM RESULT TERM RESULT TERM ONE TERM 4, AGAIN RESULT 1 ‘1’ 1 1


(12)

116) 117)

Imperative Statement

Statement imperative dalam bahasa assembly ditunjukan dengan suatu tindakan yang dikerjakan selama eksekusi program assembly. Karena itu setiap statement imperative ditranslasikan ke dalam instruksi mesin.

Format instruksi :


(13)

egister address

Declarative Statement

Statement declarative dalam bahasa assembly menunjukkan konstanta atau storage area pada suatu program. Sebagai contoh :

A DS 1

secara sederhana storage area sebesar 1 word ditunjukkan dengan sebuah label A. DS di sini menunjukkan Declare Storage (DS).

Suatu konstanta dideklarasikan melalui Declare Constant (DC) statement, contohnya :

ONE DC ‘1’

maksud dari statement di atas adalah label ONE berisi konstanta 1. Programmer dapat mendeklarasikan kontanta dalam desimal, binary, hexadesimal, dsb. Assembler akan mengkonversi bentuk tersebut ke dalam bentuk internal yang tepat.

Beberapa assembler sering pula menggunakan’literal’ khususnya pada konstanta yang dipakai sebagai operand, seperti contoh berikut :

ADD ONE ADD = ‘1’

- -

- -

ONE DC ‘1’

Penggunaan tanda “=” pada posisi awal suatu operand menunjukkan sebuah literal. Nilai konstanta yang ditulis dengan cara demikian sama dengan nilai yang dihasilkan bila menggunakan statement DC.


(14)

Assembler Directive

Seperti sudah dibahas di atas, bagian Mnemonik dari sebuah baris perintah bisa merupakan instruksi untuk prosesor, maupun berupa Assembler Directive untuk mengatur kerja dari program Assembler. Mnemonik untuk instruksi prosesor, sangat tergantung pada prosesor yang dipakai, sedangkan mnemonik untuk Assembler Directive tergantung pada program Assembler yang dipakai. Meskipun demikian, terdapat beberapa Assembler Directive yang umum, yang sama untuk banyak macam program Assembler.

Assembler Directive yang bersifat umum tersebut, antara lain adalah ORG – singkatan dari ORIGIN, untuk menyatakan nomor memori yang dipakai setelah perintah itu, misalnya ORG 0000h maka memori berikutnya yang dipakai Assembler adalah 0000h. ORG berlaku untuk memori program maupun memori-data. Dalam hal penomoran memori, dikenal tanda sebagai awalan untuk menyatakan nomor memori dari baris bersangkutan. Misalnya :

ORG 0H

MOV A,#11111110B Mulai:

MOV P0,A

a. EQU – singkatan dari EQUATE, dipakai untuk menentukan nilai sebuah Symbol. Misalnya Angka88 EQU 88 memberi nilai 88 pada Symbol Angka88, atau CR EQU 0D mempunyai makna kode ASCII dari CR (Caarriage Return) adalah 08.


(15)

b. DB – singkatan dari DEFINE BYTE, dipakai untuk memberi nilai tertentu pada memoriprogram. Nilai tersebut merupakan nilai 1 byte, bisa berupa angka ataupun kode ASCII. DB merupakan Assembler Directive yang dipakai untuk membentuk teks maupun tabel.

c. DW – singkatan dari DEFINE WORD, dipakai untuk memberi nilai 2 byte ke memoriprogram pada baris bersangkutan. Assembler Directive ini biasa dipakai untuk membentuk suatu tabel yang isinya adalah nomor-nomor memori-program.

d. DS – singkatan dari Define Storage, Assembler Directive ini dipakai untuk membentuk variable. Sebagai variabel tentu saja memori yang dipakai adalah memori-data (RAM) bukan memori-program

(ROM). Hal ini harus benar-benar dibedakan dengan Assembler Directive DB dan DW yang membentuk kode di memori-program. Dan karena DS bekerja di RAM, maka DS hanya sekedar menyediakan tempat di memori, tapi tidak mengisi nilai pada memori bersangkutan.

4.

Proses Assembly

Untuk membangun skema proses translasi dari satu bahasa ke bentuk lainnya, hal pertama yang harus dilakukan adalah mengindentifikasikan tugas-tugas dasar yang harus dikerjakannya dalam proses translasi tersebut.

4.1. Proses Translasi

Secara umum model proses translasi dapat direpresentasikan sebagai berikut :


(16)

Analysis of + Synthesis of = Translation from

Source Text Target Text Source Text to Target Text

Model di atas diterapkan untuk mentranslasikan dari sautu bahasa pemrograman ke bentuk lain, translasi dari satu bahasa natural (Inggris, Perancis) ke bentuk coding / decoding pesan rahasia. Untuk mengaplikasikan model di atas, kita perlu menentukan komponen-komponen yang dibutuhkan selama proses analisis dan sintesis.

Dalam fase analisis, focus perhatian kita adalah kepada penentuan arti dari source text. Untuk memahami arti dari source text

tersebut, kita mengetahui aturan yang membentuk source text

tersebut. Dalam aturan struktur tatabahasa (grammar), dikenal istilah

syntax dan semantic. Perhatikan statement berikut :

AGAIN

LOAD

RESULT + 4

Dalam statement di atas, AGAIN menunjukkan label field, LOAD menunjukkan opcode mnemonic field dan RESULT + 4 menunjukkan

operand field. Bila kita melihat lebih dalam lagi ke dalam operand field, kita dapat menukan bahwa RESULT + 4 adalah expression operand yang valid dan sesuai dengan aturan bahasa. Dalam bahasa assembly, aturan penulisan suatu statement sangat sederhana. Pembahasan mengenai tata bahasa akan dilanjutkan pada materi-materi berikutnya.


(17)

Dalam fase sintesis, dilakukan pemilihan machine operation code yang sesuai dengan mnemonic LOAD dan menempatkannya pada

machine instruction opcode field. Evaluasi korespondensi pengalamatan dilakukan untuk operand expression ’RESULT + 4’ dan menempatkannya pada alamat dari machine instruction.

4.2. Skema Sederhana Assembly Fase Analysis

- Mengisolasikan / memisahkan label, mnemonic operation code dan

operand field yang ada pada statement

- Memasukkan simbol yang ditemukan pada label field dan alamat yang akan dituju machine word ke dalam Symbol table.

- Melakukan validasi menmonic operation code dengan melihat pada

Mnemonic table

- Menentukan alamat yang dibutuhkan statement berdasar pada

mnemonic operation code dan operand field pada statement. Proses penghitungan alamat awal machine word mengikuti target code yang dibangkitkan untuk statement tersebut (Location Counter (LC) processing)

Fase Syntesis

- Menghasilkan machine operation code yang berkorespondensi dengan

mnemonic operation code yang telah dicari pada mnemonic table

- Menghasilkan alamat operand dari Symbol table

- Melakukan sintesa instruksi machine

4.3. Pass Structure pada Assembler

Pada pembahasan di atas, kita telah mengidentifikasikan fungsi fase analisi dan sintesis dari assembler. Sekarang kita akan melihat fase


(18)

program assembly ini berdasarkan statment demi statement hingga menghasilkan target program, seperti terlihat dari gambar 2.3 berikut ini :

Assem bly

Equivalent languange target statement code

Gambar 2.3. Translasi statement demi statement program bahasa assembly Perhatikan contoh program assembly berikut ini :

MOVE. L FOUR, DO ADD.L

FIVE, DO

MOVE.L DO, SUM FOUR DC.L 4 FIVE DC.L 5 SUM DS.L 1

Pada contoh di atas terlihat bahwa FIVE merupakan label yang menunjuk pada alamat dimana isi dari FIVE tersebut disimpan. Dalam kasus ini FIVE tidak terdefinisi sebelumnya . Oleh karena ini, penterjemahan bentuk ini disebut forward reference. Pada kasus

forward reference alamat dari label harus dikenali dalam jenisnya untuk diterjemahkan ke dalam suatu program yang semestinya. Solusi yang ditawarkan adalah kita perlu melakukan proses terhadap source statement lebih dari satu kali atau dilakukan secara beberapa tahap. Hal ini dikenal dengan konsep translator pass.


(19)

Translator pass adalah penelusuran secara menyeluruh source program input oleh translator hingga mencapai equivalent representation.

Translasi yang dilakukan statement demi statement disebut single pass translation, sedangkan translasi yang dilakukan sekelompok statement yang membutuhkan banyak pass disebut multipass translation.

A. Multi-Pass Translation

Multi pass translation dalam program bahasa assembly dapat menangani masalah forward reference. Unit pada source program

digunakan untuk tujuan mentranslasi semua bagian program. Ketika fase analisis statement program pertama kali dilakukan, proses LC akan dikerjakan dan simbol yang didefinisikan dalam program dimasukkan ke dalam simbol table. Selama second pass, statement diproses dengan tujuan mensintesa target form. Semua simbol dan alamat yang dapat ditemukan dalam simbol table tidak akan menimbulkan forward reference pada assembly.

Kalimat “equivalent representation” digunakan pada translasi yang membutuhkan elaborasi. Sering kali ketika proses pemisahan field

label, mnemonic opcode dan operand field terjadi duplikasi. Untuk mengurangi duplikasi tersebut, hasil analisa source statement dari first pass direpresentasikan dalam internal form pada source statement. Bentuk ini disebut intermediate


(20)

Gambar 2.4. Skema multi pass assembler

Selain membangun intermediate code, suatu assembler pass juga membangun dan/atau mengganti data base yang digunakan

subsequent pass. Karena kebutuhan untuk membangun dan memproses

intermediate code, suatu multi pass translator menjalankan fungsinya lebih lambat dibandingkan dengan single pass translation.

B. Single Pass Translation

Dalam single pass translation, pemecahan forward reference dapat ditangani sebagai berikut : instruksi yang memuat forward reference

dapat ditinggalkan dalam keadaan tidak selesai hingga alamat

reference symbol diketahui. Untuk meletakkan alamat operand pada bagain akhir dapat disimpan pada Table of Incomplete Instruction (TII). Di akhir program assembly, semua masukan pada table dapat diproses secara lengkap sesuai instruksinya.

Keuntungan menggunakan single pass translation adalah setiap source statement hanya diproses satu kali. Proses ini lebih cepat bila dibandingkan dengan multi pass translation. Namun demikian, ada kekurangan yang terdapat pada single pass translation, yaitu besarnya


(21)

area storage yang dibutuhkan oleh assembler, sebagai akibat dijalankannya fase analysis dan synthesis pada pass yang sama.

Secara umum dikenal ada dua macam tipe single pass translation / one pass, yaitu :

- single pass translation yang menghasilkan kode objek langsung ke memori, yang mengakibatkan eksekusi menjadi lebih cepat.

- single pass translation yang menghasilkan berbagai tipe pemrograman untuk keperluan eksekusi selanjutnya

Perancangan Two Pass Assembler Pass I

- memisahkan symbol, mnemonic opcode dan operand field

- menentukan storage yang dibutuhkanuntuk setiap statement bahasa assembly dan mengupdate location counter

- membangun symbol table

- merancang intermediate code untuk setiap statement bahasa assembly Pass II

mensintesa target code dengan memproses intermediate code yang dibangkitkan selama pass I


(22)

Pada Pass I digunakan beberapa table, yaitu :

(i) OPTAB : table mnemonic opcode dan informasi lain yang terkait (ii) SYMTAB : symbol table


(23)

Mnemonic OpCode

Class Machine

opcode / Routine id

Length

LOAD 1

(Imperative)

04 1

DS 2

(Declarative)

R#7 -

START 3 (Directive) R#11 -

STORE 1

(Imperative)

05 1

OPTAB

SYMTAB

LITTAB Literal Address

‘5’ = = ‘1’

‘1’ =

PO OLTAB

Next free entry

Current pool pointer

Symbol Address Length Other

Informatio n


(1)

program assembly ini berdasarkan statment demi statement hingga menghasilkan target program, seperti terlihat dari gambar 2.3 berikut ini :

Assem bly

Equivalent languange target statement code

Gambar 2.3. Translasi statement demi statement program bahasa assembly

Perhatikan contoh program assembly berikut ini :

MOVE. L FOUR, DO ADD.L

FIVE, DO

MOVE.L DO, SUM FOUR DC.L 4 FIVE DC.L 5

SUM DS.L 1

Pada contoh di atas terlihat bahwa FIVE merupakan label yang menunjuk pada alamat dimana isi dari FIVE tersebut disimpan. Dalam kasus ini FIVE tidak terdefinisi sebelumnya . Oleh karena ini, penterjemahan bentuk ini disebut forward reference. Pada kasus forward reference alamat dari label harus dikenali dalam jenisnya untuk diterjemahkan ke dalam suatu program yang semestinya. Solusi yang ditawarkan adalah kita perlu melakukan proses terhadap source statement lebih dari satu kali atau dilakukan secara beberapa tahap. Hal ini dikenal dengan konsep translator pass.


(2)

Translator pass adalah penelusuran secara menyeluruh source program input oleh translator hingga mencapai equivalent representation.

Translasi yang dilakukan statement demi statement disebut single pass translation, sedangkan translasi yang dilakukan sekelompok statement yang membutuhkan banyak pass disebut multipass translation.

A. Multi-Pass Translation

Multi pass translation dalam program bahasa assembly dapat menangani masalah forward reference. Unit pada source program digunakan untuk tujuan mentranslasi semua bagian program. Ketika fase analisis statement program pertama kali dilakukan, proses LC akan dikerjakan dan simbol yang didefinisikan dalam program dimasukkan ke dalam simbol table. Selama second pass, statement diproses dengan tujuan mensintesa target form. Semua simbol dan alamat yang dapat ditemukan dalam simbol table tidak akan menimbulkan forward reference pada assembly.

Kalimat “equivalent representation” digunakan pada translasi yang membutuhkan elaborasi. Sering kali ketika proses pemisahan field label, mnemonic opcode dan operand field terjadi duplikasi. Untuk mengurangi duplikasi tersebut, hasil analisa source statement dari first pass direpresentasikan dalam internal form pada source statement. Bentuk ini disebut intermediate


(3)

Gambar 2.4. Skema multi pass assembler

Selain membangun intermediate code, suatu assembler pass juga membangun dan/atau mengganti data base yang digunakan subsequent pass. Karena kebutuhan untuk membangun dan memproses intermediate code, suatu multi pass translator menjalankan fungsinya lebih lambat dibandingkan dengan single pass translation.

B. Single Pass Translation

Dalam single pass translation, pemecahan forward reference dapat ditangani sebagai berikut : instruksi yang memuat forward reference dapat ditinggalkan dalam keadaan tidak selesai hingga alamat reference symbol diketahui. Untuk meletakkan alamat operand pada bagain akhir dapat disimpan pada Table of Incomplete Instruction (TII). Di akhir program assembly, semua masukan pada table dapat diproses secara lengkap sesuai instruksinya.

Keuntungan menggunakan single pass translation adalah setiap source statement hanya diproses satu kali. Proses ini lebih cepat bila dibandingkan dengan multi pass translation. Namun demikian, ada kekurangan yang terdapat pada single pass translation, yaitu besarnya


(4)

area storage yang dibutuhkan oleh assembler, sebagai akibat dijalankannya fase analysis dan synthesis pada pass yang sama.

Secara umum dikenal ada dua macam tipe single pass translation / one pass, yaitu :

- single pass translation yang menghasilkan kode objek langsung ke memori, yang mengakibatkan eksekusi menjadi lebih cepat.

- single pass translation yang menghasilkan berbagai tipe pemrograman untuk keperluan eksekusi selanjutnya

Perancangan Two Pass Assembler Pass I

- memisahkan symbol, mnemonic opcode dan operand field

- menentukan storage yang dibutuhkanuntuk setiap statement bahasa assembly dan mengupdate location counter

- membangun symbol table

- merancang intermediate code untuk setiap statement bahasa assembly

Pass II

mensintesa target code dengan memproses intermediate code yang dibangkitkan selama pass I


(5)

Pada Pass I digunakan beberapa table, yaitu :

(i) OPTAB : table mnemonic opcode dan informasi lain yang terkait (ii) SYMTAB : symbol table


(6)

Mnemonic OpCode

Class Machine

opcode / Routine id

Length

LOAD 1

(Imperative)

04 1

DS 2

(Declarative)

R#7 -

START 3 (Directive) R#11 -

STORE 1

(Imperative)

05 1

OPTAB

SYMTAB

LITTAB

Literal Address ‘5’ = = ‘1’ ‘1’ = PO OLTAB

Next free entry

Current pool pointer

Symbol Address Length Other

Informatio n