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 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.
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)
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 :
-
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