tugas mikroprosesor 1

Upload: widhy06

Post on 09-Apr-2018

223 views

Category:

Documents


1 download

TRANSCRIPT

  • 8/8/2019 TUGAS MIKROPROSESOR 1

    1/12

  • 8/8/2019 TUGAS MIKROPROSESOR 1

    2/12

    Bahasa Assembly

    Tidak seperti halnya bahasa mesin yang merupakan kumpulan kode operasi yang berupa

    kode numerik yaitu kode heksa, yang sangat sulit untuk diingat atau dimengerti. Penulisan

    program bahasa assembly disimpan sebagai teks seperti halnya bahasa pemrograman aras

    tinggi. Setiap instruksi assembly kenyataannya mewakili satu instruksi bahasa mesin.

    Sebagai contoh, instruksi penjumlahan yang telah diuraikan sebelumnya akan mewakili

    bahasa assembly berikut ini:

    add eax, ebx

    Instruksi ini akan lebih bisa dimengerti daripada kode mesin. Instruksi add adalahsebuah

    mnemonic untuk instruksi penjumlahan. Bentuk secara umum dari sebuah instruksi

    assembly adalah:

    mnemonic operand(s)

    Assembler adalah sebuah program yang membaca file teks dari instruksi assembly dan

    dikonversi menjadi kode mesin. Kompiler adalah program juga melakukan

    pengkonversian namun untuk bahasa tingkat tinggi. Assembler lebih sederhana daripada

    kompiler. Setiap perintah bahasa assembly secara langsung mewakili satu instruksi mesin.

    Perintah bahasa tingkat tinggi lebih komplek dan memerlukan banyak instruksi mesin.

    Perbedaan penting lainnya antara assembly dan bahasa tingkat tinggi adalah, bahwa setiap

    perbedaan jenis CPU akan memiliki instruksi mesin tersendiri juga akan memiliki bahasa

    assembly tersendiri pula. Porting (maksudnya: peng-adaptasi-an) program assembly ke

    berbagai jenis arsitektur komputer sangatlah sulit jika dibandingkan dengan bahasa

    pemrograman beraras tinggi (high level language). Dalam pembahasan selanjutnya

    digunakan Netwide Assembler atau disingkat NASM. NASM tersedia secara gratis di

    internet. Yang sering digunakan adalah Microsoft's Assembler (MASM) atau Borland's

    Assembler (TASM). Terdapat perbedaan sintak untuk MASM/TASM dan NASM.

  • 8/8/2019 TUGAS MIKROPROSESOR 1

    3/12

    Operand sebuah Instruksi

    Instruksi bahasa mesin memiliki sejumlah variasi dan jenis operand; akan tetapi, secara

    umum, setiap instruksi itu sendiri akan memiliki sejumlah operand yang telah ditetapkan

    (0 sampai 3).

    Jenis-jenis operand yang ada adalah sebagai berikut:

    Register

    Operand ini mengarah secara langsung ke isi dari register-register CPU.

    Memori

    Operand ini mengarah ke data dari isi memori. Alamat dari data dalam memori

    dapat berupa konstan yang dikodekan dalam instruksi atau dihitung melalui

    sebuah nilai dalam register-register. Alamat biasanya offset dari awal sebuah

    segmen.

    Seketika (Immidiate)

    Operand ini merupakan nilai yang tetap yang diperlihatkan dalam instruksi itu

    sendiri, disimpan dalam instruksi itu sendiri (dalam segmen kode), tidak dalam

    segmen data.

    Implikasi (Implied)

    Operand ini tidak ditunjukkan secara ekplisit. Sebagai contoh, instruksi menaikkan

    (increment) adalah menaikkan satu isi dari sebuah register atau memori. Ini salah

    satu dari implikasi (implied).

  • 8/8/2019 TUGAS MIKROPROSESOR 1

    4/12

    Instruksi Dasar

    Sebagian besar instruksi dasar adalah instruksi MOV. Instruksi ini memindahkan data

    dari salah satu lokasi ke lokasi lainnya, seperti operator assignment dalam bahasa

    pemrograman beraras tinggi.

    Terdiri dari dua operand:

    mov dest, src

    Data yang dispesifikasikan oleh src disalin ke dest. Satu pembatasan adalah bahwa

    keduanya tidak diperbolehkan operand memori, artinya tidak dapat memindahkan data

    dari memori ke memori.

    Hal ini ini ke luar ciri-ciri dari assembly. Sedikit banyak terdapat aturan yang harus diikuti

    tentang bagaimana cara variasi instruksi digunakan. Operand harus memiliki ukuran yang

    sama. Nilai register AX tidak dapat disimpan dalam register BL. Ukuran dari register

    AX adalah pasangan register sebesar 32bit, sedangkan BL ukurannya 16bit untuk

    mikroprosesor 80486.

    Sebagai contoh:

    mov eax, 3 ; store 3 into EAX register (3 is

    immediate operand)

    mov bx, ax ; store the value of AX into the BX

    register

    Tanda semikolon ';' merupakan tanda awal untuk penulisan komentar.

    Instruksi ADD digunakan untuk operasi penjumlahan integer:

    add eax, 4 ; eax = eax + 4

  • 8/8/2019 TUGAS MIKROPROSESOR 1

    5/12

    add al, ah ; al = al + ah

    Instruksi SUB merupakan instruksi pembagian secara integer:

    sub bx, 10 ; bx = bx - 10

    sub ebx, edi ; ebx = ebx - edi

    Instruksi INC dan DEC adalah instruksi penaikan (increment) atau penurunan (decrement)

    dengan nilai satu. Ini adalah salah satu dari operan secara implisit, kode mesin untuk INC

    dan DEC adalah kecil ukurannya dibanding dengan instruksi ADD dan SUB.

    inc ecx ; ecx++

    dec dl ; dl--

    Pengarahan (Directive)

    Directive merupakan sebuah artifak assembler bukan CPU. Secara umum digunakan

    untuk menginstruksikan assembler untuk melakukan sesuatu atau menginformasikan

    tentang sesuatu ke assembler. Directive tidak diubah kedalam kode mesin.

    Penggunaan umum dari directive adalah:

    1. Mendefinisikan konstanta

    2. Mendefinisikan memori untuk penyimpanan data

    3. Kelompok memori kedalam segmen

    4. Melampirkan kode sumber (source code) secara kondisional (conditionally

    include)

    5. Melampirkan file lainnya

  • 8/8/2019 TUGAS MIKROPROSESOR 1

    6/12

    Pelolosan kode NASM melalui sebuah perintah (command) preprosesor (preprocessor)

    seperti C. Begitu pula, pengarahan preprosesor (directive preprocessor) dimulai dengan %dibandingkan # dalam C.

    Pengarahan EQU

    Pengarahan EQU dapat digunakan untuk mendefinisikan sebuah simbol. Simbol adalah

    nama dari konstanta yang dapat digunakan dalam program assembly.

    Formatnya adalah:

    simbol equ nilai

    Nilai dari simbol tidak dapat didefinisikan secara berulang (didefinisikan kembali).

    Pengarahan %define

    Pengarahan ini adalah sama dengan pengarahan #define dalam C. Ini secara umum

    digunakan untuk mendefinisikan mkro konstan seperti dalam C.

    %define SIZE 100

    mov eax, SIZE

    Kode di atas mendefinisikan sebuah makro dengan nama SIZE sebagai konstanta 100 dan

    ditunjukkan penggunaannya dalam instruksi. Makro sangat fleksibel daripada simbol

    dalam dua cara. Makro dapat didefinisikan kembali dan bisa lebih dari sekedar bilangan

    konstan.

  • 8/8/2019 TUGAS MIKROPROSESOR 1

    7/12

    Pengarahan Data

    Pengarahan data digunakan dalam segmen data untuk mendefinisikan ruang memori.

    Terdapat dua cara menyiapkan ruang memori. Cara pertama, hanya mendefinisikan ruang

    untuk data; cara kedua mendefinisikan ruang dan nilai awal. Metode pertama

    menggunakan satu dari pengarahan RESX. X diganti dengan huruf sebagai ukuran dari

    obyek (atau beberapa obyek) yang akan disimpan. Berikut ini ditunjukkan beberapa

    kemungkinan nilai itu.

    UNIT HURUF

    byte B

    word W

    double word D

    quad word Q

    ten bytes T

    Metode kedua (mendefinisikan sebuah nilai awal) menggunakan satu dari pengarahan

    DX. Huruf X adalah sama dengan pengarahan RESX. Hal ini sangat umum untuk

    menandai lokasi memori dengan label. Label merupakan salah satu cara mudah untuk

    mengarahkan lokasi memori dalam kode.

    Berikut ini terdapat beberapa contoh:

  • 8/8/2019 TUGAS MIKROPROSESOR 1

    8/12

    LABEL

    INSTRUKSI

    KOMENTAR

    L1 db 0 ; byte dengan label L1 diinisialisasi dengan nilai 0

    L2 dw 1000; word dengan label L2 ddiinisialisasi dengan nilai

    1000

    L3 db 110101b; byte diinisialisasi dengan biner 110101 (53 dalam

    desimal)

    L4 db 12h ; byte diinisialisasi dengan heksa 12 (18 dalam desimal)

    L5 db 17o ; byte diinisialisasi dengan oktal 17 (15 dalam desimal)

    L6 dd 1A92h ; double word ddiinisialisasi dengan heksa 1A92

    L7 resb 1 ; menyiapkan ruang 1 byte tidak diinisialisasi

    L8 db "A" ; byte diinisialisasi oleh kode ASCII untuk A (65)

    Tanda "..." dan '...' adalah sama perlakuannya. Konsekwensinya data yang didefinisikan

    disimpan secara berurutan dalam memori. Dengan demikian L2 disimpan secara seketika

    sesuada L1 dalam memori. urutan dari memori dapat didefinisikan juga.

    LABELINSTRUKSI KOMENTAR

    L9 db 0, 1, 2, 3; mendefinisikan ruang 4 byte dinisialisasi dengan nilai

    0, 1, 2, 3

    L10db "w", "o", "r",

    d, 0

    ; mendefinisikan urut-urutan karakter dalam memori

    yaitu ASCII w, o, r, d dan diakhiri dengan konstanta 0

    L11 db word, 0; mendefinisikan urut-urutan karakter dalam memori

    yaitu ASCII word dan diakhir dengan konstanta 0

    Untuk urutan yang sangat besar, pengarahan TIMES dalam NASM seringkali digunakan.

  • 8/8/2019 TUGAS MIKROPROSESOR 1

    9/12

    Pengarahan ini mengulang sejumlah operand spesifik, sebagai contoh:

    LABEL INSTRUKSI KOMENTAR

    L12 times 100 db 0 ; sama dengan db 0 sebanyak 100 kali

    L13 resw 100; menyediakan ruang memori untuk 100

    word

    Ingat bahwa label dapat digunakan untuk mengarahkan ke data dalam kode. Terdapat dua

    cara bahwa sebuah label dapat digunakan. Jika label akan digunakan, label akandiinterprestasikan sebagai alamat (atau offset) dari data. Jika label diletakkan dalam

    kurung kotak ([...]), akan diinterprestasikan sebagai data pada alamat yang ditunjukkan

    oleh label. Dalam bentuk yang lain, salah satu yang harus diingat bahwa sebuah label

    adalah sebagai pointer data pada alamat tertentu dan kurung kotak direferensikan sebagai

    pointer seperti halnya araterisk (*) dalam C. (MASM/TASM memiliki perbedaan

    konvensi). Dalam mode 32bit, pengalamatannya adalah 32bit.

    Berikut ini terdapat beberapa contoh:

    NO INSTRUKSIKOMENTAR

    1 mov al, [L1]; salin byte memori dengan alamat yang ditunjukkan oleh L1

    ke register AL

    2 mov eax, L1 ; register EAX = alamat byte ditunjukkan oleh L1

    3 mov [L1], ah ; salin AH ke byte memori dengan alamat oleh L1

    4 mov eax, [L6]; salin double word memori dengan alamat oleh L6 ke

    register EAX

    5 add eax, [L6] ; EAX = EAX + double word memori dengan alamat oleh L6

    6 add [L6], eax ; double word memori dengan alamat oleh L6 += EAX

    7 mov al, [L6] ; salin byte pertama dari double word memori dengan alamat

  • 8/8/2019 TUGAS MIKROPROSESOR 1

    10/12

    oleh L6 ke AL

    Label yang digunakan dalam contoh di atas merupakan label yang diberikan dalam contoh

    sebelumnya. Baris 7 dari contoh di atas menunjukkan sebuah properti yang penting untuk

    NASM. Assembler tidak dapat menangkap dari jenis data yang ditunjukkan oleh label

    tersebut. Ini tergantung pada programmer untuk membuat suatu kepastian bahwa

    penggunaan sebuah label harus benar. Selanjutnya hal ini secara umum untuk menyimpan

    alamat dari sebuah data dalam register dan menggunakan register seperti halnya pointer

    dalam variabel C. Lagi, tidak ada pengecekan yang dilakukan bahwa sebuah pointer

    digunakan secara benar. Cara ini, assembly akan lebih banyak menghasilkan error

    daripada C.

    Instruksi berikutnya adalah:

    mov [L6], 1 ; simpan (store) 1 byte ke memori yang ditunjukkan oleh

    label L6

    Pernyataan tersebut menghasilkan sebuah operasi dengan ukuran yang tidak salah (error),

    mengapa ?. Sebab assembler tidak mengetahui apa yang akan disimpan (store) sebagai 1

    byte, word atau double word. Untuk memperbaiki ini, tambahkan sebuah spesifikasi

    ukuran:

    mov dword [L6], 1 ; simpan (store) 1 byte ke memori yang

    ditunjukkan oleh label L6

    Hal ini akan mengatakan ke assembler untuk menyimpan 1 byte ke double word yang

    dimulai dengan alamat yang ditunjukkan oleh label L6. Spesifikasi ukuran lainnya

    adalah: BYTE, WORD, QWORD and TWORD.

    Input and Output

    Input dan output merupakan aktifitas yang sangat bergantung dengan sistem. Hal ini

  • 8/8/2019 TUGAS MIKROPROSESOR 1

    11/12

    merupakan antarmuka denga perangkat keras sistem. Bahasa tingkat tinggi, seperti C,

    dilengkapi dengan pustaka (library) standar berupa rutin-rutin program yang dapat

    diperoleh secara sederhana, programming membentuk antarmuka I/O. Bahasa assembly

    tidak memiliki library standar. C harus secara langsung mengakses perangkat keras

    (melalui operasi pengijinan dalam mode protect) atau menggunakan rutin beraras rendah

    yang diperoleh dalam sistem operasi.

    Sangat umum rutin assembly di-antarmuka-kan dengan C. Salah satu keuntungannya

    bahwa kode assembly dapat digunakan sebagai library standar C untuk rutin I/O.

    Selanjutnya, salah satu yang harus diketahui adalah aturan untuk meloloskan informasi

    rutin dengan informasi yang digunakan C. Aturan ini sangat komplek untuk dijelaskan

    disini (akan dijelaskan pada pembahasan berikutnya). Untuk menyederhanakan I/O,

    digunakan rutin yang siap dipakai untuk menyembunyikan aturan-aturan C yang komplek

    dan akan diperoleh cara antarmuka yang sangat sederhana.

    Berikut ini diuraikan fungsi setiap rutin yang dapat anda peroleh disini.

    NAMA RUTIN FUNGSI RUTIN

    print_int tampilkan ke layat nilai integer yang disimpan dalam register EAX

    print_chartampilkan ke layar karekter dalam bentuk nilai ASCII yang disimpan

    dalam register AL

    print_string

    tampilkan ke layar berupa string dengan alamat yang disimpan dalam

    register EAX. String harus berupa Ctype string (diakhiri dengan

    null).

    print_nl tampilkan ke layar karakter baris baru (new line)

    read_int

    baca sebuah nilai integer dari keyboard dan disimpan kedalam

    register EAX

    read_charbaca karakter tunggal dari keyboard dan disimpan dalam bentuk kode

    ASCII kedalam register EAX.

    Seluruh rutin menyediakan nilai dari seluruh register, kecuali rutin read. Rutin ini

    http://fpga.songolimo.net/kuliah-1/bahasa-assembly/pengantar-bahasa-assembly/resolveUid/66c0731a4e99b2c2a13dc6763456a2e1http://fpga.songolimo.net/kuliah-1/bahasa-assembly/pengantar-bahasa-assembly/resolveUid/66c0731a4e99b2c2a13dc6763456a2e1
  • 8/8/2019 TUGAS MIKROPROSESOR 1

    12/12

    memodifikasi nilai yang ada dalam register EAX. Untuk menggunakan rutin ini, harus

    menyertakan file rutin dalam program dengan pengarahan preprosesor %include yang

    akan menginformasikan ke assemble mengenai penggunaan file rutin tersebut.

    Berikut ini harus ditambahkan ke program assembly anda sebelum menggunakan rutin:

    %include "asm_io.inc"

    Untuk menggunakan salah satu rutin print, terlebih dahulu muati register EAX dengan

    nilai yang benar dan gunakan instruksi CALL untuk mengakses rutin. Instruksi CALL

    adalah sama dengan sebuah pemanggilan fungsi dalam bahasa pemrograman beraras

    tinggi. Selanjutnya akan melompat mengeksekusi ke bagian kode yang lainnya, tetapi

    akan kembali ke asalnya sesudah rutin selesai dieksekusi.

    http://fpga.songolimo.net/kuliah-1/bahasa-assembly/pengantar-bahasa-

    assembly