Laporan Hasil Praktikum Jaringan Komputer Operasi Aritmatika
Laporan Hasil Praktikum Jaringan Komputer Operasi Aritmatika
OPERASI ARITMATIKA
DISUSUN OLEH :
A.Program 2
Algoritma
1. Download aplikasi emu8086
2. Buka aplikasi emu8086
3. Klik new
4. Tuliscodingan program 1 yang telah di sediakan
5. Save dan compile codingantersebut
6. Kemudianakantampil output laluklik single step
7. Selesai
B.Data percobaan (program 2)
AX BX CX DX
mnomenic
AH
alamat Code (operand) AL BH BL CH CL DH DL FLAGS
AL 90H MOV 00 00 00 00 00 25 00 00 CF 0,ZF 0,SF 0,OF 0,PF 0,AF 0,IF 1,DF 0
CF 0,ZF 0,SF 0,OF 0,PF 0,AF 0,IF 1,DF 0
AL 11H MOV 00 90 00 00 00 25 00 00
CF 0,ZF 0,SF 0,OF 0,PF 0,AF 0,IF 1,DF 0
BL 22H MOV 00 11 00 00 00 25 00 00
CF 0,ZF 0,SF 0,OF 0,PF 0,AF 0,IF 1,DF 0
CL 33H MOV 00 11 00 22 00 25 00 00
CF 0,ZF 0,SF 0,OF 0,PF 0,AF 0,IF 1,DF 0
BL 44H MOV 00 11 00 22 00 33 00 00
CF 0,ZF 0,SF 0,OF 0,PF 0,AF 0,IF 1,DF 0
CH - INC 00 11 00 44 00 33 00 00
CF 0,ZF 0,SF 0,OF 0,PF 0,AF 0,IF 1,DF 0
DH - INC 00 11 00 44 01 33 00 00
CF 0,ZF 0,SF 0,OF 0,PF 0,AF 0,IF 1,DF 0
AL,BL - ADD 00 11 00 44 01 33 01 00
CF 0,ZF 0,SF 0,OF 0,PF 0,AF 0,IF 1,DF 0
DL 23H ADD 00 55 00 44 01 33 01 00
CF 0,ZF 0,SF 0,OF 0,PF 0,AF 0,IF 1,DF 0
DH - DEC 00 55 00 44 01 33 01 23
CF 0,ZF 0,SF 0,OF 0,PF 0,AF 0,IF 1,DF 0
BL 32H ADD 00 55 00 44 01 33 00 23
CF 0,ZF 0,SF 0,OF 0,PF 0,AF 0,IF 1,DF 0
AX,BX - ADD 00 55 00 76 01 33 00 23
CF 0,ZF 0,SF 0,OF 0,PF 0,AF 0,IF 1,DF 0
AL,BL - SUB 00 CB 00 76 01 33 00 23
CF 0,ZF 0,SF 0,OF 0,PF 0,AF 0,IF 1,DF 0
BX 0808H SUB 00 55 00 76 01 33 00 23
CF 0,ZF 0,SF 0,OF 0,PF 0,AF 0,IF 1,DF 0
CX - DEC 00 55 F8 6E 01 33 00 23
CF 0,ZF 0,SF 0,OF 0,PF 0,AF 0,IF 1,DF 0
DL 23H SBB 00 55 F8 6E 01 32 00 23
FLOWCHART
MULAI
DOWNLOAD
APLIKASI EMU 8086
BUKA APLIKASI
EMU8086
KLIK NEW
TULISKAN CODINGAN
PROGRAM 1 YANG
TELAH DISEDIAKAN
KEMUDIAN
TAMPILAKAN OUTPUT
LALU KLIK SINGLE
SELESAI
4.2 Program perkalian
A.Program 3
B.Data percobaaan (program 3)
AX BX CX DX
mnomenic
AH
alamat Code (operand) AL BH BL CH CL DH DL FLAGS
CF 0,ZF 0,SF 0,OF 0,PF 0,AF
AL 90H MOV 00 00 00 00 00 2A 00 00 0,IF 1,DF 0
CF 0,ZF 0,SF 0,OF 0,PF 0,AF
0,IF 1,DF 0
AL 12H MOV 00 90 00 00 00 2A 00 00
CF 0,ZF 0,SF 0,OF 0,PF 0,AF
0,IF 1,DF 0
BL 09H MOV 00 12 00 00 00 2A 00 00
CF 0,ZF 0,SF 0,OF 0,PF 0,AF
0,IF 1,DF 0
CL 33H MOV 00 12 00 09 00 2A 00 00
CF 0,ZF 0,SF 0,OF 0,PF 0,AF
0,IF 1,DF 0
BL 44H MOV 00 12 00 09 00 33 00 00
CF 0,ZF 0,SF 0,OF 0,PF 0,AF
0,IF 1,DF 0
BH - MUL 00 12 00 44 00 33 00 00
CF 0,ZF 0,SF 0,OF 0,PF 0,AF
0,IF 1,DF 0
AX,BX - CMP 00 00 00 44 00 33 00 00
CF 0,ZF 0,SF 0,OF 0,PF 0,AF
0,IF 1,DF 0
BX 0034H MOV 00 00 00 44 00 33 00 00
CF 0,ZF 0,SF 0,OF 0,PF 0,AF
0,IF 1,DF 0
CX 2323H MOV 00 00 00 34 00 33 00 00
CF 0,ZF 0,SF 0,OF 0,PF 0,AF
0,IF 1,DF 0
BX - MUL 00 00 00 34 23 23 00 00
CF 0,ZF 0,SF 0,OF 0,PF 0,AF
0,IF 1,DF 0
- - CLC 00 00 00 34 23 23 00 00
CF 0,ZF 0,SF 0,OF 0,PF 0,AF
0,IF 1,DF 0
CX - MUL 00 00 00 34 23 23 00 00
CF 0,ZF 0,SF 0,OF 0,PF 0,AF
0,IF 1,DF 0
- - CMC 00 00 00 34 23 23 00 00
CF 0,ZF 0,SF 0,OF 0,PF 0,AF
0,IF 1,DF 0
DX - MUL 00 00 00 34 23 23 00 00
CF 0,ZF 0,SF 0,OF 0,PF 0,AF
0,IF 1,DF 0
AX 9F98H MOV 00 00 00 34 23 23 00 00
CF 0,ZF 0,SF 0,OF 0,PF 0,AF
0,IF 1,DF 0
DX - DIV 9F 98 00 34 23 23 00 00
CF 0,ZF 0,SF 0,OF 0,PF 0,AF
0,IF 1,DF 0
AX 0FF67H MOV 9F 98 00 34 23 23 00 00
CF 0,ZF 0,SF 0,OF 0,PF 0,AF
0,IF 1,DF 0
CX 0220H MOV FF 67 00 34 23 23 00 00
CF 0,ZF 0,SF 0,OF 0,PF 0,AF
0,IF 1,DF 0
CX - DIV FF 67 00 34 23 23 00 00
Algoritma
1. Download aplikasi emu8086
2. Buka aplikasi emu8086
3. Klik new
4. Tuliscodingan program 1 yang telah di sediakan
5. Save dan compile codingantersebut
6. Kemudianakantampil output laluklik single step
7. Selesai
FLOWCHART
MULAI
DOWNLOAD
APLIKASI EMU 8086
BUKA APLIKASI
EMU8086
KLIK NEW
TULISKAN CODINGAN
PROGRAM 1 YANG
TELAH DISEDIAKAN
KEMUDIAN
TAMPILAKAN OUTPUT
LALU KLIK SINGLE
SELESAI
OPERASI ARITMATIKA
OPERASI PENAMBAHAN
1. ADD
Untuk menambah dalam bahasa assembler digunakan perintah ADD dan ADC serta INC.
Perintah ADD digunakan dengan syntax :
ADD Tujuan,Asal
Perintah ADD ini akan menambahkan nilai pada Tujuan dan Asal. Hasil yang didapat akan
ditaruh pada Tujuan, dalam bahasa pascal sama dengan instruksi Tujuan:=Tujuan + Asal.
Sebagai contohnya :
---------- + --------------------- +
Perintah ADC digunakan dengan cara yang sama pada perintah ADD, yaitu :
ADC Tujuan,Asal
Perbedaannya pada perintah ADC ini Tujuan tempat menampung hasil pertambahan Tujuan dan
Asal ditambah lagi dengan carry flag (Tujuan:=Tujuan+Asal+Carry). Pertambahan yang
demikian bisa memecahkan masalah seperti yang pernah kita kemukakan, seperti pertambahan
pada bilangan
12345678h+9ABCDEF0h.
Seperti yang telah kita ketahui bahwa satu register hanya mampu menampung 16 bit, maka untuk
pertambahan seperti yang diatas bisa anda gunakan perintah ADC untuk memecahkannya,
Contoh:
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
Nilai pada tujuan akan ditambah dengan 1, seperti perintah. Tujuan:=Tujuan+1 dalam Turbo
Pascal. Tujuan disini dapat berupa suatu register maupun memory. Contoh : perintah INC AL
akan menambah nilai di register AL dengan 1. Adapun flag yang terpengaruh oleh perintah ini
adalah OF,SF,ZF,AF dan PF.
Setelah apa yang telah kita pelajari, marilah sekarang kita menjadikannya sebuah program
dengan semua contoh yang telah diberikan.
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~;
; PROGRAM : TAMBAH.ASM ;
; FUNGSI : MELIHAT PENAMBAHAN ;
; YANG DILAKUKAN ;
; OLEH BERBAGAI ;
; PERINTAH ;
;===========================S’to=;
.MODEL SMALL
.CODE
ORG 100h
Proses :
MOV AH,15h ; AH:=15h
MOV AL,4 ; AL:=4
ADD AH,AL ; AH:=AH+AL, jadi AH=19h
MOV AX,1234h ; NIlai AX:=1234h dan carry=0
MOV BX,0F221h ; Nilai BX:=F221h dan carry=0
ADD AX,BX ; AX:=AX+BX, jadi nilai AX=0455h
MOV AX,1234h ; AX = 1234h CF = 0
MOV BX,9ABCh ; BX = 9ABCh CF = 0
MOV CX,5678h ; BX = 5678h CF = 0
MOV DX,0DEF0h ; DX = DEF0h CF = 0
ADD CX,DX ; CX = 3568h CF = 1
ADC AX,BX ; AX = AX+BX+CF = ACF1
INC AL ; AL:=AL+1, nilai pada AL ditambah 1
INT 20h
END Proses
Setelah anda selesai mengetikkan program 8.1., jadikanlah program COM dengan tasm dan
tlink/t.Setelah itu cobalah untuk melihat kebenaran dari apa yang sudah diberikan dengan
menggunakan debug. Pertama-tama ketikkanlah :
C:\>debug Tambah
Penekanan "r" pada saat pertama kali digunakan untuk melihat nilai pada semua register. Pada
baris pertama dapat anda lihat register yang dinamakan sebagai general purpose(AX,BX,CX dan
DX). Register SP yang digunakan pada operasi stack menunjukkan nilai FFFE(akhir dari
Segment), jadi operasi stack nantinya akan ditaruh pada posisi tersebut. Pada baris kedua dapat
anda lihat keempat register segment, yaitu DS,ES,SS dan CS. Keempat register segment
menunjukkan nilai yang sama yaitu 3597(mungkin berbeda pada komputer anda). Hal ini
dikarenakan program kita adalah program com yang hanya menggunakan 1 segment. Pada baris
kedua dapat juga anda lihat register IP bernilai 100h. Register IP menunjukkan bahwa kita
sekarang sedang berada pada offset ke 100h dari segment aktif(CS:IP atau 3597:100).
Pada baris ketiga dapat anda lihat 3597:0100, nilai ini menunjukkan pasangan dari CS:IP.
Setelah itu dapat anda lihat nilai B415 yang menujukkan isi dari alamat 3597:0100 adalah B4
sedangkan isi dari alamat 3597:1001 adalah 15. Nilai B415 ini sebenarnya merupakan suatu
bahasa mesin untuk instruksi MOV AH,15. Jadi bahasa mesin untuk perintah "MOV AH,nilai"
adalah B4 disertai nilai tersebut. Dari nilai B415 ini dapat diketahui bahwa perintah MOV akan
menggunakan 2 byte di memory.
Setelah itu tekanlah 't' untuk mengeksekusi intruksi yang terdapat pada alamat yang ditunjukkan
CS:IP(MOV AH,15). Setelah anda menekan 't' maka akan ditampilkan hasil setelah intruksi
"MOV AH,15" dieksekusi :
Terlihat bahwa nilai AX berubah dari 0000 menjadi 1500 setelah mendapat perintah MOV
AH,15. Tekanlah 't' disertai enter untuk melihat perubahan nilai pada register-register yang
bersangkutan.
Pengetikan "Q" menandakan bahwa kita ingin keluar dari lingkungan debug
.SUB
Contoh :
.SBB
Seperti pada operasi penambahan, maka pada operasi pengurangan dengan bilangan yang
besar(lebih dari 16 bit), bisa anda gunakan perintah SUB disertai dengan SBB(Substract With
Carry). Perintah SBB digunakan dengan syntax:
SBB Tujuan,Asal
Perintah SBB akan mengurangkan nilai Tujuan dengan Asal dengan cara yang sama seperti
perintah SUB, kemudian hasil yang didapat dikurangi lagi dengan Carry Flag(Tujuan:=Tujuan-
Asal-CF).
;================================;
; PROGRAM : KURANG.ASM ;
; AUTHOR : S’to ;
; FUNGSI : MENGURANGKAN ANGKA ;
; 122EFFF-0FEFFFF ;
;;
;================================;
.MODEL SMALL
.CODE
ORG 100h
TData :
JMP Proses ; Lompat ke Proses
ALo EQU 0EFFFh
AHi EQU 122h
BLo EQU 0FFFFh
Bhi EQU 0FEh
HslLo DW ?
HslHi DW ?
Proses :
MOV AX,ALo ; AX=EFFFh
SUB AX,Blo ; Kurangkan EFFF-FFFF, jadi AX=F000
MOV HslLO,AX ; HslLo bernilai F000
MOV AX,Ahi ; AX=122h
SBB AX,BHi ; Kurangkan 122-FE-Carry, AX=0023
MOV HslHi,AX ; HslHi bernilai 0023
INT 20h ; Kembali ke DOS
END TData
Disini dapat kita lihat begaimana caranya mendefinisikan suatu nilai constanta(nilai yang tidak
dapat dirubah) dan variabel dengan :
Tanda '?' digunakan untuk menyatakan bahwa tempat yang kita pesan sebanyak sebanyak 1
word(DW) tidak diberikan data awal yang akan terdapat pada variabel tersebut(HslLo dan
HslHi). Jadi data yang akan terdapat pada HslLo dan HslHi bisa apa saja dan kita tidak
mengetahuinya. Tempat data program kita lompati dengan perintah JMP supaya komputer tidak
mengeksekusi data program sebagai perintah.
MOV AX,ALo
SUB AX,Blo
MOV HslLO,AX
Untuk mengurangkan angka 122EFFF dengan 0FEFFFF kita dapat mengurangkan word rendah
dari angka tersebut dahulu, yaitu EFFF- FFFF. Hal ini dikarenakan daya tampung register yang
hanya 16 bit. Dapat anda lihat bahwa pengurangan EFFF-FFFF akan menyebabkan terjadinya
peminjaman(Borrow), hasil word rendah(F000) yang didapatkan kemudian kita simpan pada
variabel HslLo.
122 EFFF
FE FFFF
---------- -
023 F000
Sampai saat ini kita sudah selesai mendapatkan nilai pada word rendahnya, yang disimpan pada
variabel HslLo.
MOV AX,AHi
SBB AX,BHi
MOV HslHi,AX
Langkah selanjutnya adalah menghitung word tingginya yaitu pengurangan 122-FE-Carry
dengan menggunakan perintah SBB maka masalah tersebut dengan mudah terpecahkan.
Akhirnya kita akan mendapatkan hasil pengurangan dari 122EFFF-0FEFFFF yaitu 23F000 yang
tersimpan pada pasangan HslHi:HslLo(0023F000).
DEC
Perintah DEC(Decrement) digunakan khusus untuk pengurangan dengan 1. Perintah DEC hanya
menggunakan 1 byte memory, sedangkan perintah SUB dan SBB menggunakan 3 byte. Oleh
sebab itu bila anda ingin melakukan operasi pengurangan dengan 1 gunakanlah perintah DEC.
Syntax pemakaian perintah dec
ini adalah:
DEC Tujuan
Nilai pada tujuan akan dikurangi 1, seperti perintah Tujuan:=Tujuan-1 dalam Turbo Pascal.
Tujuan disini dapat berupa suatu register maupun memory. Contoh perintah DEC AL akan
mengurangi nilai di register AL dengan 1.
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~;
; PROGRAM : CBA0.ASM ;
; FUNGSI : MENCETAK KARAKTER ;
; "Z".."A" DENGAN ;
; INT 21h SERVIS 02 ;
;==========================S’to=;
.MODEL SMALL
.CODE
ORG 100h
Proses :
MOV AH,02h ; Nilai servis
MOV DL,'Z' ; DL=5Ah
MOV CX,26 ; Banyaknya pengulangan yang akan
; dilakukan
Ulang:
INT 21h ; Cetak karakter !!
DEC DL ; Kurang DL dengan 1
LOOP Ulang ; Lompat ke Ulang
INT 20h
END Proses
ZYXWVUTSRQPONMLKJIHGFEDCBA
OPERASI PERKALIAN
MUL Sumber
Sumber disini dapat berupa suatu register 8 bit(Mis:BL,BH,..), register 16 bit(Mis: BX,DX,..)
atau suatu varibel. Ada 2 kemungkinan yang akan terjadi pada perintah MUL ini sesuai dengan
jenis perkalian 8 bit atau 16 bit.
Bila Sumber merupakan 8 bit seperti MUL BH maka komputer akan mengambil nilai yang
terdapat pada BH dan nilai pada AL untuk dikalikan. Hasil yang didapat akan selalu disimpan
pada register AX. Bila sumber merupakan 16 bit
seperti MUL BX maka komputer akan mengambil nilai yang terdapat pada BX dan nilai pada
AX untuk dikalikan. Hasil yang didapat akan disimpan pada register DX dan AX(DX:AX), jadi
register DX menyimpan Word tingginya dan AX menyimpan Word rendahnya.
;================================;
; PROGRAM : KALI.ASM ;
; AUTHOR : S’to ;
; FUNGSI : MENGALIKAN BILANGAN;
; 16 BIT, HASIL ;
; PADA DX:AX ;
;================================;
.MODEL SMALL
.CODE
ORG 100h
TData :
JMP Proses ; Lompat ke Proses
A DW 01EFh
B DW 02FEh
HslLo DW ?
HslHi DW ?
Proses:
MOV AX,A ; AX=1EF
MUL B ; Kalikan 1FH*2FE
MOV HslLo,AX ; AX bernilai C922 sehingga HslLo=C922
MOV HslHi,DX ; DX bernilai 0005 sehingga HslHi=0005
INT 20h ; Kembali ke DOS
END TData
Program 8.4. Proses perkalian dengan MUL
Pada program 8.4. kita mendefinisikan angka untuk variabel 'A'=1EF dan 'B'=2FE dengan DW.
Karena tidak digunakan EQU, maka varibel 'A' dan 'B' dapat dirubah bila diinginkan.
OPERASI PEMBAGIAN
Operasi pada pembagian pada dasarnya sama dengan perkalian. Untuk operasi pembagian
digunakan perintah DIV dengan syntax:
Bila sumber merupakan operand 8 bit seperti DIV BH, maka komputer akan mengambil nilai
pada register AX dan membaginya dengan nilai BH. Hasil pembagian 8 bit ini akan disimpan
pada register AL dan sisa dari pembagian akan disimpan pada register AH.
Bila sumber merupakan operand 16 bit seperti DIV BX, maka komputer akan mengambil nilai
yang terdapat pada register DX:AX dan membaginya dengan nilai BX. Hasil pembagian 16 bit
ini akan disimpan pada register AX dan sisa dari
;================================;
; PROGRAM : BAGI.ASM ;
; AUTHOR : S’to ;
; FUNGSI : MEMBAGI BILANGAN ;
; 16 BIT, HASIL ;
; PADA DX:AX ;
;================================;
.MODEL SMALL
.CODE
ORG 100h
TData :
JMP Proses ; Lompat ke Proses
A DW 01EFh
B DW 2
Hsl DW ?
Sisa DW ?
Proses:
SUB DX,DX ; Jadikan DX=0
MOV AX,A ; AX=1EF
DIV B ; Bagi 1EF:2
MOV Hsl,AX ; AX bernilai 00F7 sehingga Hsl=00F7
MOV Sisa,DX ; DX berisi 0001 sehingga Sisa=0001
INT 20h ; Kembali ke DOS
END Tdata
KESIMPULAN