Tuesday, 7 January 2014

TUJUAN
Memahami bagaimana penggunaan variable, konstanta dan stack dalam bahasa mesin

Kegiatan 1
1.      Ketiklah listing dibawah ini pada emu8086.
LISTING 1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
ORG 100h

MOV AL,a0
ADD AL,a1
ADD AL,a2
ADD AL,a3
ADD AL,a4

RET

a0 DB 25
a1 DB 15
a2 DB 32
a3 DB 27
a4 DW 448

2. Ketika program diatas dijalankan, akan terjadi error. Perbaiki program diatas, tanpa merubah nilai variable!
Pada baris ke 7, instruksi ADD AL, a4 diganti menjadi ADD AX, a4.

Karena AL tidak bisa menjalankan instruksi DW.

3.      Edit listing 1 dengan:
-          Tambahkan kurung siku pada instruksi baris 3 – 6,
Contoh             ADD AL,a0  à  ADD AL,a[0]
-          Ganti instruksi baris 11 – 14 menjadi
a DB 25, 15, 32, 27

4.      Jelaskan tentang program diatas
-          Jelaskan alasan penyebab terjadinya error pada program diaatas?
Penyebab terjadinya error karena instruksi baris ke-7 memakai register AL yang berukuran 8bit untuk menampung nilai variabel a4 yang memiliki lebar 16bit. Solusinya adalah dengan mengganti register AL menjadi AX.

-          Dimana alamat variable a1, a2, a3, a4 dan a5 disimpan?
a1 disimpan pada 0118,
a2 disimpan pada 0119,
a3 disimpan pada 011A,
a4 disimpan pada 011B.

-          Jika pada baris ke 8 ditambahkan instruksi berikut, perubahan apa yang terjadi? Apa penyebabnya?
LEA  BX, a0  atau      MOV BX, OFFSET a0
Instruksi LEA sebagai pengganti operator offset yang fungsinya untuk mendapatkan offset address suatu variabel. Sehingga apabila pada baris ke-8 diisi instruksi LEA  BX, a0 maka BX akan terisi offset address variabel a0.

-          Apa perbedaan listing pertama dan listing yang sudah diedit?
Pada listing pertama, setiap variabel hanya menyimpan satu nilai saja. Sedangkan pada listing yang sudah diedit dengan penambahan tanda “[ ]” untuk mengakses memori dari suatu array.

-          Apa yang terjadi jika instruksi baris 11-15 disisipkan sebelum baris ke 3?
Apabila instruksi baris 11-15 disisipkan sebelum baris 3 maka saat di-run program akan berjalan secara terus-menerus.

-          Apa manfaat penggunaan variable?
Maanfaat penggunaan variabel untuk lebih mempermudah programer dalam memrogram, karena data pada variabel bisa diganti dengan cepat dengan mengubah nilai variabel saat inisialisasi. Kita juga tidak perlu mengingat alamat data tersebut apabila menggunakan variabel.

Kegiatan 2
1.      Ketik Listing dibawah ini
LISTING 2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
ORG 100h

a0 DW  14A0h
a1 DW  0201h
a2 DW  1506h
a3 DW  0201h
a4 DW  1606h
a5 DW  0201h
a6 DW  1706h
a7 DW  0301h
a8 DW  1806h
a9 DW  0C301h

a12 DB 25
a13 DB 15
a14 DB 32
a15 DB 27
a16 DW 448

2.      Jelaskan tentang program diatas
-          Apa perbedaan Listing 1 dengan listing 2?
Pada listing program 1 ditulis dengan menggunakan variabel-variabel untuk mempermudah pengeditan, sedangkan listing program 2 dengan cara pemberian nilai secara langsung di memori.

-          Kenapa listing 2 dapat berfungsi seperti listing 1? Jelaskan!
Karena pada listing 2 nilai-nilai pada listing 1 ditulis secara langsung menggunakan directive DB dan DW, sehingga prosesor mengira  kedua program ini sama.

-          Bagaimana variable dengan tipe WORD disimpan dimemori? Prinsip apa yang digunakan?
Variabel WORD memiliki lebar memori 16 bit yang dibagi menjadi low address dan high address pada register, dengan prinsip low address disimpan pada alamat yang lebih rendah dari high address atau sering disebut little endian.


Kegiatan 3
1.      Ketiklah listing dibawah ini
LISTING 3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
ORG 100h
MOV AX, 0448 
PUSH AX
MOV AX, 0027
PUSH AX
MOV AX, 0032
PUSH AX
MOV AX, 0015
PUSH AX

MOV AX, 0025
POP BX
ADD AX,BX
POP BX
ADD AX,BX
POP BX
ADD AX,BX
POP BX
ADD AX,BX

RET
2.      Jelaskan tentang apa program diatas
o   Apakah fungsi dari program diatas?
Program diatas berfungsi untuk menyimpan nilai ke memori secara sementara yang selanjutnya akan dikeluarkan lagi menggunakan instruksi push dan pop.
  
o   Pada alamat berapa isi register AX dan BX yang dipush ke stack disimpan? Illustrasikan bentuk penyimpanan dengan gambar!
Alamat dari isi suatu stack dapat dilihat dari alamat SS:SP dimana program ini isi stacknya berada di 0700:FFF6-0700:FFFE.      

o   Kenapa setiap instruksi PUSH dijalankan nilai register SP dikurangi 2?
Karena PUSH berfungsi untuk meletakkan nilai pertama pada batas atas alamat, apabila dikasih instruksi lagi maka akan diletakkan sebelum nilai yang pertama tadi.

o   Kenapa setiap instruksi POP dijalankan nilai register SP ditambah 2? Padahal instruksi POP digunakan untuk memasukkan data ke dalam Stack
Karena cara kerja POP dengan mengeluarkan nilai terakhir dari tumpukan nilai-nilai yang sudah disimpan yang akan terlihat lewat register SP.


Kesimpulan
·         Variabel mempermudahkan kita dalam mengedit program
·         Array merupakan suatu rantai variabel
·         Stack adalah suatu area di memori yang menyimpan data sementara

0 comments :

Post a Comment