[BAB 3] Program Sederhana

9
50 Bab 3 – Program Sederhana 3.1 PROGRAM TRANSFER DATA Kelompok intruksi transfer data merupakan instruksi-instruksi yang sering digunakan pada program dalam mikroprosesor INTEL 8085. Sehingga instruksi-instruksi transfer data lebih baik dipelajari terlebih dahulu dibandingkan dengan instruksi-instruksi lainnya. Instruksi transfer data adalah instruksi-instruksi untuk memindahkan data 8 bit dari satu register ke register lain, dari register ke memori atau sebaliknya. Program Transfer data juga dapat dilakukan antar blok memori. Instruksi-instruksi transfer data memiliki sifat tidak mempengaruhi register flag. 1) Buat program sederhana untuk mengisi register Register A B C D E H L SP PC Data 9D 4A 39 SF AD CC 4B 8384 9596 Contoh 3 Program Sederhana

description

Up

Transcript of [BAB 3] Program Sederhana

  • 50

    Bab 3 Program Sederhana

    3.1 PROGRAM TRANSFER DATA

    Kelompok intruksi transfer data merupakan instruksi-instruksi yang sering

    digunakan pada program dalam mikroprosesor INTEL 8085. Sehingga instruksi-instruksi

    transfer data lebih baik dipelajari terlebih dahulu dibandingkan dengan instruksi-instruksi

    lainnya.

    Instruksi transfer data adalah instruksi-instruksi untuk memindahkan data 8 bit dari

    satu register ke register lain, dari register ke memori atau sebaliknya. Program Transfer data

    juga dapat dilakukan antar blok memori. Instruksi-instruksi transfer data memiliki sifat

    tidak mempengaruhi register flag.

    1) Buat program sederhana untuk mengisi register

    Register A B C D E H L SP PC

    Data 9D 4A 39 SF AD CC 4B 8384 9596

    Contoh

    3 Program Sederhana

  • 51

    Bab 3 Program Sederhana

    Flowchart :

    START

    A 9D

    B 4A

    C 39

    D 5F

    E AD

    H CC

    L 4B

    SP 8384

    [D001:D000] HL

    HL 9596

    PC HL

    HL [D001:D000]

    STOP

    Setelah mengetikkan perintah-perintah diatas, hasilnya midicom akan mengalami

    hang. Hal ini disebabkan oleh PC yang diganti datanya. Oleh karena itu, untuk menyiasatinya

    kita ketikkan instruksi selanjutnya pada alamat yang ditujukan PC, dalam hal ini alamatnya

    9596. Maka setelah dieksekusi menggunakan perintah Go, dapat dilihat register-register

    telah terisi dengan data yang diinginkan. Dengan demikian dapat kita simpulkan bahwa

    program yang kita buat berhasil.

    2) Buat program sederhana untuk mengisi memory

    Memori 932A 9433 9434 AB52 AB78 C352 C493 C778 CB42 DD22 FFFF

    Data 44 22 9C AD DF 95 28 A2 F3 72 5C

    Analisa :

    Seperti yang sudah dipelajari sebelumnya, untuk mengisi

    register terdapat 2 cara, yaitu dengan mengisinya langsung

    melalui menu R (register), dan membuat programnya dengan

    menu A (assambler). Disini kita mengisikan register dengan

    program. Instruksi untuk mengisi register adalah MVI

    sedangkan untuk mengisi register pair adalah LXI.

    Untuk mengisi register PC tidak bisa langsung diisikan

    begitu saja, harus melalui perantara yaitu register HL. Untuk itu

    data harus diisikan ke register HL baru kemudian dipindahkan

    ke register PC. Namun di dalam register HL sudah terdapat

    data, oleh karena itu data tersebut diamankan terlebih dahulu ke

    suatu alamat memori. Gunakan instruksi SHLD untuk

    mengamankan ke memori dan LHLD untuk mengembalikannya

    ke register semula.

  • 52

    Bab 3 Program Sederhana

    Flowchart:

    START

    A 44

    [932A] A

    A 22

    [9433] A

    A 9C

    [9434] A

    A AD

    [AB52] A

    A DF

    [AB78] A

    A 95

    [C352] A

    A 28

    [C493] A

    A A2

    [C778] A

    A F3

    [CB42] A

    A 72

    [DD22] A

    A 5C

    [FFFF] A

    STOP

    Instruksi:

    Mnemonik

    MVI A,44 STA C352

    STA 932A MVI A,28

    MVI A,22 MVI A,A2

    STA 9433 STA C778

    MVI A,9C MVI A,F3

    STA 9434 STA CB42

    MVI A,AD MVI A,72

    STA AB52 STA DD22

    MVI A,DF MVI A,5C

    STA AB78 STA FFFF

    MVI A,96 RST 1

    Analisa :

    Tidak ada instruksi untuk langsung mengisikan data ke alamat memori. Semua data

    tersebut harus diisikan terlebih dahulu ke register A sebagai akumulator. Barulah data

    tersebut dapat dipindahkan ke alamat memori dengan menggunakan perintah STA.

    3) Buat program sederhana untuk mentransfer data dari register ke unit memori

    Register A B C D E H L

    Memori A200 A201 A202 A203 A204 A205 A206

  • 53

    Bab 3 Program Sederhana

    Flowchart :

    START

    SP FFFF

    STACK HL

    HL A200

    M A

    L L+1

    M B

    L L+1

    M C

    L L+1

    M D

    L L+1

    M E

    L L+1

    HL STACK

    [DDDD] A

    A H

    [A205] A

    A [DDDD]

    END

    4) Buat program untuk mentransfer data dari memori ke register

    Register A B C D E H L

    Data 49 F3 DB AC CB A2 99

    Analisa :

    Untuk mentransfer data dari memori ke register kita harus

    mengunakan register HL sebagai perantara untuk memudahkan

    pentransferan data pada alamat yang berurutan.

    Sebelumnya terlebih dahulu data yang ada pada HL diamankan

    ke stack. Kemudian HL diisi dengan alamat data tujuan. Data pada

    register bisa langsung dimasukkan ke alamat memori bersangkutan

    melalui M. M merupakan suatu lokasi di memori yang alamatnya

    ditunjukkan oleh HL. Setelah itu, L dinaikkan satu, dengan tujuan

    agar register HL menunjuk ke alamat selanjutnya yang akan diisi

    data.

  • 54

    Bab 3 Program Sederhana

    Flowchart :

    START

    HL D100

    A M

    L L+1

    B M

    L L+1

    C M

    L L+1

    D M

    L L+1

    E M

    [CC00] A

    A [D105]

    H A

    A [D106]

    L A

    A [CC00]

    END

    3.2 PROGRAM SELEKSI DATA

    Pada mikroprosesor intel 8085 kita bisa membuat sebuah program yang bisa

    digunakan untuk menseleksi beberapa data. Proses penyeleksian tersebut menggunakan

    instruksi percabangan. Cara menseleksi suatu data adalah dengan menguji atau memeriksa

    salah satu bit pada register flag yang sebelumnya terlebih dahulu harus diberikan instruksi

    yang akan mempengaruhi isi register flag, instruksi yang digunakkan diantaranya kelompok

    instruksi aritmatika dan logika. Contoh instruksi logika diantaranya, ANA M, ANA R, ANI,

    ORA M, ORA R, ORI, XRA M, XRA R, XRI. Penggunaan program seleksi data diantaranya

    adalah sebagai berikut :

    1. Menghitung jumlah data ganjil dan genap

    Untuk menentukan atau mendeteksi suatu data genap atau ganjil dapat dilakukan

    dengan menguji bit LSB data tersebut. Jika bit pada posisi LSB berlogik 0 ini

    menunjukan data genap dan sebaliknya jika data tersebut berlogik 1 ini menunjukan

    data ganjil.

    Analisa :

    Pada prinsipnya soal ini sama seperti pada soal sebelumnya,

    yang berbeda hanya tujuannya. Pada soal sebelumnya data dari

    register dimasukkan ke memori melalui M dengan perintah MVI

    M,A. Pada soal instruksi nya ditukar menjadi MVI A,M karena data

    dari memori yang dipindahkan ke register.

  • 55

    Bab 3 Program Sederhana

    2. Mendeteksi nilai data negatif atau positif

    Untuk menetukan atau mendeteksi suatu data negatif atau positif dapat dilakukan

    dengan menguji bit MSB data tersebut. Jika bit pada posisi MSB berlogik 0 ini

    menunjukan data positif dan sebaliknya jika data tersebut berlogik 1 ini menunjukan

    data negatif.

    3. Mendeteksi nilai data nol

    Data bernilai nol dapat dengan mudah dideteksi dengan memeriksa zero flagyang

    terdapat pada flag register. Sebelum instruksi untuk memeriksa keasaandari zero flag

    tersebut dilakukan, terlebih dahulu harus diberikan instruksiyang akan

    mempengaruhi flag register.

    1) Membuat program untuk mencari nilai data terkecil dari 16 data biner 8 bit yang ada

    pada alamat $A400-A40F. Simpan data di register D.

    Flowchart:

    Start

    HL A40FD ML L-1

    A MA D

    Cy = 0

    D A

    L L-1

    S = 0

    Stop

    Y

    T

    T

    Y

    Contoh

    Analisa :

    Pertama-tama, reg HL diisi dengan alamat akhir data yang

    akan dicari nilai terkecilnya. Data pada alamat tersebut kemudian

    ditempatkan pada reg D. Kemudian reg L dikurangi untuk

    menunjuk ke data selanjutnya. Data tersebut kemudian

    dibandingkan dengan data pada alamat sebelumnya yang

    ditempatkan di reg D.

    Apabila ada borrow Cy = 1, berarti data di reg A lebih kecil

    daripada data di reg D. Maka dari itu data di reg A harus

    dipindahkan ke reg D. Lewati proses ini jika ternyata tidak ada

    borrow.

    Kemudian reg L dikurangi lagi untuk mengecek data di

    alamat selanjutnya. Proses diatas terus berulang hingga alamat

    mencapai A400 dan langsung akan berhenti sebelum reg HL

    menunjuk ke alamat diatasnya (alamat negatif).

  • 56

    Bab 3 Program Sederhana

    2) Membuat program untuk menghitung banyaknya data bernilai 2A

  • 57

    Bab 3 Program Sederhana

    Flowchart:

    Start

    HL A40FD 00

    A MA A 01

    Z = 1

    D D+1

    S = 0

    Stop

    Y

    T

    T

    Y

    L L-1

    4) Membuat program untuk menghitung banyaknya data bernilai negatif data biner 8 bit

    yang ada pada alamat $B005-$B014. Simpan hasil perhitungan di register C.

    Analisa :

    Reg HL diisi dengan alamat akhir data, lalu reg D diisi

    dengan 00 sebagai inisialisasi karena akan digunakan untuk

    menghitung jumlah data.

    Data pada alamat yang ditunjuk HL di AND kan dengan

    01 dengan tujuan untuk mencari data ganjil. Data ganjil apabila

    di AND kan dengan 01 maka hasilnya bukan 0, berarti zero

    flagnya adalah 0. Sebalikanya data genap akan menghasilkan 0

    (z = 1) apabila di AND kan dengan 01.

    Ketika menemukan bilangan ganjil (z = 0) D ditambah 1.

    Namun apabila data adalah bilangan genap maka akan dilewat

    dan tidak akan dihitung oleh reg D.

    Kemudian reg L dikurangi lagi untuk mengecek data di

    alamat selanjutnya. Proses diatas terus berulang hingga alamat

    mencapai A400 dan langsung akan berhenti sebelum reg HL

    menunjuk ke alamat diatasnya (alamat negatif).

  • 58

    Bab 3 Program Sederhana

    Flowchart:

    Start

    C 00HL B005

    A MA 80

    Cy = 1

    C C+1

    L L+1A LA 15

    Z = 0

    Stop

    Y

    T

    T

    Y

    Analisa :

    Reg HL diisi dengan alamat awal data, lalu reg C diisi

    dengan 00 sebagai inisialisasi karena akan digunakan untuk

    menghitung jumlah data.

    Data pada alamat yang ditunjuk HL dibandingkan

    dengan 80 untuk mencari data negatif/positif. Apabila tidak

    ada borrow berarti data adalah negatif dan reg C akan

    ditambah 1. Jika ada borrow berarti data adalah positif dan

    tidak akan dihitung oleh reg C.

    Kemudian reg L ditambah untuk mengecek data di

    alamat selanjutnya. Alamat di reg L akan dibandingkan

    dengan 15 agar proses diatas terus berulang hingga alamat

    mencapai B014 dan langsung akan berhenti sebelum reg HL

    menunjuk ke alamat selanjutnya.