MEMORY dan SEGMENTASI

advertisement
MEMORY dan SEGMENTASI
Mikroprosesor n bit berarti mikroprosesor tersebut dapat melakukan operasi
metematik (operasi logika) yang melibatkan maksimum n bit. Contoh: 8086
adalah mikroprosesor 16 bit, artinya dalam satu waktu dapat mengakses data
sebesar 16 bit (1 WORD), 80386 adalah mikroprosesor 32 bit artinya dalam satu
waktu dapat mengakses data sebesar 32 bit (1 DOUBLEWORD).
Jalur alamat 8086 adalah 20 bit, ini berarti alamat yang dapat diakses adalah 220
= 1048576 alamat (mulai dari alamat 0h sampai FFFFFh).
8086 adalah mikroprosesor 16 bit berarti register-nya (register adalah variable
untuk perangkat keras) paling besar berukuran 16 bit (1 WORD). Karenannya
untuk mengakses alamat fisik sebanyak FFFFFh tidak dapat digunakan 1
register alamat.
Untuk mengatasi kendala tersebut, suatu alamat fisik dipresentasikan oleh 2
register berukuran WORD, yang biasa disebut SEGMENT dan OFFSET.
Pengalamatan memori seperti ini disebut segmentasi. Dengan segmentasi
pengalsmatan, memory dapat digambarkan menjadi suatu array dua dimensi.
Antara segment dan offset keduanya saling independent.
Sebuah alamat fisik (0-FFFFFh) dapat dialamatkan menggunakan Segment dan
Offset dengan cara:
kalikan segment dengan 16 (= 10h = 10000)
tambahkan dengan offset, maka didapatkan alamat fisik
contoh: FFE23 jika ditulis dalam SEMENT:OFFSET adalah FFE2:0003 atau
FFE0:0023 atau FF00:0E23 atau F000:FE23 atau FFE1:0013 atau yang lainnya
asalkan memenuhi syarat diatas
(SEGMENT*10h + OFFSET = alamat fisik)
Mikroprosesor yang ada saat ini (lebih tinggi dari 80386) adalah mikroprosesor
32 bit. Berarti register mikroprosesor x86 berukuran 32 bit, yang biasanya dibagi
dalam lowbyte dan highbyte.
Stack Memory
Stack atau biasa disebut stack register adalah bagian yang amat penting bagi
semua mikroprosessor.
Stack
menjadi
penyimpanan
data
secara
sementara
(temporary)
dan
penyimpanan alamat dari procedure atau subrutin.
Dalam 8086 ukuran stack adalah word ( 2 byte = 16 bit).
Ada dua stack register yaitu :
-
BP (Base Pointer)
-
SP (Stack Pointer)
Stack memory menggunakan sistem LIFO (Last In First Out) artinya data yang
kita simpan terakhir adalah data yang paling pertama akan kita dapatkan.
Perintah yang terkait langsung (dengan stack pointer) ini adalah PUSH (untuk
menyimpan data) dan POP ( untuk mengakses data). Jadi data yang pertama diPUSH akan menjadi data yang terakhir di-POP, dan begitu sebaliknya.
Instruksi PUSH digunakan untuk menyimpan suatu data ke Stack.
Contoh: 'PUSH AX'
fungsinya "ambil data dari ujung stack dan masukan nilainya ke AX'
Perlu diingat bahawa kita tidak dapat mengintruksikan 'PUSH AL' atau 'PUSH
BL' karena AL dan BL besarnya 1 byte (bukan 1 word).
Salah satu guna stack adalah untuk men-save (menyimpan) suatu register
secara sementara, misalnya:
PUSH AX
IN AL, DX
; AX disimpan dalam stack
; baca port DX dan masukkan nilainya ke AL (disini AX berubah)
MOV BX, Ax
POP AX
; Simpan hasil pembacaan ke BX
; kembalikan nilai AX
Data yang dapat kita simpan ke stack adalah Register 16 bit, Flag dan alamat
memory tertentu.
Contoh: PUSH DX, PUSH (push flag), POP [2345h]
Alamat memory yang digunakan untuk alokasi stack adalah di alamat SS:SP
(Stack Segment:Stack pointer)
Setiap intruksi PUSH dikerjakan: alamat SS:PP diisikan data yang di-PUSH ke
dalam register, flag atau memory (tergantung instruksi), otomatis SP ditambah 2.
Perubahan SP sebanyak 2 dikarenakan jenis data yang disimpan dalam stack
adalah word (2 byte).
Download