Bahasa Assembler
Bahasa rakitan atau lebih umum dikenal sebagai Assembly adalah bahasa pemrograman tingkat rendah yang digunakan dalam pemrograman komputer, micro proccessor, pengendali mikro, dan perangkat lainnya yang dapat diprogram. Bahasa rakitan mengimplementasikan representasi atas kode mesin dalam bentuk simbol-simbol yang secara relatif lebih dapat dipahami oleh manusia. Berbeda halnya dengan bahasa-bahasa tingkat tinggi yang berlaku umum, bahasa rakitan biasanya mendukung secara spesifik untuk suatu ataupun beberapa jenis arsitektur komputer tertentu. Dengan demikian, portabilitas bahasa rakitan tidak dapat menandingi bahasa-bahasa lainnya yang merupakan bahasa pemrograman tingkat tinggi. Namun demikian, bahasa rakitan memungkinkan programmer memanfaatkan secara penuh kemampuan suatu perangkat keras tertentu yang biasanya tidak dapat ataupun terbatas bila dibuat dengan menggunakan bahasa pemrograman tingkat tinggi.
Pada bahasa rakitan, programmer umumnya menggunakan sebuah program utilitas yang disebut sebagai perakit (bahasa Inggris: assembler) yang digunakan untuk menerjemahkan kode dalam bahasa rakitan tersebut ke dalam kode mesin untuk perangkat keras tertentu. Sebuah perintah dalam bahasa rakitan biasanya akan diterjemahkan menjadi sebuah instruksi mnemonic dalam kode mesin, berbeda halnya dengan kompiler pada bahasa pemrograman tingkat tinggi yang menerjemahkan sebuah perintah menjadi sejumlah instruksi dalam kode mesin.
Beberapa perangkat lunak bahasa rakitan terkenal biasanya menyediakan tambahan fitur untuk memgasilitasi proses pengembangan program, mengontrol proses perakitan, dan alat bantu debugging.
Dasar alasan menggunakan bahasa rakitan
Ada beberapa dasar alasan menggunakan bahasa rakitan dilihat dari sudut pandang penggunaannya:
· Bahasa rakitan dibandingkan dengan bahasa mesin, bahasa rakitan merupakan representasi atas bahasa mesin yang dirancang agar lebih mudah dipahami oleh manusia. Dengan menggunakan bahasa rakitan, seorang programmer dapat lebih mudah mengingat instruksi-instruksi dengan menggunakan simbol yang lebih dapat dimengerti dibandingkan bila menggunakan simbol mnemonic kode mesin secara langsung. Demikian halnya pula dengan mekanisme lompatan yang umum terdapat dalam bahasa mesin yang biasanya menggunakan alamat memori, programmer dapat lebih mudah menggunakan fasilitas labeling yang terdapat bahasa rakitan dibandingkan menggunakan alamat memori tertentu dalam kode mnemonic.
· Bahasa rakitan dibandingkan dengan bahasa tingkat tinggi, bahasa rakitan memungkinkan programmer untuk mengontrol serta memanfaatkan secara penuh kapabilitas yang terdapat atas suatu perangkat keras, berbeda halnya dengan bahasa pemrograman tingkat tinggi yang memiliki banyak keterbatasan dalam pemanfaatan secara penuh suatu perangkat keras. Bahasa rakitan menjanjikan tingkat unjuk kerja yang maksimum karena sifatnya yang menerjemahkan secara langsung instruksi rakitan menjadi instruksi mesin, berbeda halnya dengan bahasa pemrograman tingkat tinggi yang biasanya menerjemahkan sebuah instruksi menjadi sejumlah kode mesin.
Representasi kode mesin
Bahasa rakitan menerjemahkan sebuah instruksi rakitan menjadi instruksi mesin, umumnya mekanisme penerjemahan ini bersifat 1-1, karenanya dapat disebutkan pula bahwa setiap instruksi dalam bahasa rakitan merupakan representasi dari instruksi kode mesin.
Sebagai contoh, berikut adalah instruksi yang digunakan pada prosesor x86 untuk memindahkan nilai 97 sebesar 8-bit ke dalam register prosesor AL. Kode biner atas instruksi pemindahan adalah 10110 diikuti dengan 3-bit pengenal atas register yang akan digunakan. Pengenal atas register AL dalam hal ini adalah 000. Kemudian, nilai 97 dalam kode biner adalah 01100001, sehingga kode mesin yang digunakan untuk memindahkannya adalah sebagai berikut:
Sebagai contoh, berikut adalah instruksi yang digunakan pada prosesor x86 untuk memindahkan nilai 97 sebesar 8-bit ke dalam register prosesor AL. Kode biner atas instruksi pemindahan adalah 10110 diikuti dengan 3-bit pengenal atas register yang akan digunakan. Pengenal atas register AL dalam hal ini adalah 000. Kemudian, nilai 97 dalam kode biner adalah 01100001, sehingga kode mesin yang digunakan untuk memindahkannya adalah sebagai berikut:
10110000 01100001
Kode biner ini dapat diubah agar lebih mudah dibaca manusia dengan mengkonversikannya dalam bilangan heksadesimal sebagai berikut:
B0 61
Pada instruksi diatas, B0 berarti: 'Pindahkan nilai berikut ke register AL', dan 61 adalah representasi bilangan heksadesimal untuk nilai 01100001, atau 97 dalam bilangan desimal. Bahasa rakitan untuk prosesor Intel menyediakan simbol mnemonic MOV (yang merupakan singkatan dari move) untuk instruksi serupa sehingga kode mesin sebelumnya dapat ditulis dalam bahasa rakitan sebagai berikut:
MOV AL, 61h ; Isi register AL dengan nilai 97 (61h)
Bahasa rakitan memungkinkan programmer menambahkan komentar atas setiap instruksi yang ditulis untuk mempermudah pembacaan dan lebih mudah pemahaman.
Derikut table dari kumpulan instrusi pada bahasa assembler yang dapat terangkum:
| No | Intruksi | Fungsi |
| 1. | ACALL | Absolute Call --> memanggil fungsi |
| 2. | AJMP | Absolute Jump |
| 3. | ADDC | Add with Carry |
| 4. | ANL | AND Logic |
| 5. | CMC | Carry flag dikomplemenkan. |
| 6. | STC | Carry flag di-set ke 1. |
| 7. | CLR | Clear |
| 8. | CJNE | Compare and Jump if Not Equal |
| 9. | CPL | Complement |
| 10. | HLT | CPU telah selesai mengeksekusi instruksi tertentu dan menghentikan pengeksekusian lebih jauh. |
| 11. | DA | Decimal Adjust |
| 12. | DEC | Decrement |
| 13. | DJNZ | Decrement and Jump if Not Zero |
| 14. | DIV | Divide |
| 15. | XCH | Exchange Bytes |
| 16. | XCHD | Exchange Digits |
| 17. | XRL | Exclusive OR Logic |
| 18. | DI | Ganguan pada flip-flop di-reset dan semua gangguan kecuali TRAP dilumpuhkan. |
| 19. | EI | Ganguan pada flip-flop di-set dan semua gangguan dilumpuhkan. |
| 20. | INC | Increment |
| 21. | IN | Instruksi untuk membaca dan memuat isi dari input port yang didesain oleh operand. |
| 22. | CPI | Instruksi untuk membandingkan byte kedua (8-bit data) dengan isi dari akumulator. |
| 23. | CMP | Instruksi untuk membandingkan isi dari operand dengan isi dari akumulator. |
| 24. | INX | Instruksi untuk menambahkan 1 isi dari register atau memori yang telah didesain dan hasilnya disimpan dalam tempat yang sama. |
| 25. | INR | Instruksi untuk menambahkan 1 isi dari register atau memori yang telah didesain dan hasilnya disimpan dalam tempat yang sama. Apabila operandnya adalah lokasi memori, lokasinya dapat dispesifikasi oleh isi dari register HL. |
| 26. | ACI | Instruksi untuk menambahkan data 8-bit (operand) dan carry flag ke dalam isi dari akumulator dan hasilnya disimpan dalam akumulator. |
| 27. | ADI | Instruksi untuk menambahkan data 8-bit (operand) ke dalam isi dari akumulator dan hasilnya disimpan dalam akumulator. |
| 28. | ADD | Instruksi untuk menambahkan isi dari akumulator dengan isi operand dan kemudian hasilnya disimpan ke dalam akumulator. |
| 29. | ADC | Instruksi untuk menambahkan isi dari operand dan carry flag ke isi dari akumulator dan hasilnya disimpan dalam akumulator. |
| 30. | DAD | Instruksi untuk menambahkan sepasang register tertentu (berisi 16-bit) ke dalam isi dari register HL dan hasilnya disimpan ke dalam register tersebut. |
| 31. | DCX | Instruksi untuk mengurangi 1 isi dari register atau memori yang telah didesain dan hasilnya disimpan dalam tempat yang sama. |
| 32. | DCR | Instruksi untuk mengurangi 1 isi dari register atau memori yang telah didesain dan hasilnya disimpan dalam tempat yang sama. Apabila operandnya adalah lokasi memori, lokasinya dapat dispesifikasi oleh isi dari register HL. |
| 33. | SBI | Instruksi untuk mengurangi data 8-bit (operand) dan borrow flag dari isi akumulator dan hasilnya disimpan dalam akumulator. |
| 34. | SUI | Instruksi untuk mengurangi data 8-bit (operand) dari isi akumulator dan hasilnya disimpan dalam akumulator. |
| 35. | SBB | Instruksi untuk mengurangi isi operand dan borrow flag dari isi akumulator dan hasilnya disimpan dalam akumulator. |
| 36. | SUB | Instruksi untuk mengurangi isi operand dari isi akumulator dan hasilnya disimpan dalam akumulator. |
| 37. | RET | Instruksi untuk mentransfer sequence program dari suatu kebiasaan ke program panggilan. |
| 38. | JMP | Instruksi untuk mentransfer sequence program ke lokasi memori yang dispesifikasi oleh adalamat 16-bit yang diberikan oleh operand. |
| 39. | CALL | Instruksi untuk mentransfer sequence program ke lokasi memori yang dispesifikasi oleh adalamat 16-bit yang diberikan oleh operand. Sebelum melakukan transfer, alamat daru instrukesi setelah CALL akan dimasukkan ke dalam stack. |
| 40. | STAX | Instruksi untuk menyalin isi dari akumulator ke dalam lokasi memori yang dikhususkan oleh operand (register pair). |
| 41. | STA | Instruksi untuk menyalin isi dari akumulator ke dalam lokasi memori yang dikhususkan oleh operand. Ini adalah instruksi 3-byte, byte kedua dikhususkan untuk low-order address dan byte ketiga dikhususkan untuk high-order address. |
| 42. | OUT | Instruksi untuk menyalin isi dari akumulator ke I/O port. |
| 43. | LHLD | Instruksi untuk menyalin isi dari lokasi memori yang ditunuk oleh alamat 16-bit ke dalam register L dan menyalin isi dari lokasi memori selanjutnya ke dalam register H. |
| 44. | PCHL | Instruksi untuk menyalin isi dari register H dan L ke dalam program counter. |
| 45. | DAA | Instruksi untuk merubah isi dari akumulator dari bentuk biner ke dua digit 4-bit kode biner decimal (BCD). |
| 46. | ANI | Instruksi yang bekerkerja seperti logika AND dan meng-AND-an isi dari akumulator dengan data 8-bit (operand) dan hasilnya disimpan dalam akumulator. |
| 47. | ANA | Instruksi yang bekerkerja seperti logika AND dan meng-AND-an isi dari akumulator dengan operand dan hasilnya disimpan dalam akumulator. |
| 48. | XCHG | Instruksi yang digunakan untuk menukar isi dari register H dengan isi register D, dan isi register L dengan isi register E. |
| 49. | XTHL | Instruksi yang digunakan untuk menukat isi register L dengan stack location pointed out oleh isi dari register stack pointer. Isi dari register H ditukar dengan lokasi stack selanjutnya (SP+1). |
| 50. | LDA | Instruksi yang digunakan untuk menyalin isi dari lokasi memori (khusus untuk alamat 16-bit di operand) ke dalam akumulator. |
| 51. | LDAX | Instruksi yang digunakan untuk menyalin isi dari lokasi memori ke akumulator. Isi dari memori lokasi adalah poin dari sepasang register. |
| 52. | POP | Instruksi yang digunakan untuk menyalin isi dari lokasi memori yang ditunjuk oleh stack pointer register ke register low-order (C,E,L,Flags) dari operand. Stack pointer ditambah dengan 1 dan isi dari lokasi memori disalin ke register high-order (B,D,H.A) dari operand.stack dari register pointer ditambahkan 1 lagi. |
| 53. | PUSH | Instruksi yang digunakan untuk menyalin isi dari pasangan register yang didesain di operand ke stack pada sequence tertentu. Stack dari pointer register dikurangi dan isi dari register high-order (B,D,H.A) disalin pada lokasi tersebut. Stack dari pointer register dikurangi lagi dan isi dari register low-order (C,E,L,Flags) di salin pada lokasi tersebut. |
| 54. | MOV | Instruksi yang digunakan untuk menyalin isi dari register sumber ke register lain yang dituju. |
| 55. | MVI | Instruksi yang digunakan untuk menyimpan data 8-bit di dalam register yang dituju atau memori. |
| 56. | SHLD | Instruksi yang digunakan untuk menyimpan isi dari register L ke dalam lokasi memori yang dikhususkan oleh alamat 16-bit di dalam operand dan isi dari register H di simpan ke dalam lokasi memori selanjutnya dengan menambah operand. Ini adalah instruksi 3-byte, byte kedua dikhususkan untuk low-order address dan byte ketiga dikhususkan untuk high-order address. |
| 57. | SPHL | Instruksi yang memuat isi dari register H dan L ke dalam register stack pointer, isi dari register H menyediakan alamat high-order dan isi dari register L menyediakan alamat low-order. |
| 58. | LXI | Instrusi yang digunakan untuk memuat data 16-bit ke dalam sepasang register yang telah didesain di dalam operand. |
| 59. | XRA | Isi dari akumulator di-Exclusive OR-kan dengan isi dari operand dan hasilnya disimpan ke akumulator. |
| 60. | XRI | Isi dari akumulator di-Exclusive OR-kan dengan isi data 8-bit (operand) dan hasilnya disimpan ke akumulator. |
| 61. | CMA | Isi dari akumulator dikomplemenkan. |
| 62. | ORA | Isi dari akumulator di-OR-kan dengan isi dari operand dan hasilnya disimpan ke akumulator. |
| 63. | ORI | Isi dari akumulator di-OR-kan dengan isi data 8-bit (operand) dan hasilnya disimpan ke akumulator. |
| 64. | JNZ | Jump if Accumulator Not Zero |
| 65. | JZ | Jump if Accumulator Zero |
| 66. | JB | Jump if Bit Set |
| 67. | JBC | Jump if Bit Set and Clear Bit |
| 68. | JNC | Jump if Carry Not Set |
| 69. | JC | Jump if Carry Set |
| 70. | JNB | Jump if Not Bit Set |
| 71. | LCALL | Long Call |
| 72. | LJMP | Long Jump |
| 73. | MOVC | Move from Code Memory |
| 74. | MOVX | Move from Extended Memory |
| 75. | MUL | Multiply |
| 76. | ORL | OR Logic |
| 77. | RETI | Return From Interrupt |
| 78. | RL | Rotate Left |
| 79. | RR | Rotate Right |
| 80. | RIM | Sebuah instruksi multipurpose yang digunakan untuk membaca status dari sejumlah gangguan dan membaca serial data input bit. |
| 81. | SIM | Sebuah instruksi multipurpose yang digunakan untuk memberbaharui gangguan dari 8085 dan serial data output. |
| 82. | SETB | Set Bit |
| 83. | RAR | Setiap bit biner dalam akumulator diputar posisinya ke kanan satu posisi melalui carry flag.. |
| 84. | RRC | Setiap bit biner dalam akumulator diputar posisinya ke kanan satu posisi. |
| 85. | RAL | Setiap bit biner dalam akumulator diputar posisinya ke kiri satu posisi melalui carry flag. |
| 86. | RLC | Setiap bit biner dalam akumulator diputar posisinya ke kiri satu posisi. |
| 87. | SJMP | Short Jump |
| 88. | RST | Suatu instruksi yang ekuivalen dengan instruks pemanggilan 1-byte ke sari dari delapan lokasi memori bergantung pada nomor yang ada. |
| 89. | SUBB | Subtract With Borrow |
| 90. | SWAP | Swap Nibbles |
| 91. | NOP | Tidak ada operasi yang dijalankan atau dieksekusi. Instruksi diambil dan dikode ulang. |
Tidak ada komentar:
Posting Komentar