Laporan Praktikum Aritmatika [PDF]

  • 0 0 0
  • Suka dengan makalah ini dan mengunduhnya? Anda bisa menerbitkan file PDF Anda sendiri secara online secara gratis dalam beberapa menit saja! Sign Up
File loading please wait...
Citation preview

LAPORAN PRAKTIKUM MIKROPROSESOR DAN BAHASA RAKITAN “OPERASI ARITMATIKA”



Oleh :



Anjas Arfansyah Nim



: 1757301027



Kelas



: TI 1.1



Program Studi



: Teknik Informatika



Dosen Pembimbing



: Azhar, S.T, M.T



KEMENTRIAN RISET TEKNOLOGI DAN KEMENTRIAN TINGGI POLITEKNIK NE GERI LHOKSEUMAWE 2017



TUJUAN 1. Mahasiswa memahami dan mengerti tentang berbagai instruksi aritmatika



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 2 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.



A. HASIL PERCOBAAN a) Penjumlahan Source Code : .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



1. Tuliskan source code di atas dengan menggunakan perintah : Nama file boleh diisikan sesuai dengan keinginan. 2. Compile program dengan perintah :



3. Kemudian lakukan proses linking dengan perintah :



4. Setelah itu, lakukan perintah dir untuk mengetahui berapa alamat memori. Setelah itu jalankan dengan debug.



5. Lakukan perintah U untuk melihat isi dari alamat memori.



6. Jalankan perintah R untuk melihat register. Kemudian jalankan perintah T (trace) untuk menjalankan perintah baris perbaris. Setelah perintah T dijalankan, maka perintah pertama akan dijalankan, yaitu mengisi register AH, dengan nilai 20h.



7. Hasil trace pertama terlihat seperti gambar dibawah. Kemudian jalankan trace kedua, maka perintah kedua akan dijalankan, yaitu mengisi register AL dengan nilai 20h.



8. Setelah trace di jalankan, maka register AL akan terisi dengan nilai 20h. Ketika kita melakukan trace yang ketiga, maka yang akan dijalankan adalah perintah ADD, yaitu perintah untuk melakukan penjumlahan. Penjumlahan yang dilakukan adalah antara register AH, dan AL. Hasilnya dapat di lihat di register AX(AH).



9. Di baris perintah selanjutnya, yang akan di jalankan adalah perintah MOV AX, 5555. Yaitu, mengisi register AX dengan nilai 5555h. Setelah dilakukan trace, maka register AX terisi nilai 5555h.



10. Kemudian di perintah selanjutnya terdapat perintah MOV BX, F123. Jika dilakukan trace, maka perintah tersebut akan dijalankan dan register BX akan terisi nilai F123h.



11. Diperintah selanjutnya terdapat perintah ADD AX, BX. Yaitu menjumlahkan nilai register AX dengan BX. Hasilnya akan diletakkan pada register AX. Diregister AX terdapat 1 carry yang tersimpan.



12. Diperintah selanjutnya terdapat perintah MOV AX, 2222. Ketika di jalankan trace, maka register AX akan terisi dengan nilai 2222h.



13. Diperintah selanjutnya terdapat perintah MOV BX, 8765. Ketika di jalankan trace, maka register BX akan terisi dengan nilai 8765h.



14. Perintah yang akan dijalankan selanjutnya adalah MOV CX, AAAA. Ketika di jalankan trace, maka register BX akan terisi dengan nilai AAAAh.



15. Perintah yang akan dijalankan selanjutnya adalah MOV DX, DDD0. Ketika di jalankan trace, maka register BX akan terisi dengan nilai DDD0h.



16. Perintah yang akan dijalankan selanjutnya adalah ADD CX, DX. Ketika di jalankan trace, maka hasil penjumlahan akan diletakkan di register CX. Di trace selanjutnya terdapat perintah ADC AX, BX. Yaitu melakukan penjumlahan di ikuti dengan penjumlahan carry yang terdapat di kedua register. Hasilnya akan di letakkan pada register AX. Kebetulan, di register AX terdapat 1 carry. Hasil penjumlahan seharusnya adalah A987h, karena terdapat carry diperintah selanjutnya, maka hasil menjadi A988h.



17. Perintah selanjutnya adalah INC AL, yaitu menaikkan nilai register AL 1 heksa atau menambahkan nilai register AL dengan 1 heksa. Setelah muncul perintah INT 20, itu menandakan bahwa kita berada pada akhir program. Dan berarti, program telah selesai dijalankan.



b) Pengurangan Source Code : .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 HslLi,AX INT 20h End Tdata



1. Buatlah source code di atas dengan perintah edit, kemudian compile dengan perintah tasm, dan linking dengan perintah tlink/t.



2. Lakukan perintah dir untuk mengetahui besarnya file, agar kita mengetahui berapa alamat memori yang digunakan. Rumusnya adalah : besarnya file – 1, kemudian konversi ke heksa.



3. Kemudian jalankan debug, agar kita bisa melihat jalannya perintah baris perbaris dengan perintah trace. Setelah debug, lakukan perintah U 0100 011C untuk melihat memori yang kita gunakan. Lakukan perintah R untuk melihat perintah pertama, yatu JMP 0107. JMP merupakan perintah untuk melompat ke tempat yang kita tunjukkan. Dalam alamat 0107 terdapat perintah MOV AX, EFFF.



4. Perintah selanjutnya adalah SUB AX, FFFF. Yaitu mengurangkan nilai AX dengan FFFF. Hasilnya akan diletakkan pada register AX. Dari hasil pengurangan terdapat carry sebanyak -1. Namun carry tidak tercetak dalam program.



5. Perintah selanjutnya yaitu MOV CS:[0103], AX. Yaitu mengisi variabel [0103] (HslLo) dengan nilai yang ada di AX. Kemudian baris perintah selanjutnya MOV AX, 0122. Yaitu mengisi nilai AX dengan nilai 0122h.



6. Perintah selanjutnya yaitu SBB AX, 00FE, mengurangi nilai AX dengan 00Feh dan carry. Hasilnya akan diletakkan di register AX. Hasil pengurangan adalah 0024h, karena di register AX terdapat carry -1, maka carry ikut di kurangkan dalam hasil, sehingga hasil menjadi 0023. Perintah selanjutnya yaitu MOV CS:[0105], AX. Yaitu mengisi variabel [0105] atau HslLi. Setelah muncul INT 20, tandanya program telah selesai dijalankan.



c) Decremen Source Code : .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



1. Buatlah source code di atas dengan perintah edit, kemudian compile dengan perintah tasm, dan linking dengan perintah tlink/t. 2. Lakukan perintah dir untuk mengetahui besarnya file, agar kita mengetahui berapa alamat memori yang digunakan. Rumusnya adalah : besarnya file – 1, kemudian konversi ke heksa.



3. Kemudian jalankan debug, agar kita bisa melihat jalannya perintah baris perbaris dengan perintah trace. Setelah debug, lakukan perintah U 0100 010E untuk melihat memori yang kita gunakan. Lakukan perintah R untuk melihat perintah pertama, yatu MOV AH, 02. Yaitu mengisi register AH dengan nilai 02h. Dan merupakan nilai service untuk mencetak huruf.



4. Kemudian perintah selanjutnya adalah MOV DL, 5A. Yaitu mengisi nilai DL 5A. Register DL berisi karakter ‘Z’ dengan kode ASCII. Perintah MOV CX, 001A, yaitu mengisi register CX dengan nilai 001A, dan menerangkan banyaknya pengulangan yang akan dilakukan. INT 21 akan mencetak karakter.



5. Kemudian perintah selanjutnya adalah DEC DL, yaitu menurunkan 1 nilai register DL, kemudian LOOPW 0107 yaitu mengulangi perintah ke alamat 0107 sebanyak jumlah register CX. Kemudian INT 21, mencetak karakter dari register DL. Hal ini terus dilakukan sampai nilai register CX menjadi 0.



6. Ketika nilai register CX menjadi 0, maka looping berakhir dengan ditandai dengan munculnya INT 20 yang menandai bahwa program telah selesai dilaksanakan dan akan berakhir.



d) Perkalian Source Code : .Model Small .Code ORG 100h TData :



Proses:



End



JMP Proses ; Lompat ke Proses A dw 01ABh B dw 02CDh HslLo dw ? HslHi dw ? MOV MUL MOV MOV INT Tdata



AX,A B HslLo,AX HslHi,DX 20h



1. Buatlah source code di atas dengan perintah edit, kemudian compile dengan perintah tasm, dan linking dengan perintah tlink/t. 2. Lakukan perintah dir untuk mengetahui besarnya file, agar kita mengetahui berapa alamat memori yang digunakan. Rumusnya adalah : besarnya file – 1, kemudian konversi ke heksa.



3. Kemudian jalankan debug, agar kita bisa melihat jalannya perintah baris perbaris dengan perintah trace. Setelah debug, lakukan perintah U 0100 011E untuk melihat memori yang kita gunakan. Lakukan perintah R untuk melihat perintah pertama, yatu JMP 010B. Yaitu melompat ke alamat memori 010B. Yaitu perintah MOV AX, CS:[0103]. Mengisi register AX dengan nilai yang ada di alamat 0103, yaitu 01ABh.



4. Kemudian perintah selanjutnya adalah MUL WORD PTR CS:[0105]. Yaitu mengalikan isi register AX dengan nilai variabel B, yaitu 02CDh. Hasilnya disimpan di register AX dan DX. Kemudian hasil di register AX dimasukkan ke dalam variabel HslLo dengan perintah MOV CS: [0107], AX. Perintah selanjutnya MOV CS:[0109], DX, yaitu mengisi nilai variabel di alamat 0109(HslLi) dengan nilai yang ada di register DX. INT 20 menandai program telah selesai di jalankan.



e) Pembagian Source Code : .Model Small .Code ORG 100h TData :



Proses:



End



JMP Proses ; Lompat ke Proses A dw 01EFh B dw 2 Hsl dw ? Sisa dw ? SUB DX,DX MOV AX,A DIV B MOV Hsl,AX MOV Sisa,DX INT 20h ; Kembali ke DOS Tdata



1. Buatlah source code di atas dengan perintah edit, kemudian compile dengan perintah tasm, dan linking dengan perintah tlink/t. 2. Lakukan perintah dir untuk mengetahui besarnya file, agar kita mengetahui berapa alamat memori yang digunakan. Rumusnya adalah : besarnya file – 1, kemudian konversi ke heksa.



3. Kemudian jalankan debug, agar kita bisa melihat jalannya perintah baris perbaris dengan perintah trace. Setelah debug, lakukan perintah U 0100 0120 untuk melihat memori yang kita gunakan. Lakukan perintah R untuk melihat perintah pertama, yatu JMP 010B. Yaitu melompat ke alamat memori 010B. Yaitu perintah SUB DX, DX. Perintah ini dilaksanakan agar nilai dari register DX adalah 0.



4. Kemudian mengisi register AX dengan nilai yang ada di variabel A;CS: [0103] dengan nilai 01EFh, dengan perintah MOV AX, CS:[0103]. Kemudian melakukan pembagian nilai register AX dengan nilai yang ada di variabel B yang bernilai 2. Kemudian hasilnya disimpan di register AX. Dan sisanya berada di register DX.



5. Kemudian perintah selanjutnya adalah MOV CS:[0107], AX, yaitu mengisi nilai variabel Hsl yang berada di alamat 0107 dengan nilai dari register AX. Kemudian MOV CS:[0109], DX. Yaitu mengisi nilai variabel Sisa yang berada di alamat 0109 dengan nilai register DX. INT 20 menyatakan program telah selesai di jalankan.



B. ANALISIS Dalam pemrograman bahasa assembly, kita dapat harus memahami dulu apa maksud dari syntax syntax yang kita buat, fungsi demi fungsi yang kita gunakan, harus kita ketahui terlebih dahulu fungsinya. Ini bertujuan agar kita lebih mudah mengkombinasikan beberapa fungsi untuk membuat program yang kompleks. Di atas telah kita lakukan beberapa percobaan yang kita jalankan baris perbaris perintah. Dari percobaan di atas kita juga harus bisa mengamati dimana letak hasil eksekusi program, apa yang dijalankan dan apa fungsi tiap tiap perintah dan perubahan perubahan yang terjadi. Beberapa fungsi yang kita gunakan memiliki maksud dan gunanya masing-masing 1. .Model Small Tanda directive ini digunakan untuk memberitahukan kepada assembler bentuk memory yang digunakan oleh program kita. 2. .Code Tanda directive ini digunakan untuk memberitahukan kepada assembler bahwa kita akan mulai menggunakan Code Segment-nya disini. Code segment ini digunakan untuk menyimpan program yang nantinya akan dijalankan. 3. ORG 100h Pada program COM perintah ini akan selalu digunakan. Perintah ini digunakan untuk memberitahukan assembler supaya program pada saat dijalankan(diload ke memory) ditaruh mulai pada offset ke 100h(256) byte. Dapat dikatakan juga bahwa kita menyediakan 100h byte kosong pada saat program dijalankan. 100h byte kosong ini nantinya akan ditempati oleh



PSP(Program Segment Prefix) dari program tersebut. PSP ini digunakan oleh DOS untuk mengontrol jalannya program tersebut. 4. JMP Perintah JMP(JUMP) ini digunakan untuk melompat menuju tempat yang ditunjukkan oleh perintah JUMP. Adapun syntaxnya adalah: JMP Tujuan 5. INT 20h Berfungsi untuk mengakhiri program dan menyerahkan kendali sepenuhnya kepada Dos. 6. DW Berfungsi untuk mendefinisikan suatu data word. 7. MOV Perintah MOV digunakan untuk mengcopy nilai atau angka menuju suatu register,variabel atau memory. 8. ADD ADD digunakan untuk perintah penjumlahan. 9. ADC ADC ini Tujuan tempat menampung hasil pertambahan Tujuan dan Asal ditambah lagi dengan carry. 10. INC Perintah INC(Increment) digunakan khusus untuk pertambahan dengan 1. Perintah INC hanya menggunakan 1 byte memory, sedangkan perintah ADD dan ADC menggunakan 3 byte. 11. SUB Perintah SUB akan mengurangkan nilai pada Tujuan dengan Asal. 12. SBB Pengurangan diikuti dengan carry. 13. MUL MUL perkalian 14. DIV Operasi pada pembagian pada dasarnya sama dengan perkalian. Untuk operasi pembagian digunakan perintah DIV.



~ SELESAI ~