assembly i

Click here to load reader

Post on 19-Dec-2015

229 views

Category:

Documents

3 download

Embed Size (px)

DESCRIPTION

asembly robrotika

TRANSCRIPT

  • PEMROGRAMAN BAHASA ASSEMBLY

    1. Pengenalan

    Bahasa assembly adalah bahasa pemrograman dengan korespondensi satu-satu antara

    perintah-perintah/pernyataannya dan bahasa mesin komputer. Bahasa assembly tidak

    satu jenis sebagaimana CPU komputer pun bermacam-macam. Setiap bahasa assembly

    secara langsung dipengaruhi oleh set instruksi mesin komputer dan arsitektur perangkat

    keras. Secara singkat, bahasa assembly IBM-PC mengacu pada istruksi-instruksi yang

    dikenali oleh keluargaa mikroprosesor Intel 8086-80486.

    Bahasa asssembly tidak langsung dapat dimengerti oleh komputer, untuk itu bahasa

    assembly perlu diterjemahkan ke dalam bahasa mesin. Untuk menterjemahkan bahasa

    assembly digunakanlah bahasa assembler karena pada dasarnya setiap komputer

    memiliki bahasa assembly yang berbeda beda hal ini dipengaruhi oleh rancangan

    komputer mempengaruhi instruksi yang dapat dieksekusi.

    Berbagai alasan mengapa kita mempelajari bahasa assembly. Salah satu alasan adalah

    untuk mempelajari arsitektur komputer dan sistem operasi. Alasan lain adalah karena

    kegunaan pemrograman tertentu sulit atau tidak mungkin dikerjakan oleh bahasa tingkat

    tinggi. Contoh, kompunikasi langsung dengan sistem operasi komputer mungkin

    deperlukan. Program grafik warna kecepatan tinggi mungkin harus ditulis menggunakan

    memori minimum. Program khusus mungkin diperlukan sebagai penghubung antara

    printer dengan komputer. Sering juga perlu untuk menghilangkan keterbatasan bahasa

    tingkat tinggi, diluar keperluan, menentukan aturan-aturan tentang apa yang dibolehkan

    dalam program. Contoh, pascal tidak mengijinkan nilai karakter diberi nilai dalam variabel

    integerr. Pemrogram yang berpengalaman akan menemukan cara untuk keluar dari

    batasan ini, tapi dalam pelaksanaannya, membuat kode tidak dapat digunakan oleh

    sistem komputer lain dan sulit dibaca. Bahasa assembly, sebaliknya, memiliki sangat

    sedikit batasan atau aturan. Harga yang harus dibayar untuk keleluasaan itu adalah perlu

    menangani berbagai kerumitan dalam pemrograman.

    Dalam bahasa Assembly mempunyai 3 tipe intruksi dasar yaitu : mnemonic, operand1

    dan operand2 serta komentar. Mnemonic atau opcode ialah kode yang akan melakukan

    aksi terhadap operand . Operand ialah data yang diproses oleh opcode. Sebuah opcode

  • bisa membutuhkan 1 ,2 atau lebih operand, kadang juga tidak perlu operand. Sedangkan

    komentar dapat kita berikan dengan menggunakan tanda titik koma (;).

    Pada pemrograman assembly penggunaan interupsi akan sangat sering dijumpai untuk

    membantu mengerjakan suatu pekerjaan. Perintah interupsi ditulis dengan INT dengan

    sintak INT No_interupsi.

    Contoh program dalam bahasa assembly

    ORG 100H

    MOV AX, 0090H

    MOV DS, AX

    MOV SI,0120H

    MOV DI, 0130H

    MOV AX, SI

    MOV DI, AX

    Int 20h

    Adapun bentuk ideal dari penulisan kode program pada assembly dapat dilihat di bawha

    ini.

    .MODEL SMALL

    .CODE

    ORG 100H

    Label1 : JMP Label2

    Kode Program

    Label2 :

    Kode Program

    INT 20H

    END Label1

  • .MODEL SMALL

    Tanda directive ini digunakan untuk memberitahukan kepada assembler bentuk memory

    yang digunakan oleh program kita. Supaya lebih jelas model-model yang bisa digunakan

    adalah :

    TINY

    Jika program anda hanya menggunakan 1 segment seperti program COM. Model ini

    disediakan khusus untuk program COM.

    SMALL

    Jika data dan code yang digunakan oleh program kurang dari ukuran 1 segment atau

    64 KB.

    MEDIUM

    Jika data yang digunakan oleh program kurang dari 64 KB tetapi code yang digunakan

    bisa lebih dari 64 KB.

    COMPACT

    Jika data yang digunakan bisa lebih besar dari 64 KB tetapi codenya kurang dari 64

    KB.

    LARGE

    Jika data dan code yang dipakai oleh program bisa lebih dari 64 KB.

    HUGE

    Jika data, code maupun array yang digunakan bisa lebih dari 64 KB.

    .CODE

    Tanda directive ini digunakan untuk memberitahukan kepada assembler bahwa kita akan

    mulai menggunakan Code Segment-nya disini. Code segment ini digunakan untuk

    menyimpan program yang nantinya akan dijalankan.

    ORG 100h

    Pada program COM perintah ini akan selalu digunakan. Perintah ini digunakan untuk

    memberitahukan assembler supaya program pada saat dijalankan(diload ke memory)

    ditaruh mulai pada offset ke 100h(256) byte. Dapat dikatakan juga bahwa kita

    menyediakan 100h byte kosong pada saat program dijalankan. 100h byte kosong ini

    nantinya akan ditempati oleh PSP(Program Segment Prefix) dari program tersebut. PSP

    ini digunakan oleh DOS untuk mengontrol jalannya program tersebut.

  • JMP

    Perintah JMP(JUMP) ini digunakan untuk melompat menuju tempat yang ditunjukkan

    oleh perintah JUMP. Adapun syntaxnya adalah JUMP Tujuan .

    Dimana tujuannya dapat berupa label seperti yang digunakan pada bagan diatas.

    Mengenai perintah JUMP ini akan kita bahas lebih lanjut nantinya. Perintah JUMP yang

    digunakan pada bagan diatas dimaksudkan agar melewati tempat data program, karena

    jika tidak ada perintah JUMP ini maka data program akan ikut dieksekusi sehingga

    kemungkinan besar akan menyebabkan program anda menjadi Hang.

    2. Konstanta dan Variabel

    Konstanta

    Untuk membuat suatu konstanta dapat menggunakan perintah EQU untuk

    mendefinisikannya. Data yang sudah didefinisikan dengan menggunakan perintah

    EQU tidak dapat dirubah.

    Contoh:

    .

    MODEL SMALL

    .CODE

    ORG 100H

    TData :

    Na EQU 089H

    MainPro :

    MOV AX, Na

    ret

    Variabel

    Di dalam assembler kita bisa menyimpan data dengan berbagai tipe data yang

    berbeda-beda. Kita dapat memberikan nama pada data tersebut, untuk

    memudahkan dalam pengaksesan data tersebut.

  • Nama Tipe Data Ukuran

    DB (Define Byte) 1Byte

    DW (Define Word) 2Byte

    DD (Define DoubleWord) 4Byte

    DF (Define FarWord) 6Byte

    DQ (Define QuardWord) 8Byte

    DT (Define TenByte) 10Byte

    Secara umum sintak untuk mendefinisikan suatu variabel adalah:

    Nama_variabel (spasi) TipeData (spasi) data

    Contoh:

    .MODEL SMALL

    .CODE

    ORG 100H

    TData :

    Na DW 12H

    Ne DW ?

    MainPro :

    MOV AX, Na

    Mov Ne, AX

    Mov BX, Ne

    ret

    Pada contoh di atas, nilai dari DW=16 bit, jadi Na nilainya sama dengan 16 bit. Apabila

    nilai dari Na anda coba pindahkan ke register yang memiliki nilai tampung 8 bit

    seperti Al atau AH maka akan muncul pesan error. Hal ini dikarenakan daya tampung

    antara Na dan register yang dituju tidak sama.

    Masalah ini dapat di atasi dengan penggunaan pointer. Untuk materi pointer, Anda

    dapat membacanya pada file yang telah diberikan.

  • 3. Operasi Aritmatika

    A. ADD

    Pada bahasa assembly perinth untuk melakukan operasi penambahan dapat

    menggunakan perintah ADD atau ADC. Adapun sintak dari perintah ADD ini yaitu.

    ADD, Tujuan, Asal

    Antara tujuan dan asal haruslah memiliki daya tampung yang sama. Misalkan tujuan

    dari operasi ADD ini adalah register AX yang memiliki daya tampung 16 bit, maka asal

    dari operasi ADD ini haruslah memiliki daya ampung yang sama yaitu 16 bit seperti

    BX, CX atau yang lainnya. Pada operasi ADD ini proses yang terjadi yaitu

    Tujuan=Tujuan + Asal.

    Contoh program

    .MODEL SMALL

    .CODE

    ORG 100H

    TData :

    Na DW 12H

    Ne DW 12

    Hsl DW ?

    MainPro :

    MOV AX, Na

    ADD AX, Ne

    Mov Hsl, AX

    ret

    B. ADC

    ADC ini memiliki kesamaan fungsi dengan ADD, perbedaan dari perintah ini lokasi

    Tujuan bukan menjadi penampung satu satunya namun Tujuan = Tujuan + Asal +

    Carry. Misalkan saja kita akan menambahkan dua buah bilangan 23139876h +

    8DCAF887h. Pada operasi penjumlahan ini kita tidak bisa menggunakan register 16

    bit karena daya tampung register 16 hanya sampai FFFFh.

  • Untuk menyelesaikan permasalahan di atas, perhatikanlah contoh program di

    bawah.

    org 100h

    MOV AX, 2313H

    MOV BX, 8DCAH

    MOV CX, 9876H

    MOV DX, 0F887H

    ADD CX, DX

    ADC AX, BX

    int 20h

    Penggunaan operasi ADC ini akan mempengaruhi beberapa flag yaitu CF,PF,AF,ZF,SF

    dan OF.

    C. INC

    Perintah INC(Increment) digunakan khusus untuk pertambahan dengan 1. Perintah

    INC hanya menggunakan 1 byte memory, sedangkan perintah ADD dan ADC

    menggunakan 3 byte. Oleh sebab itu bila anda ingin melakukan operasi pertambahan

    dengan 1 gunakanlah perintah INC. Syntax pemakainya adalah INC Tujuan.

    D. SUB

    Untuk melakukan pengurangan terhadap suatu nilai pada bahasa assembly

    menggunakan perintah SUB. Sintak dari perintah ini adalah SUB Tujuan, Asal.

    Perintah SUB akan mengurangkan nilai pada Tujuan dengan Asal. Hasil yang didapat

    akan ditaruh pada Tujuan, dalam bahasa pascal sama dengan instruksi

    Tujuan:=Tujuan-Asal.

    .MODEL SMALL

    .CODE

    ORG 100H

    TData :

  • Na DW 12H

    Ne DW 12

    Hsl DW ?

    MainPro :

    MOV AX, Na

    SUB AX, Ne

    Mov Hsl, AX

    int 20h

    E. SBB

    Perintah SBB ini memiliki kemiripan fungsi yaitu