{"id":1250,"date":"2024-08-10T04:33:55","date_gmt":"2024-08-09T21:33:55","guid":{"rendered":"https:\/\/delta-electronic.com\/Design\/Hardwares\/?p=1250"},"modified":"2024-08-26T05:56:02","modified_gmt":"2024-08-25T22:56:02","slug":"bahasa-assembly-dan-instruksi-instruksi-mcs-51","status":"publish","type":"post","link":"https:\/\/delta-electronic.com\/Design\/Hardwares\/bahasa-assembly-dan-instruksi-instruksi-mcs-51\/","title":{"rendered":"Bahasa Assembly MCS-51"},"content":{"rendered":"<p><strong>Apa itu Bahasa Assembly?<\/strong><\/p>\n<p>Bahasa Assembly adalah merupakan bahasa dasar yang digunakan oleh mikrokontroler atau microprocessor sebelum Bahasa C dikenal. Bahasa ini mungkin memang lebih sulit dipahami dan kurang user friendly, namun bahasa ini lebih optimize sehingga dalam segi ukuran maupun kecepatan akan lebih kecil dan cepat daripada Bahasa C. Hal ini disebabkan karena instruksi-instruksi yang ada dalam Bahasa C sebenarnya adalah kumpulan instruksi-instruksi Bahasa Assembly di mana instruksi tersebut biasanya dirancang dengan fungsi yang universal sehingga seringkali banyak instruksi-instruksi assembly yang belum tentu terpakai. Instruksi-instruksi inilah yang menyebabkan ukuran dan kecepatan kinerja Bahasa C akan lebih besar dan lebih rendah daripada Bahasa Assembly.<\/p>\n<p>Dalam artikel kali ini Bahasa Assembly yang akan saya bahas adalah Bahasa Assembly MCS51.<\/p>\n<p><strong>Program Sumber Assembly<\/strong><\/p>\n<p>Merupakan program yang ditulis oleh pembuat program berupa kumpulan baris-baris perintah dan biasanya disimpan dengan extension .ASM<\/p>\n<p><strong>Program Obyek <\/strong><\/p>\n<p>Merupakan file hasil utama dari proses assembly berupa kode-kode yang hanya dikenali oleh mikrokontroler\/mikroprosesor dan biasanya disimpan dengan extension .HEX atau .BIN<\/p>\n<p><img fetchpriority=\"high\" decoding=\"async\" class=\"alignnone size-full wp-image-1251\" src=\"https:\/\/delta-electronic.com\/Design\/Hardwares\/wp-content\/uploads\/2024\/08\/proses-assembly.png\" alt=\"\" width=\"624\" height=\"258\" srcset=\"https:\/\/delta-electronic.com\/Design\/Hardwares\/wp-content\/uploads\/2024\/08\/proses-assembly.png 624w, https:\/\/delta-electronic.com\/Design\/Hardwares\/wp-content\/uploads\/2024\/08\/proses-assembly-300x124.png 300w\" sizes=\"(max-width: 624px) 100vw, 624px\" \/><\/p>\n<p><strong>Assembly Listing<\/strong><\/p>\n<p>Merupakan file hasil dari proses assembly dalam rupa campuran antara kode-kode yang hanya dikenali oleh mikrokontroler\/mikroprosesor, program sumber assembly beserta alamat-alamatnya<\/p>\n<p><img decoding=\"async\" class=\"alignnone size-full wp-image-1252\" src=\"https:\/\/delta-electronic.com\/Design\/Hardwares\/wp-content\/uploads\/2024\/08\/program-obyek.png\" alt=\"\" width=\"517\" height=\"253\" srcset=\"https:\/\/delta-electronic.com\/Design\/Hardwares\/wp-content\/uploads\/2024\/08\/program-obyek.png 517w, https:\/\/delta-electronic.com\/Design\/Hardwares\/wp-content\/uploads\/2024\/08\/program-obyek-300x147.png 300w\" sizes=\"(max-width: 517px) 100vw, 517px\" \/><\/p>\n<p class=\"CM3\" style=\"text-align: justify; text-justify: inter-ideograph;\"><b><span style=\"font-size: 13.0pt;\">Program Assembler <\/span><\/b><\/p>\n<p class=\"CM3\" style=\"text-align: justify; text-justify: inter-ideograph;\"><span style=\"font-size: 13.0pt;\">Merupakan perangkat lunak yang dibutuhkan untuk meng-assembly program sumber assembly menjadi program obyek <\/span><\/p>\n<p class=\"CM3\" style=\"text-align: justify; text-justify: inter-ideograph;\"><b><span style=\"font-size: 13.0pt;\">Program Downloader <\/span><\/b><\/p>\n<p class=\"CM26\" style=\"text-align: justify; text-justify: inter-ideograph; line-height: 30.3pt;\"><span style=\"font-size: 13.0pt;\">Merupakan perangkat lunak yang dibutuhkan untuk mendownload program obyek ke dalam target memori <\/span><\/p>\n<p><img decoding=\"async\" class=\"alignnone size-full wp-image-1253\" src=\"https:\/\/delta-electronic.com\/Design\/Hardwares\/wp-content\/uploads\/2024\/08\/program-monitor.png\" alt=\"\" width=\"781\" height=\"346\" srcset=\"https:\/\/delta-electronic.com\/Design\/Hardwares\/wp-content\/uploads\/2024\/08\/program-monitor.png 781w, https:\/\/delta-electronic.com\/Design\/Hardwares\/wp-content\/uploads\/2024\/08\/program-monitor-300x133.png 300w, https:\/\/delta-electronic.com\/Design\/Hardwares\/wp-content\/uploads\/2024\/08\/program-monitor-768x340.png 768w\" sizes=\"(max-width: 781px) 100vw, 781px\" \/><\/p>\n<p class=\"CM5\"><b><span style=\"font-size: 13.0pt;\">Program Monitor <\/span><\/b><\/p>\n<p><span style=\"font-size: 13.0pt; color: windowtext;\">Program yang bekerja dalam mikrokontroler dan menunggu perintah \u00adperintah dari PC untuk keperluan: <\/span><\/p>\n<ul>\n<li><span style=\"font-size: 13.0pt; color: windowtext;\">Pengambilan program obyek yang didownload oleh program downloader di PC dan menyimpan ke target memori <\/span><\/li>\n<li><span style=\"font-size: 13.0pt; color: windowtext;\">Eksekusi program obyek yang telah tersimpan di target memori<\/span><\/li>\n<li>Edit program obyek yang telah tersimpan di target memori<\/li>\n<\/ul>\n<p>Kalau pada era Arduino saat ini program ini mungkin lebih dikenal dengan program bootloader yang ada di arduino namun malah memiliki fungsi yang lebih kompleks karena adanya fungsi:<\/p>\n<ul>\n<li>Edit program obyek<\/li>\n<li>Built in function yang dapat dijalankan dengan memanggil alamat-alamat tertentu<\/li>\n<li>Display dan edit nilai-nilai register<\/li>\n<li>Real time debugging untuk mendebug jalannya program secara realtime<\/li>\n<\/ul>\n<p><strong>Bentuk Program Sumber Assembly<\/strong><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1254\" src=\"https:\/\/delta-electronic.com\/Design\/Hardwares\/wp-content\/uploads\/2024\/08\/bentuk-program-sumber-assembly.png\" alt=\"\" width=\"844\" height=\"158\" srcset=\"https:\/\/delta-electronic.com\/Design\/Hardwares\/wp-content\/uploads\/2024\/08\/bentuk-program-sumber-assembly.png 844w, https:\/\/delta-electronic.com\/Design\/Hardwares\/wp-content\/uploads\/2024\/08\/bentuk-program-sumber-assembly-300x56.png 300w, https:\/\/delta-electronic.com\/Design\/Hardwares\/wp-content\/uploads\/2024\/08\/bentuk-program-sumber-assembly-768x144.png 768w\" sizes=\"(max-width: 844px) 100vw, 844px\" \/><\/p>\n<p><strong>Label<\/strong><\/p>\n<p>Digunakan untuk memberi nama sebuah lokasi memori tertentu agar mempermudah pembuat program untuk membuat loncatan atau percabangan ke memori tersebut. Syarat pembuatan label:<\/p>\n<ul>\n<li>Harus diawali dengan huruf<\/li>\n<li><span style=\"font-size: 13.0pt; color: windowtext;\">Tidak diperbolehkan adanya label yang sama dalam satu program assembly <\/span><\/li>\n<li>Maksimal 16 karakter (hal ini merupakan batasan kemampuan dari software assembly yang saya gunakan yaitu ALDS)<\/li>\n<li>Tidak diperbolehkan adanya karakter spasi dalam label<\/li>\n<\/ul>\n<p class=\"CM6\" style=\"margin-left: 16.9pt;\"><b><span style=\"font-size: 13.0pt;\">Contoh: <\/span><\/b><\/p>\n<p style=\"padding-left: 40px;\">Ajmp IsiMemory<\/p>\n<p class=\"CM6\" style=\"margin-left: 16.9pt;\"><span style=\"font-size: 13.0pt; color: windowtext;\">Berarti program akan melompat ke alamat yang diberi label IsiMemory dan menjalankan instruksi-instruksi yang ada di sana. <\/span><\/p>\n<p><strong>Mnemonic<\/strong><\/p>\n<p>Biasa disebut kode operasi atau OpCode, terdiri dari dua macam:<\/p>\n<ul>\n<li>Kode operasi yang dikerjakan mikrokontroler Berupa kode-kode operasi yang sudah ditentukan oleh produsen mikrokontroler\/mikroprosesor seperti: MOV, ADD, MOVX dll<\/li>\n<li>Kode operasi yang dikerjakan oleh Program Assembler Berupa kode-kode operasi yang ditentukan oleh pembuat Program Assembler (Assembler Directive) seperti: ORG, EQU, DB dll<\/li>\n<\/ul>\n<p><strong>Operand<\/strong><\/p>\n<p>Merupakan pelengkap dari mnemonic, namun tidak semua mnemonic memerlukan operand.<\/p>\n<p style=\"padding-left: 40px;\">CJNE R7,#05H,Aksi1\u00a0 \u00a0 \u00a0 ;memerlukan 3 operand<\/p>\n<p style=\"padding-left: 40px;\">MOVX @DPTR,A\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 ;memerlukan 2 operand<\/p>\n<p style=\"padding-left: 40px;\">RL A\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0;memerlukan 1 operand<\/p>\n<p style=\"padding-left: 40px;\">NOP\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0;tidak memerlukan operand<\/p>\n<p>Operand juga dapat berupa label seperti yang tampak pada instruksi baris pertama<\/p>\n<p><strong>Komentar<\/strong><\/p>\n<p>Bagian ini tidak harus ada, namun untuk memperjelas jalannya program bagian ini dapat dituliskan sebagai catatancatatan<br \/>\nyang dianggap perlu oleh pembuat program.<\/p>\n<p><strong>Sistem Pengalamatan<\/strong><\/p>\n<ul>\n<li>Pengalamatan Langsung<\/li>\n<\/ul>\n<p style=\"padding-left: 40px;\">Terdiri dari:<\/p>\n<ul>\n<li style=\"list-style-type: none;\">\n<ul>\n<li>Immediate Data, proses ini terjadi pada instruksi di mana nilai operand itu sendiri adalah merupakan data yang akan dipindahkan dan selalu ditandai dengan lambang #.<\/li>\n<li style=\"list-style-type: none;\">Contoh:\n<ul>\n<li style=\"list-style-type: none;\">Mov\u00a0 A,#05H\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0;Operand kedua yang merupakan data 05H dipindah ke A<br \/>\nMov\u00a0 \u00a0A,#Data\u00a0 \u00a0 \u00a0 \u00a0 \u00a0;Operand kedua yang merupakan<br \/>\ndata yang sebelumnya telah dideklarasikan<br \/>\ndipindah ke A<\/li>\n<\/ul>\n<\/li>\n<li>Pengalamatan Data, proses ini terjadi pada instruksi di mana nilai operand adalah merupakan alamat dari data yang akan diisi dipindahkan atau diolah.<\/li>\n<li style=\"list-style-type: none;\">Contoh:\n<ul>\n<li style=\"list-style-type: none;\">Mov\u00a0 \u00a0 \u00a0P0,A\u00a0 \u00a0 \u00a0 \u00a0 \u00a0; berarti isi Acc A dipindah ke alamat register P0 (muncul pada I\/O Port 0)<\/li>\n<li style=\"list-style-type: none;\">Mov\u00a0 \u00a0 \u00a0A,#50h\u00a0 \u00a0 \u00a0; Isi alamat 50H dipindah ke Acc A<\/li>\n<li style=\"list-style-type: none;\">Inc\u00a0 \u00a0 50h\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 ; Isi alamat 50H ditambah 1<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<li>Pengalamatan Tak Langsung\n<ul>\n<li>Proses pengalamatan di mana salah satu operand adalah merupakan register berisikan alamat dari data yang akan diisi atau dipindahkan<\/li>\n<li>Pengalamatan ini menggunakan lambang @<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p style=\"padding-left: 80px;\">Contoh:<\/p>\n<p style=\"padding-left: 120px;\">Mov\u00a0 \u00a0@R0,A\u00a0 \u00a0 ;Isi Acc A dipindah ke alamat yang ditunjuk oleh R0<\/p>\n<p style=\"padding-left: 120px;\">Movx\u00a0 @DPTR,A\u00a0 ;Isi Acc A dipindah ke alamat yang ditunjuk oleh DPTR<\/p>\n<ul>\n<li>Pengalamatan Kode<\/li>\n<\/ul>\n<p style=\"padding-left: 40px;\">Merupakan sebuah pengalamatan di mana operand adalah merupakan alamat dari instruksi jump dan call (ACALL, AJMP, LJMP dan LCALL)<\/p>\n<p style=\"padding-left: 40px;\">Contoh:<\/p>\n<p style=\"padding-left: 40px;\">Start:<\/p>\n<p style=\"padding-left: 80px;\">\u00a0&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;.<\/p>\n<p style=\"padding-left: 80px;\">Ljmp\u00a0 \u00a0Start\u00a0 \u00a0 \u00a0 ;Program loncat ke alamat yang<br \/>\ndiberi oleh label start<\/p>\n<ul>\n<li>Pengalamatan Bit<\/li>\n<\/ul>\n<p style=\"padding-left: 40px;\">Proses pengalamatan yang menunjuk ke memori internal maupun<br \/>\nRegister Fungsi Khusus yang mempunyai kemampuan bit<br \/>\naddressable (dapat dialamati secara bit)<br \/>\nTerdapat 3 macam untuk menunjuk sebuah bit address:<\/p>\n<ul>\n<li style=\"list-style-type: none;\">\n<ul>\n<li>Langsung menunjuk ke alamat bit<\/li>\n<li style=\"list-style-type: none;\">Contoh:\n<ul>\n<li style=\"list-style-type: none;\">Setb\u00a0 \u00a067h<\/li>\n<\/ul>\n<\/li>\n<li>Menggunakan Operator Titik (Dot Operator)\n<ul>\n<li style=\"list-style-type: none;\">Clr.\u00a0 \u00a0A.7\u00a0 \u00a0 ; Clear bit ke tujuh dari Acc A<\/li>\n<\/ul>\n<\/li>\n<li>Menggunakan Lambang Assembler yang telah ditentukan\n<ul>\n<li>Ditentukan secara standard<\/li>\n<li style=\"list-style-type: none;\">Contoh:\n<ul>\n<li style=\"list-style-type: none;\">Clr\u00a0 \u00a0RI<\/li>\n<\/ul>\n<\/li>\n<li>Ditentukan secara bebas<\/li>\n<li style=\"list-style-type: none;\">Lambang ini harus ditentukan dahulu dengan menggunakan assembler directive pada awal program<\/li>\n<li style=\"list-style-type: none;\">Contoh:\n<ul>\n<li style=\"list-style-type: none;\">Switch\u00a0 \u00a0bit\u00a0 P1.0<\/li>\n<li style=\"list-style-type: none;\">Tunggu:\n<ul>\n<li style=\"list-style-type: none;\">Jb\u00a0 Switch,Tunggu\u00a0 \u00a0 \u00a0;Lompat ke label tunggu selama logika P1.0 high<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p><strong>Assembler Directive<\/strong><\/p>\n<ul>\n<li><strong>ORG (Origin)<\/strong> untuk menunjukkan lokasi memori tempat instruksi tersimpan<\/li>\n<\/ul>\n<p style=\"padding-left: 40px;\">Contoh:<\/p>\n<p style=\"padding-left: 80px;\">Org\u00a0 2000H<\/p>\n<p style=\"padding-left: 80px;\">Mov\u00a0 DPTR,#4000H\u00a0 \u00a0;Instruksi ini terletak pada alamat 2000H<\/p>\n<ul>\n<li><strong>EQU (Equate)<\/strong> untuk menentukan lambang (symbol)<\/li>\n<\/ul>\n<p style=\"padding-left: 40px;\">Contoh:<\/p>\n<p style=\"padding-left: 80px;\">Bilangan\u00a0 EQU 50H\u00a0 \u00a0 ;Lambang Bilangan adalah merupakan data 50H<\/p>\n<ul>\n<li><strong>DB (Define Byte)<\/strong>, untuk memberi nilai tertentu pada memori program<\/li>\n<\/ul>\n<p style=\"padding-left: 40px;\">Contoh:<\/p>\n<p style=\"padding-left: 40px;\">Tabel:<\/p>\n<p style=\"padding-left: 80px;\">DB\u00a0 \u00a050H\u00a0 \u00a0 ;Pada alamat yang ditunjuk oleh label tabel diberi data 50H<\/p>\n<p style=\"padding-left: 40px;\">Tabel2:<\/p>\n<p style=\"padding-left: 80px;\">DB\u00a0 &#8216;Delta Electronic&#8217;\u00a0 \u00a0;Pada alamat yang ditunjuk oleh label tabel2 diberi data tulisan Delta Electronic dalam bentuk ASCII<\/p>\n<ul>\n<li><strong>DW (Define Word)<\/strong>, diikuti dengan label dan berfungsi untuk memberi nilai 2 byte yang diperoleh dari alamat tempat label ini berada pada alamat instruksi ini.<\/li>\n<\/ul>\n<p style=\"padding-left: 40px;\">Contoh:<\/p>\n<p style=\"padding-left: 80px;\">Org 2100H<\/p>\n<p style=\"padding-left: 40px;\">Lokasi1:<\/p>\n<p style=\"padding-left: 80px;\">Org 3000H<\/p>\n<p style=\"padding-left: 80px;\">DW Lokasi1 ;Alamat 3000H dan 3001H diisi dengan data 21H dan 00H<\/p>\n<ul>\n<li><strong>DS (Define String)<\/strong>, selalu diikuti dengan angka dan berfungsi untuk menyediakan tempat sebesar angka tersebut mulai dari alamat assembler directive ini berada. Tempat yang disediakan selalu terletak pada RAM Internal<\/li>\n<\/ul>\n<p style=\"padding-left: 80px;\">.DATA<\/p>\n<p style=\"padding-left: 40px;\">Contoh:<\/p>\n<p style=\"padding-left: 80px;\">Org 50H<\/p>\n<p style=\"padding-left: 40px;\">Memori1 Ds 1 1\u00a0 ;Disediakan tempat sebesar 1 byte mulai dari alamat 50H dari RAM Internal<\/p>\n<ul>\n<li><strong>.DATA<\/strong>, biasanya diletakkan sebelum deklarasi assembler directive DS yang menunjukkan bahwa baris-baris di bawahnya akan meng-akses ke RAM Internal<\/li>\n<li><strong>.CODE<\/strong>, menunjukkan bahwa baris-baris di bawahnya akan berupa kode-kode operasi yang akan diisikan ke dalam Memori Eksternal atau Flash PEROM<\/li>\n<\/ul>\n<p><strong>DELTA ELECTRONIC<\/strong><\/p>\n<p><strong>Paulus Andi Nalwan, ST<\/strong><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Apa itu Bahasa Assembly? Bahasa Assembly adalah merupakan bahasa dasar yang digunakan oleh mikrokontroler atau microprocessor sebelum Bahasa C dikenal. Bahasa ini mungkin memang lebih sulit dipahami dan kurang user friendly, namun bahasa ini lebih optimize sehingga dalam segi ukuran maupun kecepatan akan lebih kecil dan cepat daripada Bahasa C. Hal ini disebabkan karena instruksi-instruksi [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[290,333],"tags":[293,291,295,96,95,294,296,292],"class_list":["post-1250","post","type-post","status-publish","format-standard","hentry","category-bahasa-assembly","category-bahasa-assembly-mcs-51","tag-assembler","tag-assembly","tag-compiler","tag-microcontroller","tag-mikrokontroler","tag-program-sumber-assembly","tag-source-code","tag-sumber-assembly"],"_links":{"self":[{"href":"https:\/\/delta-electronic.com\/Design\/Hardwares\/wp-json\/wp\/v2\/posts\/1250"}],"collection":[{"href":"https:\/\/delta-electronic.com\/Design\/Hardwares\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/delta-electronic.com\/Design\/Hardwares\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/delta-electronic.com\/Design\/Hardwares\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/delta-electronic.com\/Design\/Hardwares\/wp-json\/wp\/v2\/comments?post=1250"}],"version-history":[{"count":5,"href":"https:\/\/delta-electronic.com\/Design\/Hardwares\/wp-json\/wp\/v2\/posts\/1250\/revisions"}],"predecessor-version":[{"id":1261,"href":"https:\/\/delta-electronic.com\/Design\/Hardwares\/wp-json\/wp\/v2\/posts\/1250\/revisions\/1261"}],"wp:attachment":[{"href":"https:\/\/delta-electronic.com\/Design\/Hardwares\/wp-json\/wp\/v2\/media?parent=1250"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/delta-electronic.com\/Design\/Hardwares\/wp-json\/wp\/v2\/categories?post=1250"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/delta-electronic.com\/Design\/Hardwares\/wp-json\/wp\/v2\/tags?post=1250"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}