Disusun oleh :
Febrianti Mahdar (191331043)
Instruktur :
Ferry Satria, BSEE., M. T.
Rahmawati Hasanah, S.ST., M.Sc.
I. Tujuan Praktikum
1. Mengirimkan data antara mikroprosesor itu sendiri dan dengan sistem I/O atau
memori.
2. Melakukan operasi aritmatika dan logika sederhana.
Register Segment
Register DS ( Data Segment ), bagian memori 64K-byte yang berisi data yang
menjadi referensi untuk hampir semua instruksi dan sebagian besar mode addressing.
Register DS ini digunakan untuk menyimpan alamat segment dari letak data. Data
hampir selalu bergerak masuk atau keluar dari memori melalui segment data.
Directtives Assembler
Sebuah directive adalah command yang disisipkan pada kode sumber (source
code). Directives dapat menentukan: Variabel, Macro, Prosedur, Segmen Memori.
Directives bersifat tidak sensitif. Tulisan “.data”, “.DATA”, dan “.Data” dianggap
sama. Beberapa penjelasan lainnya: .MODEL SMALL : memilih ukuran model
memori. Pilihan model memori lainnya; Tiny (kombinasi kode dan data kurang dari
64K), Small (Kode ≤ 64K dan data ≤ 64K), Medium (Kode ≤ 64K dan berapapun
ukuran multiple kode segmen), Compact (Data ≤ 64K dan berapapun ukuran multiple
data segmen), Large (Kode > 64K dan Data > 64K multiple kode dan data segmen),
dan Huge. .STACK ; ukuran dari stack segment .DATA ; memulai data segment.
.CODE ; memulai kode segment
Beberapa instruksi yang menunjang program dengan loop:
• INC (Increment) = untuk menambah waktu 1 suatu data, bisa datanya di register
maupun di memory.
MOV AL 4
INC AL ; AL = 5
RET ; perintah mengakhiri
CF(Carry Flag) tidak berubah
• DEC (Decrement) = untuk mengurangi dengan 1 data
MOV AL 255
DEC AL ; AL = 254
RET
CF(Carry Flag) ; perintah mengakhiri
• Compare = mengurangi tapi hasil tidak disimpan dimana mana
MOV AL,5
MOV BL,5
COMPARE AL,BL ; AL:BL =AL-BL = 5 – 5 = 0 = zero flag 1
• SUB (Subtract) = mengurangi lalu hasil pengurangnnya disimpan
MOV AL, 5
SUB AL, 1 ; AL = 4
• JA (Jump if Above) = untuk berkaitan dengan bilangan tidak bertanda. Syaratnya
apabila operand 1 lebih besar daripada operand dua, maka akan lompat ke loop 1.
(Above and Below) = JA, JB
BIL (Signed, Unsigned)
AL = 9A
BL = 52H AL- BL = 48
CMP AL,BL
JA LUP1 AL > BL, maka lompat
• JG (Jump if Greater) = utnuk berkaitan dengan bilangan bertanda yaitu bilangan
komplemen 2. Syaratnya apabila operand 1 lebih kecil daripada operand 2 maka
tidak akan lompat ke loop 1. (Greater and Less) = JG, JL
BIL (Signed, Unsigned)
AL = 9A = negatif
AL- BL = 48
BL = 52H = positif
CMP AL,BL
JG LUP1 AL < BL, tidak lompat
• JAE (Jump if Above or Equal) = bisa apakah lebih besar atau sama dengan
• JCXZ = tergantung register CX, apabila CX 0 maka akan lompat
• JE (Jump If Equal) = akan menguji operand 1 dan operand 2, apabila sama maka
akan lompat
• JPO (Jump if Parity Odd) = berkaitan denganlogic 1 apakah ganjil atau genap
• JS (Jump if Sign) = Jump jika sign logicnya bernilai 1
• JZ (Jum if Zero Flag) = apabila Zero Flag bernilai 1 maka akan lompat
1. Software Emu8086
START
AL
SI
CLS
AL [BM+SI]
AL AL+[BM2]+CARRY
DAA
BM3+SI AL
OF = 1
Y
N
BM4+SI 11H
SI SI+1
SI : 10
ZF = 0
Y
N
END
Code Program:
Hasil Program:
2. Buat diagram alir dan program untuk Menjumlahkan 10 PASANG data Desimal 4
digit yang berada pada BM1 dan BM2. Simpan hasil penjumlahan pada BM3. Beri
tanda ketika terjadi “Over Flow”.
.DATA
BM1 DW 1693H, 7887H, 6381H, 94H, 32H, 4423H, 1987H, 4700H, 4902H,
DW 3437H, 4996H, 63H, 8109H, 9443H, 2762H, 4023H, 6723H,
BM3 DW 10 DUP(0)
Diagram Alir:
START
AL
SI
CLC
AL B.[BM+SI]
AL AL+B.[BM2+SI]+CARYY
DAA
B.[BM3+SI] AL
OF1 = 1
Y
N
BM4+SI 11H
SI SI+1
AL B.[BM+SI]
AL AL+B.[BM2+SI]+CARRY
DAA
B.[BM3+SI] AL
Y
OF = 1
N
BM4+SI 11H
SI SI+1
SI : 20
CLC
Y
ZF = 0
N
END
Code Program:
Hasil Program:
3. Buat diagram alir dan program untuk Menjumlahkan data desimal 8 digit yang
berada pada BM1 dan BM2. Simpan hasil penjumlahan pada BM3. Beri tanda ketika
terjadi “Over Flow”.
BM1 78903456H, 89674321H, 87654321H, 0H, 22117755H
BM2 12345678H, 98766550H, 55667723H, 12345678H, 62117755H
BM3 0, 0, 0, 0, 0
Diagram Alir:
START
AL
SI
CLC
AL [BM+SI]
AL AL+[BM2+SI]+CARRY
DAA
BM3+SI AL
OF = 1
Y
N
BM4+SI 11H
SI SI+1
SI : 20
Y
ZF = 0
END
Code Program:
Hasil Program:
4. Buat diagram alir dan program untuk Menjumlahkan 4 pasang data desimal 9 digit.
Data input dan output nya tentukan sendiri.
Diagram Alir:
START
AL
SI
CLC
AL [BM+SI]
AL AL+[BM2+SI]+CARRY
DAA
BM3+SI AL
OF = 1
BM4+SI 11H
SI SI+1
SI : 20
Y
ZF = 0
END
Code Program:
Hasil Program:
VI. Analisis Data
Pada praktikum kali ini mahasiswa melakukan percobaan dengan membuat program
pada software EMU8086. Dilakukan 4 kali percobaan yang masing - masing dari
percobaannya adalah menjumlahkan BCD.
Terdapat perintah INC (Increment) yang berfungsi untuk menambahkan 1 suatu data
dengan Carry Flagnya adalah 0, bisa datanya di register maupun di memory.
Penggunaan INC ini dapat dilihat dari setiap soal untuk menambahkan nilai SI, hal ini
membuat program lebih sederhana karena pengguna tidak perlu menuliskan lagi SI+1,
SI+n… sampai dengan yang diinginkan, pada akhirnya perintah ini dapat mensupport
terjadinya loop. Digunakan perintah CMP(Compare) untuk mengurangi untuk
membandingkan operand1 dengan operand 2, tapi dari pengurangan ini tidak
menghasilkan hasil yang dapat disimpan di operand1 maupun operand 2. Lalu perintah
untuk mensupport loop adalah jump, pada praktikum kali ini digunakan JO (Jum if
Overflow) yang akan memeriksa suatu kondisi, apabila OF bernilai 1 maka akan terjadi
jump. Selain menggunakan JO, digunakan pula JNE (Jum if first operand is Not Equal
to second operand) yang akan memeriksa suatu kondisi, apabial ZF bernilai 0 maka akan
terjadi jump.
Pada soal nomor 1 terdapat 10 pasang data desimal yang masing - masing berjumlah
dua digit. Penjumlahan yang dilakukan adalah menjumlahkan 10 pasang data tersebut
yang masing - masing berada pada BM1 dan BM2, hasil dari penjumlahan tersebut
nantinya akan disimpan pada BM3, apabila hasilnya overflow maka nanti hasilnya akan
diberikan tanda. Proses penjumlahan menggunakan register AL, karena data yang
diproses merupakan data 8 bit. Dalam soal ini juga ditambahkan korelasi DAA.
Selanjutnya, data pada AL disimpan ke BM3+SI. Terdapat perintah JO, apabila OF
bernilai 1 maka SI+1. Selanjutnya ZF=0 apabila hasil operasi tidak bernilai 0 maka akan
terjadi perulangan loop.
Pada soal nomor 2 hampir sama dengan soal nomor 1 yakni terdapat 10 pasang data
desimal. Yang membedakannya adalah pada soal nomor 2, datanya masing - masing
berjumlah empat digit. Penjumlahan yang dilakukan adalah menjumlahkan 10 pasang
data tersebut yang masing - masing berada pada BM1 dan BM2, hasil dari penjumlahan
tersebut nantinya akan disimpan pada BM3, apabila hasilnya overflow maka nanti
hasilnya akan diberikan tanda. Proses penjumlahan menggunakan register AL, karena
data yang diproses merupakan data 8 bit. Dalam soal ini juga ditambahkan korelasi
DAA. Selanjutnya, data pada AL disimpan ke BM3+SI. Terdapat perintah JO, apabila
OF bernilai 1 maka SI+1. Selanjutnya ZF=0 apabila hasil operasi tidak bernilai 0 maka
akan terjadi perulangan loop.
Pada soal nomor 3 terdapat 5 pasang 8 digit data desimal, dikarenakan program
menggunakan Define Byte maka data 8 digit tersebut dipecah menjadi 2 digit. Masing
masing data berada pada BM1 dan BM2, kemudian hasil penjumalah disimpan pada
BM3. Sama halnya seperti soal sebelumnya terdapat perintah jump if not overflow, jika
OF=1 maka SI+1. Apabila overflow maka 00 disimpan pada BM4.
Pada soal nomor 4 terdapat 4 pasang data 9 digit yang ditentukan sendiri oleh
praktikan. Karena datanya sebanyak 9 digit maka dipecah menjadi 3 bagian dan
ditambahkan dengan pointer B.
VI. Kesimpulan
Dari praktikum yang telah dilakukan dapat disimpulkan bahwa BCD merupakan
kode yang menunjukkan bobot masing – masing keududukan bit. Pada praktikum
terdapat perintah loop. Perintah loop ini dusupport oleh perintah lainnya seperti CMP
yang berfungsi untuk mengurangi dan membandingkan, lalu INC yang berfungsi untuk
menambahkan 1 pada data, dan JO yang akan memeriksa suatu kondisi, apabila OF
bernilai 1 maka akan terjadi jump.