Wednesday, 4 January 2012

Register di Prosessor Intel 80X86

Dalam Pemograman Bahasa Assembly, yang perlu diperhatikan adalah struktur perangkat lunak dari prosessor yangdigunakan,apa saja yang ada didalam mikroprosessor tersebut. Salah satunya adalah sebuah bagian memori kecil yang berada didalam prosessor yang digunakan untuk menyimpan data-data sementara pada saat program atau sekumpulan instruksi memori internal prosessor ini disebut sebagai REGISTER atau REGISTER INTERNAL. Karena dalam register ini ada didalam prosessor,maka register ini merupakan memori yang kecepatan aksesnya paling cepat (dibandingkan dengan jenis memori eksternal)

Register-register ini dikelompokan menjadi :
-          Register-register data
-          Penunjuk (pointer) dan indeks
-          Segmen
-          Penunjuk instruksi (instruction pointer)
-          Bendera status (status flags)
                                                    
a.      Register-Register Data
Register-register data dapat Anda perlakukan sebagai register 16-bit (satuannya word) atau 8 byte (satuannya byte). Register yang 16-bit diberi nama AX,BX,CX dan DX (perhatikan gambar 1). Sedangkan yang 8-bit dengan nama AL,AH,BL,BH,CL,CH,DL dan DH. Huruf L dan H masing masing kepanjangan linear Low dan High Low, menyatakan 8-bit pertama (0 sampai 7) dan High menyatakan 8-bit terakhir (8 sampai 15). Semua register-register data tersebut dapat digunakan untuk apa saja dalam pemograman,tetapi fungsi sebenarnya adalah sebagai berikut :
-          AX-Akumulator,digunakan dalam perkalian,pembagian dan operasi I/O 9 (keluaran/masukan) ukuran word,serta dalam beberapa operating string (sekumpulan karakter). Register AL digunakan untuk proses yang sama dalam ukuran byte serta dalam operasi translasi dan aritmatika. Demikian juga dengan AH.
-          BX-Register Basis, sering digunakan untuk membawa data alamat memori.
-          CX-Pencacah (Counter),digunakan untuk menyimpan cacah pengulangan pada operasi pengulangan dan sebagai pencacah elemen untuk operasi string. Register CL biasanya digunakan untuk menyimpan cacah pergeseran untuk intruksi pergeseran dan rotasi.
-          DX-Data,digunakan dalam operasi perkalian dan pembagian ukuran word,juga digunakan sebagai nomor port dalam operasi I/O.
 

b.      Register-Register Segmen
      Organisasi memori dalam computer yang menggunakan prosessor 80X86 dibagi menjadi 4  segmen yaitu :
-          Segmen Kode,yang digunakan untuk menyimpan kode-kode program 
-          Segmen Data,yang digunakan untuk menyimpan data-data atau variable-variabel yang digunakan dalam program,disimpan dalam register DS(Data Segment).
-          Segment Stack,menyimpan struktur data khusus atau unik yang dinamakan ‘Stack’ yang digunakan untuk menyimpan data dan alamt sementara, disimpan dalam register ini. Mengapa disebut unik,karena cara penyimpanannya menggunakan system FILO (First In Last Out- yang masuk pertama keluar belakangan), atau LIFO (Last In First Out-yang masuk belakangan keluar duluan),artinya data yang pertama kita simpan akan berada di bagian dasar Stack,data berikutnya ada diatasnya dan seterusnya,sehingga data yang teratas adalah data yang terakhir kali disimpan.
-          Segment Ekstra, digunakan sebagai segmen data cadangan,biasa digunakan dalam operasi-operasi string,disimpan dalam register ini.
     Setiap program Assembly minimal harus memiliki sebuah segmen kode dansegmen stack (ada pengecualian untuk segmen Stack ini yang akan dijelaskan pada bagian lain). Jika Anda bekerja dengan data,maka Anda harus memiliki sebuah segmen data dan/atau sebuah segmen ekstra. 
     Dengan demikian register-register segmen tersebut digunakan untuk menyimpan awal segmen. Bagaimana dengan data atau kodeyang sedang diakses? Karena register segme hanya menyimpan alamat awal segmen,maka diperlukan angka atau bilangan offset yang menyatakan seberapa jauh lokasi yang bersangkutan dari awal segmen. 
     Segmen dan offset masing-masing panjangnya 16-bit,tetapi prosessor yang digunakan memiliki 20-bit untuk alamat (sebagai lokasi memori yang sesungguhnya),lantas bagaimana cara membuat 16-bit menjadi 20 bit, gunakan persamaan berikut :
 
         Alamat fisik : offset + (segmen x 16)
Artinya,segment digeser 4 bit kekiri kemudian diumlahkan dengan offset. Misalnya, segmen DS = 1230H sedangkan SI = 004H, ditulis dengan format heksadesimal,maka alamatefektif-nya adalah DS:SI sedangkan alamat fisik-nya (dalamheksadesimal) :

                        12300
                              0045  +
                        12345

c.      Register-Register Penunjuk (Pointer) Dan Indeks
       Mikroprosessor 80x86 melakukan akses data menggunakan cara yang sama dengan mengombinasikan segmen dan offset. Untuk mengakses segmen data,segmennya diperoleh dari DS dan offset-nya dari BX atau register indeks SI (Source Index) atau DI (Destination Index). Untuk mengakses Stack, segmennya diperoleh dari register SS dan offset-nya dari register penunjuk atau pointer (SP (Stack Pointer)) atau BP (Base Pointer). Sedangkan untuk segmen ekstra,menggunakan segmen dari ES dan digabung dengan SI ata DI.
 
 d.      Penunjuk Instruksi(InstructionPointer)
      Mikroprosesor 80x86 menghitung alamat suatu instruksi yang akan dkerjakan dengan cara mengkombinasikan  segmen CS dan offset IP(CS:IP),sehingga dalam hal ini IP atau Instruction Pointer merupakan register yang digunakan untuk menyimpan penunjuk atau offset instruksi yang akan dikerjakan oleh prosessor. 
      Dengan demikian  register IP memang didedikasikan untuk menyimpan alamt lokasi instruksi berikutnya, sehingga tidak dapat kita gunakan untuk operasi lainnya. Ada instruksi yang memang bisa mengubah IP. Misalnya, instruksi untuk pemanggilan subrutin dan kembali dari suatu subrutin.
 
e.      Bendera Status (Status Flags)
      Seringkali Anda ingin agar program melakukan  “pengambilan keputusan” berdasar pada hasil intstruksi Assembly yang dikerjakan. Misalnya saja, Anda ingin dilakukan suatu proses jika suatu hasil penjumlahan adalah nol (misalnya mencetak string “hasilnya NOL”) dan melakukan proses yang lain jika hasilnya bukan nol. 
      Register bendera,selanjutnya kita sebut sebagai flag saja,menyimpan berbagai macam status kondisi untuk membantu program Anda mengambil keputusan. Enam bit menyimpan status,tiga bit digunakan untuk control prosessor,sisanya tidak digunakan. 
      Perhatikan gambar berikut :

 
Berikut penjelasan masing-masing bit pada register flag ini :
-          Bit  0, CF (Carry Flag), akan berisi 1 jika suatu penjumlahan menghasilkan sisa atau suatu pengurangan membutuhkan pinjaman,selain itu akan bernilai 0.CF juga menyimpan nilai suatu bit yang keluar yang merupakan hasil dari pergeseran atau rotasi  dan merefleksikan hasil suatu operasi perbandingan. Selain itu,CF digunakan sebagai indicator perkalian (lihat keterangan pada OF).
-          Bit 2, PF (Parity Flag), akan berisi 1 jika hasil dari suatu operasi memiliki cacah genap dari logika 1,selain itu akan berisi 0. PF sering digunakan dalam komunikasi data. Dengan demikian jika hasil dari suatu operasi adalah 10110100, cacah logika 1-nya 4, maka PF = 1, tapi jika hasilnya adalah 10110000,cacah logika 1-nya 3,maka PF = 0.
-          Bit 4, AF (Auxiliary Carry Flag), sama seperti bit CF,kecuali AF digunakan untuk indicator sisa atau sisa pinjaman dari bit ,yaitu operasi operasi BCD (inary Coded Desimal), yaitu system bilangan decimal yang dikodekan secara biner (hanya mengenal angka 0 sampai 9 dalam biner).
-          Bit 6, ZF (Zero Flag), jika bernilai 1 artinya hasil dari suatu operasi adalah nol,selain itu akan berisi nol.
-          Bit  7, SF (Sign Flag), hanya akan berarti selama operasi bilangan bertanda. Akan berisi 1 jika hasil suatu operasi (aritmatika,logika,penggeseran atau rotasi) merupakan bilangan negative atau dengan kata lain merupakan dari bit yang terkiri (MSB)
-          Bit 8, TF (Trap Flag), digunakan untuk menjalankan instruksi langkah demi langkah pada program DEBUG.
-          Bit 9, IF(Interupt Enable Flag), membolehkan prosessor 80x86 mengenali permintaan interupsi dan piranti-piranti eksternal system,jika diisi dengan 1. Jika diidi dengan 0,maka segala macam permintaan interupsi akan diabaikan.
-          Bit 10, DF (Direction Flag), meyebabkan prosessor 80x86 akan menaikkan (increment,DF = 0) atau menurunkan (decrement, DF = 1) register-register indeks setelah setelah dikerjakan suatu instruksi string.
-          Bit 10, OF (Overflow Flag), merupakan indicator adanya kesalahan selama operasi bilangan bertanda. OF ini bertindak sebagai tanda terjadi limpahan, penampung tidak mencukupi menyimpan hasil suatu operasi,dengan tipe word,nilai paling kecil adalah -32767 dan paling besar adalah 32760, jika 32768 + 20, maka hasilnya 32790 dan ini tidak cukup disimpan pada register tipe word (AX,BX,CX dan DX), sehingga mengakibatkan OF = 1 (terjadi limpahan atau overflow)



 

No comments:

Post a Comment