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