blajar mandiri

Monday, February 20, 2017

belajar bahasa assembley - aritmatika

I. Tujuan

1.      Mahasiswa mampu memahamidan mengerti tentang berbagai instruksi aritmatika.

II. Dasar Teori

Operasi artimatika merupakan operasi dasar dalam mikroprosesor. Operasi aritmatika dipergunakan untuk melakukan kalkulasi berbagai proses yang nantinya akan dilakukan oleh mikroprosesor, baik berhubungan dengan perhitungan alamat, data, maupun keperluan lainnya. Operasi aritmatika meliputi :
  1. Operasi penjumlahan
  2. Operasi pengurangan
  3. Operasi perkalian
  4. Operasi pembagian
Operasi penjumlahan merupakan operasi untuk menambahkan 2 atau lebih operan. Operasi ini ada berbagai macam , antara lain : ADD, ADC, INC. Operasi pengurangan merupakan operasi untuk mengurangkan 2 atau lebih operan. Sama seperti operasi penjumlahan, maka operasi pengurangan juga ada operasi pengurangan general (SUB), pengurangan dengan carry (SBB), dan pengurangan dengan 1 (DEC). Operasi perkalian mengalikan 2 buah operan atau lebih dengan menggunakan instruksi MUL. Untuk perkalian yang melibatkan floating point number, maka biasanya menggunakan co-processor hardware yang mendukung fungsi – fungsi floating point seperti FMUL. Sedangkan operasi pembagian melakukan pembagian antara 2 buah atau lebih operan menggunakan instruksi DIV.
Untuk melihat perubahan pada flag – flag registernya jika terjadi operasi aritmatika, maka dipergunakan bantuan program DEBUG seperti pada praktikum sebelumnya. Untuk men-debug sebuah program COM dengan nama cth.com menggunakan DEBUG, maka di command prompt DOS diketikkan perintah :

DEBUG cth.com
Maka secara otomatis DEBUG akan mulai melakukan eksekusi program COM di register yang bersangkutan. Menggunakan proses tracing maka dapat dilihat proses operasi aritmatika yang dijalankan akan mengubah register apa saja di komputer.





III. Langkah Langkah Percobaan
*      Alat dan Bahan
-          PC
-          DEBUG

*      Metode Percobaan
1.     buka notepad
2.     tulis snytax program assembly
3.     simpan filenya kemudian compile di cmd
4.     selanjutnya lingking menjadi file.com
5.     debug hasil lingking menggunakan debug dengan perintah pada cmd  DEBUG [ FILE.COM]
6.     trace tiap program assembly dan amati perubahan pada register – registernya

HASIL PERCOBAAN
A.   Operasi Penambahan
·         Snytax program
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~;
; PROGRAM : PLUS.ASM ;
; FUNGSI : MELIHAT PENAMBAHAN
; YANG DILAKUKAN
; OLEH BERBAGAI
; PERINTAH
;===============================;
      .Model      Small
      .Code
      ORG   100h
     
Proses :
      MOV   AH,20h
      MOV   AL,32
      ADD   AH,AL
      MOV   AX,5555h
      MOV   BX,0F123h
      ADD   AX,BX
      MOV   AX,2222h
      MOV   BX,8765h
      MOV   CX,AAAAh
      MOV   DX,0DDD0h
      ADD   CX,DX
      ADC   AX,BX
      INC   AL
      INT   20h
End         Proses
Analisa
§  Model small : digunakan untuk memberitahukan kepada assembler bentuk memory yang digunakan     oleh program kita.
§  Code : Tanda directive ini digunakan untuk memberitahukan kepada assembler bahwa kita akan mulai
menggunakan Code Segment-nya disini. menggunakan Code Segment-nya disini.
§  Org 100h : digunakan untuk memberitahukan assembler supaya program pada saat dijalankan(diload ke memory) ditaruh mulai pada offset ke 100h(256) byte.
§   MOV AH,20h = memindahkan angka 20 pada register AH
§  MOV AL,32 = memindahkan angka 32 pada register AL
§  ADD AH,AL = menambahkan nilai pada tujuan dan sumber hasilnya
 Di taruh pada tujuan.
§  MOV AX,5555h = memindahkan angka 5555h pada register AX carry =0
§  MOV BX,0F123h = memindahkan angka 0F123h pada register BX carry=0
§  ADD AX,BX = nilai AX; AX + BX = 4678, carry =1
§  MOV AX,2222h = memindahkan angka 2222h pada register AX,carry=0.
§  MOV BX,8765h = memindahkan angka 8765h pada register BX,carry=0
§  MOV CX,AAAAh = memindahakan angka AAAAh pada register CX,carry=0
§  MOV DX,0DDD0h = memindahkan angka 0DDD0h pada register DX, carry=0
§  ADD CX,DX =nilai CX; CX + DX = 887A, carry=1
§  ADC AX,BX = AX; AX + BX + CF = ACF1
§  INC AL = menambah nilai pada register AL dengan 1.
§  INT 20h= mengakhiri program dan kembali pada dos.













COMPILE yaitu mengubah file kode menjadi file objek.


§  CD ; ialah mengganti direktori aktif ke direktori lainnnya yang ditentukan dalam parameter.
§  PATH ; ialah menentukan dimana ms- dos harus mencari berkas=berkas yang dapat dieksekusi sebagi program.





LINKING yaitu mengubah file objek menjadi file binary.




LINKING MENGGUNAKAN DEBUG

§  D 0100 0121 ; digunakan untuk menampilkan isi memori dari yang terkecil sampai terbesar.
§  U 0100 0121 digunakan untuk menampilkan bahasa assembly
- 0100 = alamat relative
- B420 = code operasi atau bahasa mesin.
- MOV AH,20 = bahasa assembly.
§  R ; digunakan untuk melihat nilai pada semua register
§  Pada baris pertama dapat anda lihat register yang dinamakan general purpose [ AX,BX,CX,DX ].
Register SP yang digunakan pada operasi stack menunjukkan nilai FFFE [ akhir segment ].
§  Pada baris kedua dapat kita lihat register segment yaitu [ DS,ES,SS,CS ] menunjukkan nilai yang sama yaitu 13F0.
§  Pada baris kedua juga dapat kita lihat register IP yang bernilai 100h. Register IP menunjukkan bahwa kita sedang berada pada offset ke 100h.
§  Pada baris ketiga dapat anda lihat 13F0:0100, nilai ini menunjukkan pasangan dari CS:IP.setelah itu dapat kita lihat nilai B420 yang menunjukkan isi dari alamat 13F0 : 0100.
§  Setelah itu tekanlah 'T' untuk mengeksekusi intruksi yang terdapat pada alamat yang ditunjukkan CS:IP(MOV AH,20). Setelah anda menekan 't' maka akan ditampilkan hasil setelah intruksi "MOV AH,20".
§  Hasil trace terlihat  bahwa nilai AX berubah dari 0000 menjadi  2000 setelah mendapat perintah MOV AH,20.
§  Pada baris kedua telihat  nilai register IP = 0102 menandakan kita berada pada offset ke 102h.

§  AL,20 adalah perintah yang akan dieksekusi pada baris selanjutnnya.

§  Hasil trace terlihat bahwa nilai AX berubah dari 2000 menjadi 2000 setelah perintah MOV AL.20.
§  Pada baris kedua  terlihat nilai register IP = 0104 menandakan kita sedang berada pada offset ke 104h.
§  ADD AH,AL adalah perintah yang akan dieksekusi pada baris selanjutnya.

§  Hasil trace terlihat bahwa nilai register AX berubah dari 2020 menjadi 4020 setelah mendapat perintah ADD AH,AL
§  Pada baris kedua terlihat bahwa nilai register IP = 0106 menandakan kita sedang berada pada offset ke 106h.
§  AX,5555 adalah  perintah yang akan dieksekusi pada baris selanjutnya.
§  Hasil trace terlihat bahwa nilai register AX berubah 5555 setelah mendapat perintah MOV AX,5555.
§  Pada baris kedua terlihat register IP = 0109. Berapa pada offset 109h.
§  MOV BX,F123 adalah perintah yang akan dieksekusi selanjutnya.
§  Hasil trace terlihat bahwa nilai register BX dari 0000 berubah menjadi F123 setelah mendapat perintah MOV BX,F123.
§  ADD AX,BX adalah perintah yang akan di eksekusi selanjutnya.
§  Hasil trace terlihat bahwa nilai register AX berubah dari 5555 menjadi 4678 setelah mendapat perintah ADD AX,BX. Yaitu nilai AX + BX = AX.
§  Nilai IP berubah menjadi 010E.
§  MOV AX,2222 adalah perintah yang akan di eksekusi selanjutnya.
§  Hasil trace terlihat bahwa nilai register AX berubah menjadi 2222 setelah mendapat perintah  MOV AX,2222.
§  Nilai register IP berubah menjadi 0111.
§  MOV BX,8765 adalah perintah yang akan di eksekusi selanjutnya.
§  Hasil trace terlihat bahwa nilai register BX berubah dari F123 menjadi 8765 setelah mendapat perintah MOV BX,8765.
§  Alamat memori berubah menjadi IP = 0114.
§  MOV CX,AAAA adalah perintah yang akan di eksekusi selanjutnya.
 
§  Hasil trace terlihat bahwa nilai register CX berubah dari 0022 menjadi AAAA setelah mendapat perintah MOV CX,AAAA.
§  Alamat memori menjadi IP = 0117.
§  MOV DX,DDD0 adalah perintah yang akan dieksekusi selanjutnya.
§  Hasil trace terlihat bahwa nilai register DX berubah dari 0000 menjadi DDD0 setelah mendapat perintah MOV DX,DDD0.
§  Alamat memori berubah menjadi IP = 011A.
§  ADD CX,DX adalah perintah yang akan dieksekusi selanjutnya.
§  hasil trace terlihat bahwa nilai register CX berubah dari AAAA menjadi 887A  setelah mendapat perintah ADD CX,DX.
§  Alamat memori berubah menjadi IP = 011C.
§  ADC AX,BX adalah perintah yang akan dieksekusi selanjutnya.
§  Hasil trace terlihat bahwa nilai register AX berubah dari 2222 menjadi A988 setelah mendapat perintah ADC AX,BX.
§  Alamat memori dari ADC berubah menjadi IP = 011E.
§  INC AL adalah perintah yang akan dieksekusi selanjutnya.
§  Hasil trace terlihat bahwa nilai register AX berubah dari A988 menjadi A989 setelah mendapat penambahan 1 dari perintah INC AL.



B.    Operasi Pengurangan
Snytax program


;================================;
; PROGRAM : KURANG.ASM ;
; FUNGSI : MENGURANGKAN ANGKA
;================================;
      .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
      SUB   AX,Blo
      MOV   HslLO,AX
      MOV   AX,AHi
      SBB   AX,BHi
      MOV   HslHi,AX

      INT   20h
End   TData
Analisa
§  Model small ; Tanda directive yang digunakan untuk memberitahukan kepada assembler bentuk memory yang digunakan di program kita. Jika kita menggunakan ukuran kurang dari 64 kb.
§  Code ; digunakan untuk memberitahukan kepada assembler bahwa kita akan menggunakan code segmentnya disini.
§  Org 100h ; digunakan untuk memberitahukan kepada assembler supaya program pada saat dijalankan ditaruh mulai pada offset ke 100h atau 256 byte.
§  JMP ; digunakan untuk melompat menuju tempat yang ditunjukkan oleh perintah jump.
§  Equ ; digunakan untuk mendefinisikan suatu yang constan atau tetap.
§  Dengan perintah equ kita dapat mendefinisikan bahwa Alo = 0EFFF,AHi = 122,BLo = FFFF,dan BHi = 0FE.
§  Kita defenisikan suatu tempat untuk menyimpannya dengan nama ‘HS1Lo’ dan ‘HS1Hi’.
§  Tanda ‘?’ digunakan untuk menyatakan bahwa tempat yang kita pesan sebanyak 1 word (dw).
§  MOV        AX,ALo ; untuk memindahkan data Alo pada register AX.
§  SUB          AX,Blo ; Mengurangkan nilai AX dengan BLo. AX = F000.
§  MOV        HslLO,AX ; 122 EFFF
FE FFFF
---------- -
023 F000. Hasil word rendah disimpan pada Hs1Lo.
§  MOV AX,AHi ; untuk memindahkan data Ahi pada register AX.
§  SBB     AX,BHi ;Mengurangkan nilai AX dengan Bhi dengan carry. AX =023
§  MOV HslHi,AX ; hasil wor tinggi disimpan pada Hs1Hi.
§  Akhirnya kita akan mendapatkan hasil pengurangan yang disimpan pada pasangan Hs1Hi : Hs1Lo (0023F000).
§  INT 20h ;mengakhiri program dan kembali pada dos.

COMPILE : Mengubah file kode menjadi file objek.

LINKING : Mengubah file objek menjadi file binari.


Linking menggunakan debug


§  D 0100 011C ; digunakan untuk menampilkan isi memori dari yang terkecil sampai terbesar.
§  U 0100 011C digunakan untuk lmenampilkan bahasa assembly
0100 = alamat relative
EB05 = code operasi atau bahasa mesin.
JMP 0107 = bahasa assembly.

§  R ; digunakan untuk melihat nilai pada semua register
§  Pada baris pertama dapat anda lihat register yang dinamakan general purpose [ AX,BX,CX,DX ].
Register SP yang digunakan pada operasi stack menunjukkan nilai FFFE [ akhir segment ].
§  Pada baris kedua dapat kita lihat register segment yaitu [ DS,ES,SS,CS ] menunjukkan nilai yang sama yaitu 13F0.
§  Pada baris kedua juga dapat kita lihat register IP yang bernilai 100h. Register IP menunjukkan bahwa kita sedang berada pada offset ke 100h.
§  Pada baris ketiga dapat anda lihat 13F0:0100, nilai ini menunjukkan pasangan dari CS:IP.setelah itu dapat kita lihat nilai EB05 yang menunjukkan isi dari alamat 13F0 : 0100.
§  Setelah itu tekanlah 't' untuk mengeksekusi intruksi yang terdapat pada alamat yang ditunjukkan CS:IP(JMP,0107). Setelah anda menekan 't' maka akan ditampilkan hasil setelah intruksi "JMP, 0107"

§  Pada trace pertama terlihat bahwa nilai register belum berubah karena digunakan perintah JMP artinya disuruh lompat ke perintah selanjutnya.
§  MOV AX,EFFF adalah perintah yang akan dieksekusi selanjutnya.

§  Hasil trace terlihat bahwa nilai register AX berubah dari 0000 menjadi EFFF setelah mendapat perintah MOV AX,EFFF.
§  SUB AX,FFFF adalah  perintah yang akan dieksekusi selanjutnya.

§  Hasil trace terlihat bahwa nilai register AX berubah dari EFFF menjadi F000 setelah mendapat perintah SUB AX,FFFF.
§  MOV [ 0103] ,AX adalah perintah yang akan dieksekusi selanjutnya.
§  Nilai dari register tidak berubah hanya alamat memori yang berubah menjadi IP = 0111.
§  MOV AX,0122 adalah perintah yang akan dieksekusi selanjutnya.
§  Hasil trace terlihat bahwa nilai register dari AX berubah dari F000 menjadi 0122 setelah mendapat perintah MOV AX,0122.
§  SBB AX, 00FE adalah perintah yang akan dieksekusi selanjutnya.

§  Hasil trace terlihat bahwa nilai register AX berubah dari 0122 menjadi 0023 setelah mendapat perintah pengurangan yaitu SBB AX,00FE.
§  MOV [ 0105],AX adalah  alamat memori dari AX yaitu [0105].









C. Dekremen
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~;
; PROGRAM : DEC.ASM ;
; FUNGSI : MENCETAK KARAKTER ;
; "Z".."A" DENGAN ;
; INT 21h SERVIS 02 ;
;==========================;
      .Model Small
      .Code
      ORG   100h
     
Proses :
      MOV   AH,02h
      MOV   DL,'Z'
      MOV   CX,26
     
Ulang:
      INT   21h
      DEC   DL
      LOOP Ulang
      INT   20h
End Proses





Analisa
§  Model small ; Tanda directive yang digunakan untuk memberitahukan kepada assembler bentuk memory yang digunakan di program kita. Jika kita menggunakan ukuran kurang dari 64 kb.
§  Code ; digunakan untuk memberitahukan kepada assembler bahwa kita akan menggunakan code segmentnya disini.
§  Org 100h ; digunakan untuk memberitahukan kepada assembler supaya program pada saat dijalankan ditaruh mulai pada offset ke 100h atau 256 byte.
§  MOV AH,02h ; memindahkan data 02h pada register AH
§  MOV DL,'Z' ;memindahkan data z pada register DL
§  MOV CX,26 ; memindahkan data 26 pada register CX.
§  INT 21h ; mencetak karakter
§  DEC DL ; mengurangkan DL dengan 1.
§  LOOP Ulang; lompat ke ulang
§  INT 20h ;mengakhiri program dan kembali ke DOS.

COMPILE : mengubah file kode menjadi file objek.
LINKING : merubah file objek menjadi file binari



Linking menggunakan debug
§  D 0100 010E ; digunakan untuk menampilkan isi memori dari yang terkecil sampai terbesar.
§  U 0100 010E digunakan untuk lmenampilkan bahasa assembly
0100 = alamat relative
B402 = code operasi atau bahasa mesin.
MOV AH,02 = bahasa assembly.

§  R ; digunakan untuk melihat nilai pada semua register
§  Pada baris pertama dapat anda lihat register yang dinamakan general purpose [ AX,BX,CX,DX ].
Register SP yang digunakan pada operasi stack menunjukkan nilai FFFE [ akhir segment ].
§  Pada baris kedua dapat kita lihat register segment yaitu [ DS,ES,SS,CS ] menunjukkan nilai yang sama yaitu 13F0.
§  Pada baris kedua juga dapat kita lihat register IP yang bernilai 100h. Register IP menunjukkan bahwa kita sedang berada pada offset ke 100h.
§  Pada baris ketiga dapat anda lihat 13F0:0100, nilai ini menunjukkan pasangan dari CS:IP.setelah itu dapat kita lihat nilai B402 yang menunjukkan isi dari alamat 13F0 : 0100.
§  Setelah itu tekanlah 'T' untuk mengeksekusi intruksi yang terdapat pada alamat yang ditunjukkan CS:IP(MOV AH,02). Setelah anda menekan 't' maka akan ditampilkan hasil setelah intruksi "MOV AH,02"
§  Hasil trace terlihat bahwa nilai register AX berubah dari 0000 menjadi 0200 setelah mendapat perintah MOV AX,02.
§  Pada baris ketiga kita dapat melihat nilai B25A yang menunjukkan isi dari alamat 13F0 : 0102.
§  MOV DL,5A adalah perintah yang akan dieksekusi selanjutnya.

§  Hasil trace terlihat bahwa nilai register DX berubah dari 0000 menjadi 005A setelah mendapat perintah MOV DL,5A.
§  Pada baris ketiga kita dapat melihat nilainB91A00 yang menunjukan isi dari alamat 13F0 : 0104.
§  MOV CX,001A adalah perintah yang akan dieksekusi selanjutnya.

§  Hasil trace terlihat bahwa nilai dari register CX berubah dari 000F  menjadi 001A setelah mendapat perintah dari MOV CX,001A.
§  Alamat memori dari CX yaitu 0107.
§  INT 21 yaitu dos melakukan suatu operasi .yang akan di jalankan pada perintah selanjutnya.
§  Hasil tarce menunjukkan bahwa nilai CS berubah dari 13F0 menjadi 00A7 setalah mendapat perintah INT 21.







D. Perkalian
;================================;
; PROGRAM : KALI.ASM ;
; FUNGSI : MENGALIKAN BILANGAN;
; 16 BIT, HASIL ;
; PADA DX:AX ;
;================================;
      .Model Small
      .Code
      ORG 100h
     
TData :
      JMP   Proses ; Lompat ke Proses
      A     dw 01ABh
      B     dw 02CDh
      HslLo dw ?
      HslHi dw ?
     
Proses:
      MOV   AX,A
      MUL   B
      MOV   HslLo,AX
      MOV   HslHi,DX
      INT   20h
End TData
Analisa
§  Model small ; Tanda directive yang digunakan untuk memberitahukan kepada assembler bentuk memory yang digunakan di program kita. Jika kita menggunakan ukuran kurang dari 64 kb.
§  Code ; digunakan untuk memberitahukan kepada assembler bahwa kita akan menggunakan code segmentnya disini.
§  Org 100h ; digunakan untuk memberitahukan kepada assembler supaya program pada saat dijalankan ditaruh mulai pada offset ke 100h atau 256 byte.
§  JMP ; digunakan untuk melompat menuju tempat yang ditunjukkan oleh perintah jump.
§  DW ; mendefinisikan suatu data word.
§  Dengan perintah dw kita dapat endefinisikan bahwa A = 01AB, B = 02CD.
§  Kita definisikan suatu tempat penyimpanan dengan nama HS1Lo,HS1Hi.
§  Tanda ? digunakan untuk menyatakan bahwa tempat yang kita pesan sebanyak satu word (dw).
§  MOV AX,A ; memindahkan data A pada register AX.
§  Mul B ; mengalikan nilai AX dengan BX, hasilnya ditaruh pada register AX dan DX.
§  MOV Hs1Lo, AX ; memindahkan data AX untuk disimpan pada Hs1Lo. Data word rendah.
§  MOV Hs1Hi,DX ; memindahkan data DX untuk disimpan pada Hs1Hi. Data word tinggi
§  INT 20h ; mengakhiri program dan kembali ke DOS.
COMPILE : mengubah file kode menjadi file objek.
LINKING
Linking menggunakan debug
§  D 0100 011E ; digunakan untuk menampilkan isi memori dari yang terkecil sampai terbesar.
§  U 0100 011E digunakan untuk lmenampilkan bahasa assembly
0100 = alamat relative
EB09= code operasi atau bahasa mesin.
JMP 010B= bahasa assembly.
§  R ; digunakan untuk melihat nilai pada semua register
§  Pada baris pertama dapat anda lihat register yang dinamakan general purpose [ AX,BX,CX,DX ].
Register SP yang digunakan pada operasi stack menunjukkan nilai FFFE [ akhir segment ].
§  Pada baris kedua dapat kita lihat register segment yaitu [ DS,ES,SS,CS ] menunjukkan nilai yang sama yaitu 13F0.
§  Pada baris kedua juga dapat kita lihat register IP yang bernilai 100h. Register IP menunjukkan bahwa kita sedang berada pada offset ke 100h.
§  Pada baris ketiga dapat anda lihat 13F0:0100, nilai ini menunjukkan pasangan dari CS:IP.setelah itu dapat kita lihat nilai EB09 yang menunjukkan isi dari alamat 13F0 : 0100.
§  Setelah itu tekanlah 't' untuk mengeksekusi intruksi yang terdapat pada alamat yang ditunjukkan CS:IP(JMP,010B). Setelah anda menekan 't' maka akan ditampilkan hasil setelah intruksi "JMP, 010B"
§  Hasil trace tidak menunjukkan adanya perubahan pada registernya karena perintah JMP digunakan untuk melompat ke perintah berikutnya.
§  MOV  AX, [ 0103]  alamat memori dari AX  yaitu 0103 yang berisi nilai 01AB. Akan dieksekusi pada perintah selanjutnya.

§  Hasil trace terlihat bahwa nilai register dari AX, berubah dari 0000 menjadi 01AB setelah mendapat perintah MOV AX,[ 0103 ].
§  MUL WORD PTR [ 0105]. CODE SEGMENT = 0105=02CD yaitu perintah yang akan dieksekusi selanjutnya.

§  Hasil trace terlihat bahwa nilai register dari AX berubah dari 01AB menjadi ABEF dan nilai register DX berubah dari 0000 menjadi 0004 setelah mendapat perintah MUL WORD PTR [ 0105].
§  MOV [ 0107],AX adalah perintah yang akan dieksekusi selanjutnya.

§  Hasil trace tidah terjadi perubahan pada nilai register AX, karena alamat memori [0107] mempunyai data 0000.
§  MOV [0109],DX. CS ; 0109 = 0000. Adalah perintah yang akan dieksekusi selanjutnya.
§  Hasil trace tidak terjadi perubahan pad nilai register DX,karena alamat memori [ 0109] mempunyai data 0000.
§  INT 20 adalah mengakhiri sebuah program dan kembali pada dos.


E. Pembagian
;================================;
; PROGRAM : BAGI.ASM ;
; 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
      MOV   AX,A
      DIV   B
      MOV   Hsl,AX
      MOV   Sisa,DX
      INT   20h ; Kembali ke DOS
End   Tdata
Analisa
§  Model small ; Tanda directive yang digunakan untuk memberitahukan kepada assembler bentuk memory yang digunakan di program kita. Jika kita menggunakan ukuran kurang dari 64 kb.
§  Code ; digunakan untuk memberitahukan kepada assembler bahwa kita akan menggunakan code segmentnya disini.
§  Org 100h ; digunakan untuk memberitahukan kepada assembler supaya program pada saat dijalankan ditaruh mulai pada offset ke 100h atau 256 byte.
§  JMP ; digunakan untuk melompat menuju tempat yang ditunjukkan oleh perintah jump.
§  DW ; mendefinisikan suatu data word.
§  Dengan perintah dw kita dapat mendefinisikan bahwa A = 01EF, B = 2.
§  Kita definisikan suatu tempat penyimpanan dengan nama HS1Lo,HS1Hi.
§  Tanda ? digunakan untuk menyatakan bahwa tempat yang kita pesan sebanyak satu word (dw).
§  SUB DX,DX ; nilai DX  kurang DX hasilnya akan nol.
§  MOV AX,A ; memindahkan data A pada register AX

§  DIV B ;AX / B

§  MOV Hsl,AX; AX  bernilai 00F7 sehingga Hsl=00F7  

§  MOV Sisa,DX; DX berisi 0001 sehingga Sisa=0001

§  INT 20h  ; mengakhiri program dan kembali pada DOS.








COMPILE


LINKING


LINKING DENGAN MENGGUNAKAN DEBUG


§  D 0100 0120 ; digunakan untuk menampilkan isi memori dari yang terkecil sampai terbesar.
§  U 0100 0120 digunakan untuk lmenampilkan bahasa assembly
0100 = alamat relative
EB09= code operasi atau bahasa mesin.
JMP 010B= bahasa assembly.
§  R ; digunakan untuk melihat nilai pada semua register
§  Pada baris pertama dapat anda lihat register yang dinamakan general purpose [ AX,BX,CX,DX ].
Register SP yang digunakan pada operasi stack menunjukkan nilai FFFE [ akhir segment ].
§  Pada baris kedua dapat kita lihat register segment yaitu [ DS,ES,SS,CS ] menunjukkan nilai yang sama yaitu 13F0.
§  Pada baris kedua juga dapat kita lihat register IP yang bernilai 100h. Register IP menunjukkan bahwa kita sedang berada pada offset ke 100h.
§  Pada baris ketiga dapat anda lihat 13F0:0100, nilai ini menunjukkan pasangan dari CS:IP.setelah itu dapat kita lihat nilai EB09 yang menunjukkan isi dari alamat 13F0 : 0100.
§  Setelah itu tekanlah 't' untuk mengeksekusi intruksi yang terdapat pada alamat yang ditunjukkan CS:IP(JMP,010B). Setelah anda menekan 't' maka akan ditampilkan hasil setelah intruksi "JMP, 010B"
§  Hasil trace terlihat bahwa tidak ada perubahan pada register karena perintah JMP digunakan untuk melompat ke perintah selanjutnya.
§  SUB DX,DX adalah perintah yang akan dieksekusi berikutnya.

§  Hasil trace terlihat bahwa nilai register DX masih tetap 0000 setelah mendapat perintah SUB DX,DX.setiap pengurangan dilakukan dengan dirinya sendiri maka akan menghasilkan nilai 0.
§  MOV AX,[ 0103 ],CS ; 0103 = 01EF. Adalah perintah yang akan dieksekusi selanjutnya.

§  Hasil trace terlihat bahwa nilai register AX berubah dari 0000 menjadi 01EF. Setelah mendapat perintah MOV AX, [ 0103], CS ; 0103 = 01EF.
§  DIV WORD PTR [ 0105] adalah perintah yang akan dieksekusi selanjutnya.
§  Hasil trace terlihat bahwa nilai dari register AX berubah dari 01EF menjadi 00F7, dan nilai register dari DX berubah dari 0000 menjadi 0001 setelah mendapat perintah DIV WORD PTR [ 0105 ].
§  MOV [ 0107 ],AX      CS ; 0107 = 0000. Adalah perintah yang akan dieksekusi selanjutnya.

§  Hasil trace terlihat bahwa nilai register tidak mengalami perubahan karena nilai dari alamat memori [ 0107 ] adalah 0000.
§  MOV [ 0109 ],DX      CS; 0109 = 0000 adalah perintah yang akan dieksekusi selanjutnya.

§  Hasil trace terlihat bahwa nilai register tidak ada perubahan karena nilai dari alamat memori [ 0109 ] adalah 0000.
§  INT 20 adalah untuk mengakhiri sebuah program dan kembali pada dos.


















KESIMPULAN
v  . Operasi aritmatika dipergunakan untuk melakukan kalkulasi berbagai proses yang nantinya akan dilakukan oleh mikroprosesor, baik berhubungan dengan perhitungan alamat, data, maupun keperluan lainnya.
v  Operator aritmatika dibagi menjadi empat macam yaitu ; operator perjumlahan, operator pengurangan, operator perkalian,operator pembagian.
v  Operator penjumlah yaitu ; ADD, ADC,INC.
v  Operator pengurangan yaitu ; SUB,SBB,DEC.
v  Operator perkalian yaitu ; MUL.
v  Operator pembagian yaitu ; DIV.
v  Compile mengubah file kode menjadi file objek.
v  Linking mengubah file objek menjadi file binary.
v  Perintah JMP digunakan untuk melompat ke perintah selanjutnya.








 I. Tujuan

1.      Mahasiswa mampu memahamidan mengerti tentang berbagai instruksi aritmatika.

II. Dasar Teori

Operasi artimatika merupakan operasi dasar dalam mikroprosesor. Operasi aritmatika dipergunakan untuk melakukan kalkulasi berbagai proses yang nantinya akan dilakukan oleh mikroprosesor, baik berhubungan dengan perhitungan alamat, data, maupun keperluan lainnya. Operasi aritmatika meliputi :
  1. Operasi penjumlahan
  2. Operasi pengurangan
  3. Operasi perkalian
  4. Operasi pembagian
Operasi penjumlahan merupakan operasi untuk menambahkan 2 atau lebih operan. Operasi ini ada berbagai macam , antara lain : ADD, ADC, INC. Operasi pengurangan merupakan operasi untuk mengurangkan 2 atau lebih operan. Sama seperti operasi penjumlahan, maka operasi pengurangan juga ada operasi pengurangan general (SUB), pengurangan dengan carry (SBB), dan pengurangan dengan 1 (DEC). Operasi perkalian mengalikan 2 buah operan atau lebih dengan menggunakan instruksi MUL. Untuk perkalian yang melibatkan floating point number, maka biasanya menggunakan co-processor hardware yang mendukung fungsi – fungsi floating point seperti FMUL. Sedangkan operasi pembagian melakukan pembagian antara 2 buah atau lebih operan menggunakan instruksi DIV.
Untuk melihat perubahan pada flag – flag registernya jika terjadi operasi aritmatika, maka dipergunakan bantuan program DEBUG seperti pada praktikum sebelumnya. Untuk men-debug sebuah program COM dengan nama cth.com menggunakan DEBUG, maka di command prompt DOS diketikkan perintah :

DEBUG cth.com
Maka secara otomatis DEBUG akan mulai melakukan eksekusi program COM di register yang bersangkutan. Menggunakan proses tracing maka dapat dilihat proses operasi aritmatika yang dijalankan akan mengubah register apa saja di komputer.





III. Langkah Langkah Percobaan
*      Alat dan Bahan
-          PC
-          DEBUG

*      Metode Percobaan
1.     buka notepad
2.     tulis snytax program assembly
3.     simpan filenya kemudian compile di cmd
4.     selanjutnya lingking menjadi file.com
5.     debug hasil lingking menggunakan debug dengan perintah pada cmd  DEBUG [ FILE.COM]
6.     trace tiap program assembly dan amati perubahan pada register – registernya

HASIL PERCOBAAN
A.   Operasi Penambahan
·         Snytax program
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~;
; PROGRAM : PLUS.ASM ;
; FUNGSI : MELIHAT PENAMBAHAN
; YANG DILAKUKAN
; OLEH BERBAGAI
; PERINTAH
;===============================;
      .Model      Small
      .Code
      ORG   100h
     
Proses :
      MOV   AH,20h
      MOV   AL,32
      ADD   AH,AL
      MOV   AX,5555h
      MOV   BX,0F123h
      ADD   AX,BX
      MOV   AX,2222h
      MOV   BX,8765h
      MOV   CX,AAAAh
      MOV   DX,0DDD0h
      ADD   CX,DX
      ADC   AX,BX
      INC   AL
      INT   20h
End         Proses
Analisa
§  Model small : digunakan untuk memberitahukan kepada assembler bentuk memory yang digunakan     oleh program kita.
§  Code : Tanda directive ini digunakan untuk memberitahukan kepada assembler bahwa kita akan mulai
menggunakan Code Segment-nya disini. menggunakan Code Segment-nya disini.
§  Org 100h : digunakan untuk memberitahukan assembler supaya program pada saat dijalankan(diload ke memory) ditaruh mulai pada offset ke 100h(256) byte.
§   MOV AH,20h = memindahkan angka 20 pada register AH
§  MOV AL,32 = memindahkan angka 32 pada register AL
§  ADD AH,AL = menambahkan nilai pada tujuan dan sumber hasilnya
 Di taruh pada tujuan.
§  MOV AX,5555h = memindahkan angka 5555h pada register AX carry =0
§  MOV BX,0F123h = memindahkan angka 0F123h pada register BX carry=0
§  ADD AX,BX = nilai AX; AX + BX = 4678, carry =1
§  MOV AX,2222h = memindahkan angka 2222h pada register AX,carry=0.
§  MOV BX,8765h = memindahkan angka 8765h pada register BX,carry=0
§  MOV CX,AAAAh = memindahakan angka AAAAh pada register CX,carry=0
§  MOV DX,0DDD0h = memindahkan angka 0DDD0h pada register DX, carry=0
§  ADD CX,DX =nilai CX; CX + DX = 887A, carry=1
§  ADC AX,BX = AX; AX + BX + CF = ACF1
§  INC AL = menambah nilai pada register AL dengan 1.
§  INT 20h= mengakhiri program dan kembali pada dos.


COMPILE yaitu mengubah file kode menjadi file objek.




§  CD ; ialah mengganti direktori aktif ke direktori lainnnya yang ditentukan dalam parameter.
§  PATH ; ialah menentukan dimana ms- dos harus mencari berkas=berkas yang dapat dieksekusi sebagi program.





LINKING yaitu mengubah file objek menjadi file binary.





LINKING MENGGUNAKAN DEBUG


§  D 0100 0121 ; digunakan untuk menampilkan isi memori dari yang terkecil sampai terbesar.
§  U 0100 0121 digunakan untuk menampilkan bahasa assembly
- 0100 = alamat relative
- B420 = code operasi atau bahasa mesin.
- MOV AH,20 = bahasa assembly.

§  R ; digunakan untuk melihat nilai pada semua register
§  Pada baris pertama dapat anda lihat register yang dinamakan general purpose [ AX,BX,CX,DX ].
Register SP yang digunakan pada operasi stack menunjukkan nilai FFFE [ akhir segment ].
§  Pada baris kedua dapat kita lihat register segment yaitu [ DS,ES,SS,CS ] menunjukkan nilai yang sama yaitu 13F0.
§  Pada baris kedua juga dapat kita lihat register IP yang bernilai 100h. Register IP menunjukkan bahwa kita sedang berada pada offset ke 100h.
§  Pada baris ketiga dapat anda lihat 13F0:0100, nilai ini menunjukkan pasangan dari CS:IP.setelah itu dapat kita lihat nilai B420 yang menunjukkan isi dari alamat 13F0 : 0100.
§  Setelah itu tekanlah 'T' untuk mengeksekusi intruksi yang terdapat pada alamat yang ditunjukkan CS:IP(MOV AH,20). Setelah anda menekan 't' maka akan ditampilkan hasil setelah intruksi "MOV AH,20".

§  Hasil trace terlihat  bahwa nilai AX berubah dari 0000 menjadi  2000 setelah mendapat perintah MOV AH,20.
§  Pada baris kedua telihat  nilai register IP = 0102 menandakan kita berada pada offset ke 102h.

§  AL,20 adalah perintah yang akan dieksekusi pada baris selanjutnnya.


§  Hasil trace terlihat bahwa nilai AX berubah dari 2000 menjadi 2000 setelah perintah MOV AL.20.
§  Pada baris kedua  terlihat nilai register IP = 0104 menandakan kita sedang berada pada offset ke 104h.
§  ADD AH,AL adalah perintah yang akan dieksekusi pada baris selanjutnya.


§  Hasil trace terlihat bahwa nilai register AX berubah dari 2020 menjadi 4020 setelah mendapat perintah ADD AH,AL
§  Pada baris kedua terlihat bahwa nilai register IP = 0106 menandakan kita sedang berada pada offset ke 106h.
§  AX,5555 adalah  perintah yang akan dieksekusi pada baris selanjutnya.
§  Hasil trace terlihat bahwa nilai register AX berubah 5555 setelah mendapat perintah MOV AX,5555.
§  Pada baris kedua terlihat register IP = 0109. Berapa pada offset 109h.
§  MOV BX,F123 adalah perintah yang akan dieksekusi selanjutnya.
§  Hasil trace terlihat bahwa nilai register BX dari 0000 berubah menjadi F123 setelah mendapat perintah MOV BX,F123.
§  ADD AX,BX adalah perintah yang akan di eksekusi selanjutnya.
§  Hasil trace terlihat bahwa nilai register AX berubah dari 5555 menjadi 4678 setelah mendapat perintah ADD AX,BX. Yaitu nilai AX + BX = AX.
§  Nilai IP berubah menjadi 010E.
§  MOV AX,2222 adalah perintah yang akan di eksekusi selanjutnya.
§  Hasil trace terlihat bahwa nilai register AX berubah menjadi 2222 setelah mendapat perintah  MOV AX,2222.
§  Nilai register IP berubah menjadi 0111.
§  MOV BX,8765 adalah perintah yang akan di eksekusi selanjutnya.
§  Hasil trace terlihat bahwa nilai register BX berubah dari F123 menjadi 8765 setelah mendapat perintah MOV BX,8765.
§  Alamat memori berubah menjadi IP = 0114.
§  MOV CX,AAAA adalah perintah yang akan di eksekusi selanjutnya.
 
§  Hasil trace terlihat bahwa nilai register CX berubah dari 0022 menjadi AAAA setelah mendapat perintah MOV CX,AAAA.
§  Alamat memori menjadi IP = 0117.
§  MOV DX,DDD0 adalah perintah yang akan dieksekusi selanjutnya.
§  Hasil trace terlihat bahwa nilai register DX berubah dari 0000 menjadi DDD0 setelah mendapat perintah MOV DX,DDD0.
§  Alamat memori berubah menjadi IP = 011A.
§  ADD CX,DX adalah perintah yang akan dieksekusi selanjutnya.
§  hasil trace terlihat bahwa nilai register CX berubah dari AAAA menjadi 887A  setelah mendapat perintah ADD CX,DX.
§  Alamat memori berubah menjadi IP = 011C.
§  ADC AX,BX adalah perintah yang akan dieksekusi selanjutnya.
§  Hasil trace terlihat bahwa nilai register AX berubah dari 2222 menjadi A988 setelah mendapat perintah ADC AX,BX.
§  Alamat memori dari ADC berubah menjadi IP = 011E.
§  INC AL adalah perintah yang akan dieksekusi selanjutnya.
§  Hasil trace terlihat bahwa nilai register AX berubah dari A988 menjadi A989 setelah mendapat penambahan 1 dari perintah INC AL.



B.    Operasi Pengurangan
Snytax program


;================================;
; PROGRAM : KURANG.ASM ;
; FUNGSI : MENGURANGKAN ANGKA
;================================;
      .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
      SUB   AX,Blo
      MOV   HslLO,AX
      MOV   AX,AHi
      SBB   AX,BHi
      MOV   HslHi,AX

      INT   20h
End   TData
Analisa
§  Model small ; Tanda directive yang digunakan untuk memberitahukan kepada assembler bentuk memory yang digunakan di program kita. Jika kita menggunakan ukuran kurang dari 64 kb.
§  Code ; digunakan untuk memberitahukan kepada assembler bahwa kita akan menggunakan code segmentnya disini.
§  Org 100h ; digunakan untuk memberitahukan kepada assembler supaya program pada saat dijalankan ditaruh mulai pada offset ke 100h atau 256 byte.
§  JMP ; digunakan untuk melompat menuju tempat yang ditunjukkan oleh perintah jump.
§  Equ ; digunakan untuk mendefinisikan suatu yang constan atau tetap.
§  Dengan perintah equ kita dapat mendefinisikan bahwa Alo = 0EFFF,AHi = 122,BLo = FFFF,dan BHi = 0FE.
§  Kita defenisikan suatu tempat untuk menyimpannya dengan nama ‘HS1Lo’ dan ‘HS1Hi’.
§  Tanda ‘?’ digunakan untuk menyatakan bahwa tempat yang kita pesan sebanyak 1 word (dw).
§  MOV        AX,ALo ; untuk memindahkan data Alo pada register AX.
§  SUB          AX,Blo ; Mengurangkan nilai AX dengan BLo. AX = F000.
§  MOV        HslLO,AX ; 122 EFFF
FE FFFF
---------- -
023 F000. Hasil word rendah disimpan pada Hs1Lo.
§  MOV AX,AHi ; untuk memindahkan data Ahi pada register AX.
§  SBB     AX,BHi ;Mengurangkan nilai AX dengan Bhi dengan carry. AX =023
§  MOV HslHi,AX ; hasil wor tinggi disimpan pada Hs1Hi.
§  Akhirnya kita akan mendapatkan hasil pengurangan yang disimpan pada pasangan Hs1Hi : Hs1Lo (0023F000).
§  INT 20h ;mengakhiri program dan kembali pada dos.

COMPILE : Mengubah file kode menjadi file objek.

LINKING : Mengubah file objek menjadi file binari.


Linking menggunakan debug


§  D 0100 011C ; digunakan untuk menampilkan isi memori dari yang terkecil sampai terbesar.
§  U 0100 011C digunakan untuk lmenampilkan bahasa assembly
0100 = alamat relative
EB05 = code operasi atau bahasa mesin.
JMP 0107 = bahasa assembly.

§  R ; digunakan untuk melihat nilai pada semua register
§  Pada baris pertama dapat anda lihat register yang dinamakan general purpose [ AX,BX,CX,DX ].
Register SP yang digunakan pada operasi stack menunjukkan nilai FFFE [ akhir segment ].
§  Pada baris kedua dapat kita lihat register segment yaitu [ DS,ES,SS,CS ] menunjukkan nilai yang sama yaitu 13F0.
§  Pada baris kedua juga dapat kita lihat register IP yang bernilai 100h. Register IP menunjukkan bahwa kita sedang berada pada offset ke 100h.
§  Pada baris ketiga dapat anda lihat 13F0:0100, nilai ini menunjukkan pasangan dari CS:IP.setelah itu dapat kita lihat nilai EB05 yang menunjukkan isi dari alamat 13F0 : 0100.
§  Setelah itu tekanlah 't' untuk mengeksekusi intruksi yang terdapat pada alamat yang ditunjukkan CS:IP(JMP,0107). Setelah anda menekan 't' maka akan ditampilkan hasil setelah intruksi "JMP, 0107"

§  Pada trace pertama terlihat bahwa nilai register belum berubah karena digunakan perintah JMP artinya disuruh lompat ke perintah selanjutnya.
§  MOV AX,EFFF adalah perintah yang akan dieksekusi selanjutnya.

§  Hasil trace terlihat bahwa nilai register AX berubah dari 0000 menjadi EFFF setelah mendapat perintah MOV AX,EFFF.
§  SUB AX,FFFF adalah  perintah yang akan dieksekusi selanjutnya.

§  Hasil trace terlihat bahwa nilai register AX berubah dari EFFF menjadi F000 setelah mendapat perintah SUB AX,FFFF.
§  MOV [ 0103] ,AX adalah perintah yang akan dieksekusi selanjutnya.
§  Nilai dari register tidak berubah hanya alamat memori yang berubah menjadi IP = 0111.
§  MOV AX,0122 adalah perintah yang akan dieksekusi selanjutnya.
§  Hasil trace terlihat bahwa nilai register dari AX berubah dari F000 menjadi 0122 setelah mendapat perintah MOV AX,0122.
§  SBB AX, 00FE adalah perintah yang akan dieksekusi selanjutnya.

§  Hasil trace terlihat bahwa nilai register AX berubah dari 0122 menjadi 0023 setelah mendapat perintah pengurangan yaitu SBB AX,00FE.
§  MOV [ 0105],AX adalah  alamat memori dari AX yaitu [0105].









C. Dekremen
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~;
; PROGRAM : DEC.ASM ;
; FUNGSI : MENCETAK KARAKTER ;
; "Z".."A" DENGAN ;
; INT 21h SERVIS 02 ;
;==========================;
      .Model Small
      .Code
      ORG   100h
     
Proses :
      MOV   AH,02h
      MOV   DL,'Z'
      MOV   CX,26
     
Ulang:
      INT   21h
      DEC   DL
      LOOP Ulang
      INT   20h
End Proses





Analisa
§  Model small ; Tanda directive yang digunakan untuk memberitahukan kepada assembler bentuk memory yang digunakan di program kita. Jika kita menggunakan ukuran kurang dari 64 kb.
§  Code ; digunakan untuk memberitahukan kepada assembler bahwa kita akan menggunakan code segmentnya disini.
§  Org 100h ; digunakan untuk memberitahukan kepada assembler supaya program pada saat dijalankan ditaruh mulai pada offset ke 100h atau 256 byte.
§  MOV AH,02h ; memindahkan data 02h pada register AH
§  MOV DL,'Z' ;memindahkan data z pada register DL
§  MOV CX,26 ; memindahkan data 26 pada register CX.
§  INT 21h ; mencetak karakter
§  DEC DL ; mengurangkan DL dengan 1.
§  LOOP Ulang; lompat ke ulang
§  INT 20h ;mengakhiri program dan kembali ke DOS.

COMPILE : mengubah file kode menjadi file objek.
LINKING : merubah file objek menjadi file binari



Linking menggunakan debug
§  D 0100 010E ; digunakan untuk menampilkan isi memori dari yang terkecil sampai terbesar.
§  U 0100 010E digunakan untuk lmenampilkan bahasa assembly
0100 = alamat relative
B402 = code operasi atau bahasa mesin.
MOV AH,02 = bahasa assembly.

§  R ; digunakan untuk melihat nilai pada semua register
§  Pada baris pertama dapat anda lihat register yang dinamakan general purpose [ AX,BX,CX,DX ].
Register SP yang digunakan pada operasi stack menunjukkan nilai FFFE [ akhir segment ].
§  Pada baris kedua dapat kita lihat register segment yaitu [ DS,ES,SS,CS ] menunjukkan nilai yang sama yaitu 13F0.
§  Pada baris kedua juga dapat kita lihat register IP yang bernilai 100h. Register IP menunjukkan bahwa kita sedang berada pada offset ke 100h.
§  Pada baris ketiga dapat anda lihat 13F0:0100, nilai ini menunjukkan pasangan dari CS:IP.setelah itu dapat kita lihat nilai B402 yang menunjukkan isi dari alamat 13F0 : 0100.
§  Setelah itu tekanlah 'T' untuk mengeksekusi intruksi yang terdapat pada alamat yang ditunjukkan CS:IP(MOV AH,02). Setelah anda menekan 't' maka akan ditampilkan hasil setelah intruksi "MOV AH,02"
§  Hasil trace terlihat bahwa nilai register AX berubah dari 0000 menjadi 0200 setelah mendapat perintah MOV AX,02.
§  Pada baris ketiga kita dapat melihat nilai B25A yang menunjukkan isi dari alamat 13F0 : 0102.
§  MOV DL,5A adalah perintah yang akan dieksekusi selanjutnya.

§  Hasil trace terlihat bahwa nilai register DX berubah dari 0000 menjadi 005A setelah mendapat perintah MOV DL,5A.
§  Pada baris ketiga kita dapat melihat nilainB91A00 yang menunjukan isi dari alamat 13F0 : 0104.
§  MOV CX,001A adalah perintah yang akan dieksekusi selanjutnya.

§  Hasil trace terlihat bahwa nilai dari register CX berubah dari 000F  menjadi 001A setelah mendapat perintah dari MOV CX,001A.
§  Alamat memori dari CX yaitu 0107.
§  INT 21 yaitu dos melakukan suatu operasi .yang akan di jalankan pada perintah selanjutnya.
§  Hasil tarce menunjukkan bahwa nilai CS berubah dari 13F0 menjadi 00A7 setalah mendapat perintah INT 21.







D. Perkalian
;================================;
; PROGRAM : KALI.ASM ;
; FUNGSI : MENGALIKAN BILANGAN;
; 16 BIT, HASIL ;
; PADA DX:AX ;
;================================;
      .Model Small
      .Code
      ORG 100h
     
TData :
      JMP   Proses ; Lompat ke Proses
      A     dw 01ABh
      B     dw 02CDh
      HslLo dw ?
      HslHi dw ?
     
Proses:
      MOV   AX,A
      MUL   B
      MOV   HslLo,AX
      MOV   HslHi,DX
      INT   20h
End TData
Analisa
§  Model small ; Tanda directive yang digunakan untuk memberitahukan kepada assembler bentuk memory yang digunakan di program kita. Jika kita menggunakan ukuran kurang dari 64 kb.
§  Code ; digunakan untuk memberitahukan kepada assembler bahwa kita akan menggunakan code segmentnya disini.
§  Org 100h ; digunakan untuk memberitahukan kepada assembler supaya program pada saat dijalankan ditaruh mulai pada offset ke 100h atau 256 byte.
§  JMP ; digunakan untuk melompat menuju tempat yang ditunjukkan oleh perintah jump.
§  DW ; mendefinisikan suatu data word.
§  Dengan perintah dw kita dapat endefinisikan bahwa A = 01AB, B = 02CD.
§  Kita definisikan suatu tempat penyimpanan dengan nama HS1Lo,HS1Hi.
§  Tanda ? digunakan untuk menyatakan bahwa tempat yang kita pesan sebanyak satu word (dw).
§  MOV AX,A ; memindahkan data A pada register AX.
§  Mul B ; mengalikan nilai AX dengan BX, hasilnya ditaruh pada register AX dan DX.
§  MOV Hs1Lo, AX ; memindahkan data AX untuk disimpan pada Hs1Lo. Data word rendah.
§  MOV Hs1Hi,DX ; memindahkan data DX untuk disimpan pada Hs1Hi. Data word tinggi
§  INT 20h ; mengakhiri program dan kembali ke DOS.
COMPILE : mengubah file kode menjadi file objek.
LINKING
Linking menggunakan debug
§  D 0100 011E ; digunakan untuk menampilkan isi memori dari yang terkecil sampai terbesar.
§  U 0100 011E digunakan untuk lmenampilkan bahasa assembly
0100 = alamat relative
EB09= code operasi atau bahasa mesin.
JMP 010B= bahasa assembly.
§  R ; digunakan untuk melihat nilai pada semua register
§  Pada baris pertama dapat anda lihat register yang dinamakan general purpose [ AX,BX,CX,DX ].
Register SP yang digunakan pada operasi stack menunjukkan nilai FFFE [ akhir segment ].
§  Pada baris kedua dapat kita lihat register segment yaitu [ DS,ES,SS,CS ] menunjukkan nilai yang sama yaitu 13F0.
§  Pada baris kedua juga dapat kita lihat register IP yang bernilai 100h. Register IP menunjukkan bahwa kita sedang berada pada offset ke 100h.
§  Pada baris ketiga dapat anda lihat 13F0:0100, nilai ini menunjukkan pasangan dari CS:IP.setelah itu dapat kita lihat nilai EB09 yang menunjukkan isi dari alamat 13F0 : 0100.
§  Setelah itu tekanlah 't' untuk mengeksekusi intruksi yang terdapat pada alamat yang ditunjukkan CS:IP(JMP,010B). Setelah anda menekan 't' maka akan ditampilkan hasil setelah intruksi "JMP, 010B"
§  Hasil trace tidak menunjukkan adanya perubahan pada registernya karena perintah JMP digunakan untuk melompat ke perintah berikutnya.
§  MOV  AX, [ 0103]  alamat memori dari AX  yaitu 0103 yang berisi nilai 01AB. Akan dieksekusi pada perintah selanjutnya.

§  Hasil trace terlihat bahwa nilai register dari AX, berubah dari 0000 menjadi 01AB setelah mendapat perintah MOV AX,[ 0103 ].
§  MUL WORD PTR [ 0105]. CODE SEGMENT = 0105=02CD yaitu perintah yang akan dieksekusi selanjutnya.

§  Hasil trace terlihat bahwa nilai register dari AX berubah dari 01AB menjadi ABEF dan nilai register DX berubah dari 0000 menjadi 0004 setelah mendapat perintah MUL WORD PTR [ 0105].
§  MOV [ 0107],AX adalah perintah yang akan dieksekusi selanjutnya.

§  Hasil trace tidah terjadi perubahan pada nilai register AX, karena alamat memori [0107] mempunyai data 0000.
§  MOV [0109],DX. CS ; 0109 = 0000. Adalah perintah yang akan dieksekusi selanjutnya.
§  Hasil trace tidak terjadi perubahan pad nilai register DX,karena alamat memori [ 0109] mempunyai data 0000.
§  INT 20 adalah mengakhiri sebuah program dan kembali pada dos.


E. Pembagian
;================================;
; PROGRAM : BAGI.ASM ;
; 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
      MOV   AX,A
      DIV   B
      MOV   Hsl,AX
      MOV   Sisa,DX
      INT   20h ; Kembali ke DOS
End   Tdata
Analisa
§  Model small ; Tanda directive yang digunakan untuk memberitahukan kepada assembler bentuk memory yang digunakan di program kita. Jika kita menggunakan ukuran kurang dari 64 kb.
§  Code ; digunakan untuk memberitahukan kepada assembler bahwa kita akan menggunakan code segmentnya disini.
§  Org 100h ; digunakan untuk memberitahukan kepada assembler supaya program pada saat dijalankan ditaruh mulai pada offset ke 100h atau 256 byte.
§  JMP ; digunakan untuk melompat menuju tempat yang ditunjukkan oleh perintah jump.
§  DW ; mendefinisikan suatu data word.
§  Dengan perintah dw kita dapat mendefinisikan bahwa A = 01EF, B = 2.
§  Kita definisikan suatu tempat penyimpanan dengan nama HS1Lo,HS1Hi.
§  Tanda ? digunakan untuk menyatakan bahwa tempat yang kita pesan sebanyak satu word (dw).
§  SUB DX,DX ; nilai DX  kurang DX hasilnya akan nol.
§  MOV AX,A ; memindahkan data A pada register AX

§  DIV B ;AX / B

§  MOV Hsl,AX; AX  bernilai 00F7 sehingga Hsl=00F7  

§  MOV Sisa,DX; DX berisi 0001 sehingga Sisa=0001

§  INT 20h  ; mengakhiri program dan kembali pada DOS.








COMPILE


LINKING


LINKING DENGAN MENGGUNAKAN DEBUG


§  D 0100 0120 ; digunakan untuk menampilkan isi memori dari yang terkecil sampai terbesar.
§  U 0100 0120 digunakan untuk lmenampilkan bahasa assembly
0100 = alamat relative
EB09= code operasi atau bahasa mesin.
JMP 010B= bahasa assembly.
§  R ; digunakan untuk melihat nilai pada semua register
§  Pada baris pertama dapat anda lihat register yang dinamakan general purpose [ AX,BX,CX,DX ].
Register SP yang digunakan pada operasi stack menunjukkan nilai FFFE [ akhir segment ].
§  Pada baris kedua dapat kita lihat register segment yaitu [ DS,ES,SS,CS ] menunjukkan nilai yang sama yaitu 13F0.
§  Pada baris kedua juga dapat kita lihat register IP yang bernilai 100h. Register IP menunjukkan bahwa kita sedang berada pada offset ke 100h.
§  Pada baris ketiga dapat anda lihat 13F0:0100, nilai ini menunjukkan pasangan dari CS:IP.setelah itu dapat kita lihat nilai EB09 yang menunjukkan isi dari alamat 13F0 : 0100.
§  Setelah itu tekanlah 't' untuk mengeksekusi intruksi yang terdapat pada alamat yang ditunjukkan CS:IP(JMP,010B). Setelah anda menekan 't' maka akan ditampilkan hasil setelah intruksi "JMP, 010B"
§  Hasil trace terlihat bahwa tidak ada perubahan pada register karena perintah JMP digunakan untuk melompat ke perintah selanjutnya.
§  SUB DX,DX adalah perintah yang akan dieksekusi berikutnya.

§  Hasil trace terlihat bahwa nilai register DX masih tetap 0000 setelah mendapat perintah SUB DX,DX.setiap pengurangan dilakukan dengan dirinya sendiri maka akan menghasilkan nilai 0.
§  MOV AX,[ 0103 ],CS ; 0103 = 01EF. Adalah perintah yang akan dieksekusi selanjutnya.

§  Hasil trace terlihat bahwa nilai register AX berubah dari 0000 menjadi 01EF. Setelah mendapat perintah MOV AX, [ 0103], CS ; 0103 = 01EF.
§  DIV WORD PTR [ 0105] adalah perintah yang akan dieksekusi selanjutnya.
§  Hasil trace terlihat bahwa nilai dari register AX berubah dari 01EF menjadi 00F7, dan nilai register dari DX berubah dari 0000 menjadi 0001 setelah mendapat perintah DIV WORD PTR [ 0105 ].
§  MOV [ 0107 ],AX      CS ; 0107 = 0000. Adalah perintah yang akan dieksekusi selanjutnya.

§  Hasil trace terlihat bahwa nilai register tidak mengalami perubahan karena nilai dari alamat memori [ 0107 ] adalah 0000.
§  MOV [ 0109 ],DX      CS; 0109 = 0000 adalah perintah yang akan dieksekusi selanjutnya.

§  Hasil trace terlihat bahwa nilai register tidak ada perubahan karena nilai dari alamat memori [ 0109 ] adalah 0000.
§  INT 20 adalah untuk mengakhiri sebuah program dan kembali pada dos.


















KESIMPULAN
v  . Operasi aritmatika dipergunakan untuk melakukan kalkulasi berbagai proses yang nantinya akan dilakukan oleh mikroprosesor, baik berhubungan dengan perhitungan alamat, data, maupun keperluan lainnya.
v  Operator aritmatika dibagi menjadi empat macam yaitu ; operator perjumlahan, operator pengurangan, operator perkalian,operator pembagian.
v  Operator penjumlah yaitu ; ADD, ADC,INC.
v  Operator pengurangan yaitu ; SUB,SBB,DEC.
v  Operator perkalian yaitu ; MUL.
v  Operator pembagian yaitu ; DIV.
v  Compile mengubah file kode menjadi file objek.
v  Linking mengubah file objek menjadi file binary.
v  Perintah JMP digunakan untuk melompat ke perintah selanjutnya.