B A B Iv
B A B Iv
Tujuan Instruksional
Dalam bab ini akan dijelaskan mengenai tujuan dan langkah-langkah konversi
alamat logik menjadi alamat fisik, pengertian, fungsi dan jenis-jenis
register, antara lain general purpose register, dan register status serta
penjelasan singkat mengenai pengelolaan memori.
Contoh :
Diketahui : Nilai alamat logika adalah 0220:1234
Ditanyakan : Berapa nilai alamat fisiknya ?
J a w a b :
Nilai segment : 0220
Geser satu digit menjadi : 02200
Nilai offset : 1234
02200
1234
------- +
03434
Untuk nilai binary, alamat segment harus diubah menjadi binary, lalu
geserlah nilai tersebut ke kiri sebanyak empat bit, artinya akan timbul
empat binary digit 0 berturut-turut di sebelah kanan. Kemudian nilai
offset juga diubah ke dalam binary dan tambahkanlah hasilnya ke nilai
offset yang telah digeser tadi. Untuk mempermudah dalam membaca,
kembalikan nilai akhir dalam binary tersebut ke dalam notasi heksadesimal
Contoh :
Diketahui : Nilai alamat logika adalah 0220:1234
Ditanyakan : Berapa nilai alamat fisiknya ?
J a w a b :
Nilai segment : 0220
Nilai binary-nya menjadi : 0000 0010 0010 0000
Geser 4 bit ke kiri menjadi : 0000 0010 0010 0000 0000
Nilai offset : 1234
Nilai binary-nya menjadi : 0001 0010 0011 0100
Tambahkan :
0000 0010 0010 0000 0000
0001 0010 0011 0100
------------------------------------ +
0000 0011 0100 0011 0100
PENGERTIAN REGISTER
Sebuah register adalah sebuah tempat penampungan sementara untuk data-
data yng akan diolah oleh prosesor, dan dibentuk oleh 16 titik elektronis
di dalam chip mikroprosessor itu sendiri. Dengan adanya tempat-tempat
penampungan data sementara ini, proses pengolahan akan bisa dilakukan
secara jauh lebih cepat dibandingkan apabila data-data tersebut harus
diambil langsung dari lokasi-lokasi memori. Register-registe tersebut
sebagai register internal dan terdiri dari empat belas register dan
keseluruhannya dapat dibagi dalam beberapa jenis, yaitu :
Register segment
Terdiri dari 4 register, yaitu code segment, data segment, stack segment,
dan extra segment. Segment adalah bagian dari ruang memori yang berkapa-
sitas 64 kilobyte (65536 byte) dan digunakan secara spesifik untuk
menempatkan jenis-jenis data tertentu. Misalnya code segment digunakan
oleh program dan instruksi-instruksi (code), data segment dialokasikan
untuk data-data, stack segment dipakai untuk menyediakan ruang untuk
stack, yang berfungsi untuk penyimpanan data dan alamat sementara pada
saat program utama sedang mengerjakan program percabangan (subroutine,
prosedur, dan sebagainya) dan extra segment sebagaimana halnya data
segment juga dipergunakan sebagai penempatan data-data.
Register data
Register ada adalah register yang mengandung informasi yang akan, sedang
atau telah diolah oleh komputer. Pada 8088 register ini diwujudkan oleh
AX, BX, CX dan BX (sebagai general purpose register), sehubungan dengan
fungsinya yang selain menangani tugas-tugas khusus, juga bisa dimanfaat-
kan untuk membantu proses-proses pengolahand data didalam internal mikro-
prosessor.
Register pointer
Register index
Register jenis pointer dan register index merupakan register-register
yang memuat alamat offset dari segment-segment tertentu, yang terdiri
dari stack pointer (SP) dan base pointer (BP) yang digunakan sebagai
pemegang nilai offset dari stack segment, sedangkan source index (SI)
dan destination index (DI) berisi nilai offset dari data segment.
Instruction pointer (IP) merupakan pemegang nilai offset dari code
segment dan fungsinya mirip dengan program counter (PC) pada prosesor-
prosesor 8 bit. Hanya bedanya, program counter langsung mengalamati
instruksi-instruksi yang ada dimemori dengan nilainya sendiri, IP harus
bekerja sama dengan register CS untuk dapat membentuk pengalamatan 20
bit dalam format segment:offset.
Register status
Register ini mempunyai struktur yang berbeda dengan register-register
lainnya, yang dibentuk dari sebuah register 16 bit, yang masing-masing
bitnya memberikan informasi tertentu tentang keadaan -keadaan yang
terjadi pada prosesor, sebagai akibat proses pengolahan data. Informasi
yang diwakili oleh sebuah bit pada register status disebut 'flag'.
Hanya 9 dari keseluruhan 16 bit yang dipakai oleh register status
sebagai tanda kondisi-kondisi prosesor.
GENERAL PURPOSE REGISTER
General Purpose adalah register-register serbaguna, sering dimanfaatkan
untuk keperlua-keperluan lain yang bukan merupakan fungsi khasnya dan
untuk menampung secara sementara data-data yang akan diolah, sebelum
diambil dan diproses oleh ALU (Arithmetic and Logical Unit), walaupun
demikian ada juga instruksi-instruksi tertentu yang mengharuskan penggunaan
register-register secara spesifik (sesuai fungsi sebenarnya), yang mempunyai
16 bit, dan dapat digunakan penuh 16 bit (1 word = 1 kata) atau 8 bit
(1 byte = 1 karakter) saja.
1. AX (16 bit), terdiri dari AH (high byte/8 bit), AL (low byte/8 bit)
Secara khusus sebagai Accumulator dan register serbaguna yang berfungsi
sebagai masukan, atau menampung hasil proses / perhitungan (add, sub,
mul, dan div) dan sering untuk menyimpan data sementara. Banyak instruksi
yang dioptimasikan unjuk kerjanya jika beroperasi pada register
accumulator. Pengoperasian data yang disimpan di accumulator sedikit
lebih cepat dibanding bila data disimpan di register lain. Pada operasi
pembagian, jika bilangan pembagi besarnya 16 bit, bilangan yang dibagi
ditampung di pasangan register DX:AX. Setelah pembagian hasil ditampung
di AX sedang sisa hasil bagi di DX.
Bila bilangan pembagi besarnya 8 bit, bilangan yang dibagi ditempatkan
di AX. Setelah pembagian, hasil bagi ditempatkan di AL sedang sisa hasil
bagi di AH.
Pada operasi perkalian, accumulator menampung bilangan yang akan dikali-
kan. Hasil perkalian ditempatkan di register AX. Pada operasi I/O ke dan
dari port, accumulator menampung data yang akan ditransfer.
Dari fungsi-fungsi register AX, BX, CX, DX dapat digolongkan sebagai register
'Data' karena kegunaan dan pemanfaatannya yang cenderung ke penampungan data,
selain memiliki fungsi spesifik tetapi dapat saling tergantung.
SEGMENT REGISTER
1. ES (Extra Segment)
Tidak mempunyai tugas, tetapi berguna untuk pemograman pada saat
melakukan operasi ke segment lain. Nilai yang dikandung oleh register
ini merupakan address yang berguna bagi instruksi-instruksi string.
Address dari sebuah segmen tambahan juga dapat disimpan di register
ES ini. Processor 80386 selain ES, masih memiliki 2 register extra
segment, yaitu FS dan GS.
2. CS (Code Segment)
Yang menunjuk ke segment adalah register segment, maka CS merupakan .
salah satu dari empat register segment. Tugasnya adalah menunjukkan
segment program berada. Sedangkan pasangan register ini adalah register
IP.
Menampung nilai yang merupakan address awal dari suatu segmen.
Segmen ini berisi instruksi-instruksi dan operand-operand yang dispesi-
fikasikan oleh program.
3. DS (Data Segment)
Nilai yang ditampung oleh register ini merupakan address dari segmen
yang normalnya berisi data-data yang dialokasikan oleh program
4. SS (Stack Segment)
Address yang berada di register ini berguna bagi instruksi-instruksi
yang menyimpan sementara data distack. Stack merupakan sebuah area
memory yang dicadangkan untuk penyimpanan data secara sementara.
DS dan SS adalah dua register segment yang masing-masing mempunyai
tugas menunjukkan segment dari segment data dan segment stack.
Pasangan dari DS adalah DX dan pasangan dari SS adalah SP.
POINTER REGISTER
Pointer register secara khusus berfungsi untuk menyimpan nilai offset
dari relative address. Register ini terdiri dari :
1. IP (Instruction Pointer)
Merupakan pasangan CS yang merupakan register terpenting untuk
menunjukkan baris perintah program. Saat pertama program dijalankan,
register ini akan langsung menunjuk pada awal program dan selalu berisi
address dari instruksi yang akan segera dieksekusi. Programmer tidak
dapat langsung mengakses atau mengubah nilai register IP. Pengubahan
hanya bisa dilangsungkan melalui instruksi-instruksi call, jump, loop
dan interrupt yang secara otomatis akan mengubah nilai yang ada pada
register IP. Kombinasi CS dan IP menunjukkan alamat Segment : Offset.
2. SP (Stack Pointer)
Merupakan pasangan CS, maka SP merupakan pasangan SS yang digunakan
untuk operasi stack. Berisi data yang merupakan address lokasi saat
kini dalam stack. Register ini teknisnya merupakan register multi fungsi
yang dapat dipakai sebagai tempat penyimpanan data maupun tempat
kalkulasi, meski sehari-hari harus dipakai hanya dalam operasi stack.
3. BP (Base Pointer)
Untuk menulis dan membaca ke atau dari memory secara langsung dengan
segment SS (Stack Segment) dan digunakan dalam komunikasi antara bahasa
komputer, seperti Pascal dengan Assembler atau bahasa C dengan bahasa
Assembler Meski dipakai sebagai tempat penampung data sementara sering
dipakai pointer basis kerangka stack.
INDEX REGISTER
Register yang dipakai untuk melakukan operasi string dan sering digunakan
untuk menulis dan membaca ke atau dari memory seperti halnya BX dan BP
(Base Pointer), yang terdiri dari register :
1. SI (Source Index)
Dipakai sebagai pointer atau tempat penyimpan data. Registerini sering
dipakai sebagai pointer untuk menunjuk sebuah item (indexing) dalam
satu kesatuan data. Pada operasi string, SI dipakai untuk menunjuk ke
byte atau word dalam sebuah source string.
2. DI (Destination Index)
Dipakai sebagai pointer atau tempat penyimpanan data. Sering dipakai
sebagai pointer untuk menunjuk sebuah item (indexing) dalam satu
kesatuan data.
Pada operasi string, DI dipakai untuk menunjuk ke byte atau word dalam
sebuah destination string.
15 14 13 12 11 10 9 8 7 6 5
4 3 2 1 0
OF DF IF TF SF ZF
AF PF CF
Carry Flag (CF) akan 'set' (menjadi logika '1', tinggi), apabila terjadi
'bawaan' (carry) atau 'pinjaman' (borrow) dalam suatu hasil proses
perhitungan (arithmetic) pada Most Significant Bit (MSB, bit paling
berbobot). Jika hal-hal itu tidak terjadi maka CF akan 'reset' (logika
'0', rendah). Kalau dalam suatu instruksi, terjadi hasil yang menunjukkan
bahwa sistem pengecekan paritas adalah 'paritas genap' (even parity), maka
PF akan 'set'. Bila yang terjadi 'paritas ganjil' (odd parity), PF akan
'reset'.
SF atau 'Sign Flag' adalah bit yang akan mendeteksi suatu bilangan
sebagai bilangan positif atau bilangan negatif. Hal ini dilakukan dengan
melihat MSB dari bilangan tersebut. Apabila MSB menunjukkan nilai '1'
(set), maka bilangan itu adalah negatif, jika '0' (reset), bilangan
positif.
Dalam mikroprosesor 8088 secara fisik, bus alamat terdiri dari 20 bit
(A0-A19), sementara register-register internal terbentuk dari 16 bit data.
Oleh sebab itu, untuk menyesuaikan perbedaan jumlah bit antara bus alamat
8088 dengan register internal, sistem pengalamatan memori dilaksanakan
dengan format segment:offset. Format yang membutuhkan 32 bit ini dibentuk
dengan jalan menggabungkan data dari 2 buah register sekaligus.
Register pertama adalah satu satu dari 4 register segment, sedangkan
register lainnya diambil dari salah sebuah register pointer atau register
indeks.
Kenyataannya, segment-segment yang didefinisikan pada ruang memori itu
boleh dibuat saling berdampingan, terpisah atau tumpang tindih sekalipun.
Prosesor memiliki bus alamat sebanyak 20 bit, yang berarti ia mampu
mengalamati hingga 1.048.575 lokasi memori. Secara heksadesimal, jumlah
ini dinyatakan sebagai angka 00000 sampai dengan FFFFF. Ini adalah
alamat-alamat fisik (physical addresses) dari mikroprosesor. Untuk 8088
dan 8086 yang bus alamatnya terdiri dari 20 bit, otomatis penulisan
alamat fisiknya terdiri dari 5 digit heksadesimal.
Sistem segmentasi pada IBM PC dilaksanakan agak unik. 1 segment adalah
bagian dari ruang memori yang besarnya 65536 byte atau 64 Kb. Namun,
segment-segment itu tidaklah diletakkan secara berdampingan sambung
menyambung satu sama lain, akan tetapi saling tumpang tindih sehingga
jarak antara titik awal suatu segment hanya terpaut 16 byte terhadap
segment lainnya.
Segment pertama, diawali dari alamat 0000:0000 (alamat fisik 00000) dan
berakhir pada 0000:FFFF (alamat fisik 0FFFF). Akan tetapi, segment kedua
dimulai pada alamat 0000:0010 (alamat fisik 00010), berjarak hanya 16
bit dari titik awal alamat segment pertama. Pada kenyataannya, alamat
awal segment kedua ini identik dengan alamat 0001:0000. Sebagai akibatnya,
dalam sistem segmentasi semacam ini, akan banyak didapati penulisan
alamat-alamat segment:offset yang sebenarnya menunjuk pada lokasi yang
persis sama. Sebagai contoh,alamat 0000:0020 sesungguhnya adalah juga
alamat 0001:0010, sekaligus sama dengan alamat lokasi 0002:0001.