REGISTER CPU 8086
Secara Secara keselur keseluruha uhan, n, CPU 8086 8086 mempuny mempunyai ai 14 macam macam registe registerr yang yang dapat dapat diakses oleh programer, yang diklasifikasikan sebagai berikut :
Register Multiguna (GENERAL PURPOSES REGISTERS ) Terdiri atas 8 register multiguna atau general purpose , dimana register ini dapat digunakan untuk memanipulasi data. Setiap register memiliki lebar data 16 bit. Ke-4 register pertama disebut dengan register UMUM, terdiri atas AX, BX, CX, dan DX. Sedangkan 4 register berikutnya disebut dengan register INDEX dan POINTER yang terdiri atas register SP, BP, SI, dan DI. Khusus untuk register umum, dapat digunakan 8 bit saja dari masing-masing registernya dengan memisahkan 8 bit tinggi (HIGH) dan 8 bit rendah (LOW), dengan rincian sebagai berikut : -
Register Register Register Register
AX menjadi AH dan AL BX menjadi BH dan BL CX menjadi CH dan CL DX menjadi DH dan DL
Fungsi dari masing-masing register tersebut adalah : Register Umum (GENERAL REGISTERS) AX – Merupakan register akumulator ( dibagi menjadi AH / AL) yang berfungsi sebagai : 1. Membangkitkan kode mesin terpendek 2. Tempat Tempat proses proses aritmati aritmatika, ka, logika logika dan dan data 3. Satu nilai harus harus berada berada didalam didalam AL atau AX 4. Penampung Penampung hasil perkalian perkalian dan pembagian pembagian 5. Penam Penampun pung g pros proses es I/O I/O
BX – Merupakan register pengalamat dasar (base address register) (dibagi menjadi BH / BL ). CX – Merupakan register pencacah/penghitung (dibagi menjadi CH / CL) yang berfungsi sebagai : 1. Kode segmen segmen iterasi iterasi yang menggunaka menggunakan n instruksi instruksi LOOP LOOP 2. Mengulang Mengulang operasi operasi pada pada string string dengan dengan perintah perintah REP 3. Menghitung ( dalam CL) operasi bit untuk keperluan menggeser atau berotasi DX – Merupakan register data (dibagi menjadi DH / DL) yang berfungsi sebagai : 1. Jika digabungkan AX (DX:AX) akan menjadi register 32 bit untuk keperluan operasi perkalian (MUL) dan pembagian (DIV) concatenated 2. Digunakan Digunakan untuk menyebut menyebutkan kan alamat alamat port pada pada operasi operasi IN dan OUT Register Indeks (INDEX REGISTERS ) SI – Merupakan Register Indeks Sumber (source index register), yang berfungsi sebagai : 1. Digunakan Digunakan untuk penunjukkan penunjukkan alamat alamat data 2. Digunakan sebagai sumber dalam beberapa proses instruksi STRING 3. Dijadikan alamat relatif Offset pada register DS
DI – Merupakan register index tujuan (destination index register), berfungsi sebagai : 1. Digunakan Digunakan untuk penunjukkan penunjukkan alamat alamat data 2. Digunakan sebagai target dalam beberapa proses instruksi STRING 3. Dijadikan alamat relatif Offset pada register ES Register Penunjuk (POINTER REGISTERS ) BP – Merupakan register penunjuk dasar (base pointer), berfungsi sebagai : 1. Fungsi utamany utamanya a digunakan digunakan untuk mengaks mengakses es pelewatan pelewatan parameter parameter melalui STACK 2. Dijadikan alamat relatif Offset pada register SS
SP – Merupakan register penunjuk stack (stack pointer), berfungsi sebagai : 1. Selalu Selalu menunjukkan menunjukkan posisi posisi teratas teratas dari sebuah sebuah STACK STACK 2. Dijadikan Dijadikan alamat alamat relatif Offset Offset pada register register SS 3. Selalu Selalu menunjuk menunjuk pada word (byte (byte pada pada alamat alamat genap) genap) 4. Saat STACK kosong akan menginisialkan SP = 0FFFEh Register Segmen (SEGMENT REGISTERS) Kelompok register berikutnya adalah merupakan kelompok register 16 bit yang disebut dengan register segmen. Terdiri atas 4 macam jenis dengan masing-masing berfungsi sebagai berikut : CS – Register segmen yang menunjuk segmen yang berisi program saat ini. DS – Secara umum merupakan register segmen yang menunjuk segmen sebagai tempat dimana variabel-variabel didefinisikan. ES – Register segmen ekstra atau bonus, kegunaan register ini bergantung pada programer. SS – Register segmen yang menunjuk segmen yang berisi STACK. Meskipu Meskipun n hal ini memung memungkin kinkan kan untuk untuk menyim menyimpan pan data didalam didalam regist register er segmen, namun hal ini bukanlah ide yang bagus. Segmen register memiliki keguna kegunaan an yang yang sanga sangatt spesia spesiall yaitu yaitu menunj menunjuk uk blok blok memori memori yang yang dapat dapat diakses. Register segmen bekerjasama dengan register multiguna untuk mengakses nilai nilai memo memori ri apa apa saja saja.. Seba Sebaga gaii conto contoh, h, jika jika kita kita meng menging ingink inkan an untuk untuk mengakses memori fisik (misal : 12345h), kita dapat memberikan DS=12350h dan SI=0045h. Ini merupakan langkah yang dapat ditempuh dit empuh untuk mengakses sej sejumla umlah h memo memori ri yang yang lebi lebih h bany banya ak lag lagi, diba diband ndin ingk gka an deng denga an menggunakan register tunggal, yang hanya terbatas sampai dengan 16 bit saja. CPU membuat perhitungan dengan alamat fisik dengan mengalikan register segment dengan 10h dan menjumlahkannya pada register multiguna (misal : 1230h*10h+45h=12345h) 12300 h 00045 h =
12345 h
+
Alama Alamatt yang yang dibe dibentu ntuk k dari dari 2 regis registe terr dise disebut but denga dengan n alam alamat at efek efektif tif (Effective Address). Secara default, register BX, SI dan DI bekerja bersama register segmen DS, dan register BP, SP bekerja dengan register segmen SS. Sedang Sedangkan kan regist register er multig multiguna una lainnya lainnya,, tidak tidak dapat dapat diguna digunakan kan untuk untuk hal tersebut. Meskipun register BX dapat membentuk alamat efektif, namun BH dan BL tidak bisa.
Register Kegunaan Khusus (SPECIAL PURPOSE REGISTERS ) IP – Merupakan register pointer instruksi (the instruction pointer), yang berfungsi sebagai: 1. 2.
Selalu mengarahkan pada instruksi berikutnya yang akan dijalankan. Dijadikan alamat relatif Offset pada register CS
Register IP sela selalu lu beke bekerj rja a sama sama denga dengan n regi regist ster er segm segmen en dan dan selal selalu u menunjukkan posisi instruksi saat kini yang dijalankan
Register Bend Bendera/ era/tan tanda da (FLAG FLAGS S REG REGISTE ISTER R / WOR WORD D STAT STATUS) US) Regist Regi ster er ini digu diguna naka kan n un untuk tuk mene menentu ntuka kan n kead keadaa aan n prose proseso sorr saat saat ini. ini. Register-register ini dimodifikasi secara otomatis oleh CPU setelah operasi matematika, mengijinkan untuk menentukan jenis hasil, dan menentukan kondisi untuk kendali transfer pada bagian program lain. Secara umum anda tidak dapat mengakses register ini secara langsung.
1.
2. 3. 4. 5. 6. 7. 8.
Carry Flag (CF) – Tanda ini akan bernilai 1 jika ada unsigned overflow. Sebagai contoh saat anda menjumlahkan byte 255 + 1 ( hasilnya melebihi batas 0...255). Sebaliknya akan akan bernilai 0. Parity Flag (PF) – Tanda ini akan bernilai 1 jika terdapat jumlah ganjil dari 1 bit , dan 0 sebaliknya. Auxiliary Flag (AF) – Tanda ini akan bernilai 1 jika terdapat unsigned overflow untuk nibble (4 bits) terendah. Zero Flag (ZF) – Tanda ini akan bernilai 1jika terdapat hasil zero. Dan sebaliknya adalah 0. Sign Flag (SF) – Tanda ini akan bernilai 1 jika terdapat hasil negative. Sebaliknya 0. ( Tanda ini akan mengencek nilai pada MSB) Trap Flag (TF) – Tanda ini digunakan untuk pengecekan pada chip. Interrupt enable Flag (IF) – Tanda ini akan bernilai 1 apabilai CPU bereaksi terhadap interupsi dari devais luar. Direction Flag (DF) – Tanda ini digunakan untuk beberapa proses data berantai. Akan bernilai 0, jika prosesnya maju (forward) atau sebaliknya 0 Jika prosesnya mundur (backward).
9.
Overflow Flag (OF) – Tanda ini akan bernilai 1 jika ada tanda signed overflow. Misalkan saat anda menambahkan bytes 100 + 50 (hasilnya adalah luar jangkauan -128 s/d 127).