C++ Lanjutan
Register
Register terdiri dari 16 bit (2 byte) yang dibagi lagi menjadi 2 yaitu high dan low.
GPP Register
- Register AX atau register akumulator adalah register yang berhubungan dengan operasi khusus seperti aritmatika, IN, OUT, shift, logika dan operasi binary decimal.
- Register BX disebut juga base register dan berfungsi pada operasi rotate, aritmatika, shift dan logika. Register BX juga dapat digunakan untuk mereferensikan alamat memori.
- Register CX adalah sebuah register yang khusus digunakan untuk operasi perulangan (loop) dan pencacah (counter).
- Register DX digunakan pada operasi perkalian (MUL) dan menyimpan sebagian hasil perkalian 32 bit atau menyimpan nilai sisa dari operasi pembagian (DIV). Register DX juga digunakan pada operasi input/output suatu port.
Pointer dan Index Register
- Register SP (Stack Pointer) dan BP (Base Pointer) berfungsi menunjukan alamat stacksaat terjadi operasi PUSH (menyimpan nilai ke dalam stack) dan POP (membaca nilai di dalam stack).
- Register SI (Source Index) dan DI (Destination Index) digunakan pada saat operasi string jika kita membuat program dalam bahasa assemblymurni. SI dan DI menyimpan nilai offset suatu string dalam segmen data memori.
- Register IP (Instruction Pointer) berfungsi menunjukan alamat suatu instruksi program dalam memori saat program dijalankan. Register IP berpasangan dengan register CS (Code Segment) yang menyimpan semua kode program dalam bentuk binari saat program dijalankan dan dimuat dalam memori
Segment Register
Segment register terdiri dari
- CS (Code Segment)
- DS (Data Segment)
- SS (Stack Segment)
- ES (Extra Segment)
4. Flag Register
Pada arsitektur awal Intel x86 terdapat beberapa flag register, yaitu:
- CF (Carry Flag), menandakan jika suatu instruksi ADD menghasilkan nilai carry, atau suatu instruksi SUB menghasilkan nilai borrow.
- PF (Parity Flag), menandakan jika suatu instruksi menghasilkan nilai genap atau ganjil. Register ini akan bernilai 1 jika bilangan yang dihasilkan bernilai genap.
- AF (Auxiliary Carry Flag), digunakan untuk operasidesimal berkode binari (BCD), seperti pada operasi AAA (ASCII Adjust for Addition).
- OF (Overflow Flag), menandakan jika suatu operasi aritmatika mengalami overflow (melebihi jangkauan nilai yang telah ditentukan atau hasil operasi aritmatika melebihi ukuran register).
- SF (Sign Flag), digunakan pada operasi aritmatika yang menggunakan bilangan bertanda (bilangan positif atau bilangan negatif).
- ZF (Zero Flag), menandakan jika suatu operasi aritmatika menghasilkan nilai nol.
- DF (Direction Flag), digunakan pada operasi stringyang menunjukan arah proses.
- IF (Interrupt Enable Flag), menandakan jika CPU akan memproses interupsi jika bernilai 1 (satu) atau mengabaikan interupsi jika bernilai nol.
- TF (Trap Flag), digunakan saat debugging, dengan mode single step.
- NT (Nested Task), digunakan untuk memantau jalannya interupsi yang terjadi secara beruntun.
- IOPL (I/O Protection Level), flag ini digunakan jika program berjalan pada mode 3 terproteksi (protected mode).
- PE (Protection Enable), flag ini digunakan untuk mengaktifkan mode terproteksi.
- MP (Monitor Coprocessor), digunakan untuk memantau kerja coprocessor dan menangani terjadinya instruksi WAIT.
- EM (Emulate Coprocessor), digunakan jika prosesor akan mengemulasikan kerja coprocessor.
- ET (Extention Type), digunakan untuk menentukan jenis coprocessor (80287 atau 80387).
- VF (Virtual 8086 Mode), digunakan jika ingin menjalankan aplikasi real mode pada protected mode.
Mode Video
Dalam mempelajari suatu bahasa pemrograman mungkin akan lebih mudah dipahami saat dipraktekkan langsung dalam membuat suatu program dibandingkan dengan mempelajarinya lewat sekumpulan alinea yang berisi materi. Nah karena itu dalam mempelajari C++ Lanjutan ini saya akan membahasnya dalam sebuah listing program, mohon untuk dicermati ya, sehingga jika ada kesalahan saya dapat segera memperbaikinya.
Kebetulan saya punya salah satu listing program yang beberapa minggu lalu listing ini merupakan tugas mata kuliah algoritma pemrograman.
Nah untuk menghasilkan program seperti di bawah ini saat di running,
dibutuhkan listing seperti di bawah ini:
Listing soal 8 :
#include <dos.h>
#include <stdio.h> file header
#include <stdlib.h>
#include "screen.cpp"
int main(void)
{
Screen *layar = new Screen();
unsigned short int i, banyak, jeda;
layar->setMode(0x03);
layar->setAttribute(0x07);
layar->setCursorPos(4, 28);
layar->writeString("Contoh Progress Bar");
layar->setCursorPos(5, 28);
layar->writeString("-------------------");
layar->setCursorPos(6, 28);
layar->writeString("Waktu jeda (maks. 3 detik) :");
layar->setCursorPos(6, 60);
scanf("%hu", &jeda); fflush(stdin); //untuk input delay
jeda *= 1000; //ukuran delay
layar->setCursorPos(9, 28); // Untuk mencetak kursor kiri atas
layar->writeChar(0xda); // Untuk mencetak karakter kiri atas
layar->setCursorPos(9, 50); // Untuk mencetak kursor kanan atas
layar->writeChar(0xbf); // Untuk mencetak karakter kanan atas
layar->setCursorPos(11, 28); // Untuk mencetak kursor kiri bawah
layar->writeChar(0xc0); // Untuk mencetak karakter kiri bawah
layar->setCursorPos(11, 50); // Untuk mencetak kursor kanan bawah
layar->writeChar(0xd9); // Untuk mencetak karakter kanan bawah
layar->setCursorPos(10, 28); // untuk mencetak kursor sisi kiri
layar->writeChar(0xb3); // Untuk mencetak karakter sisi kiri
layar->setCursorPos(10, 50); //untuk mencetak karakter sisi kanan
layar->writeChar(0xb3); // Untuk mencetak karakter sisi kanan
// Garis datar atas dan bawah
for (i = 29; i <= 49; i++)
{
layar->setCursorPos(9, i);
layar->writeChar(0xc4);
layar->setCursorPos(11, i);
layar->writeChar(0xc4);
}
layar->setAttribute(0x0e);
for (i = 29; i <= 49; i++)
{
layar->setCursorPos(10, i);
layar->writeChar(0xdb);
delay(jeda);
}
layar->setAttribute(0x07);
layar->setCursorPos(10, 52);
layar->writeString("SELESAI");
getch();
delete layar;
return EXIT_SUCCESS;
}
Mouse dan Keyboard
Berikut adalah listing untuk perintah mouse dan keyboard,
boleh di coba ^_^
#include <stdlib.h> //file header digunakan sebagai perintah untuk EXIT_SUCCESS
#include "screen.cpp"
#include "keyboard.cpp"
#define MOUSE_INT 0x33 //nilai ketetapan untuk fungsi mouse
UCHAR detectMouse(UCHAR *btn); //deklarasi fungsi untuk mouse
int main(void)
{
Screen *monitor = new Screen(); //membuat layar baru
Keyboard *tombol = new Keyboard(monitor);
UCHAR str[5]; //variabel masukan
UCHAR status, button; //variabel masukan
status = detectMouse(&button); //perintah untuk deteksi muose
monitor->setMode(0x03); //mode video
monitor->setCursorPos(5, 14); //koordinat
monitor->writeString("Deteksi Mouse"); //mencetak string
monitor->setCursorPos(7, 14); //koordinat dari kata diatas
monitor->writeString("Status:");
monitor->setCursorPos(8, 14);
monitor->writeString("Tombol:");
monitor->setCursorPos(7, 22);
if (status) //percabangan
monitor->writeString("Mouse Terdeteksi dan Siap digunakan"); //string yang akan dicetak dilayar
else //jika pilihannya selain yang di atas
monitor->writeString("Tidak terinstal"); //string yang dicetak
monitor->setCursorPos(8, 22); //posisi
monitor->writeChar(button | 0x00); //character yang akan dicetak character a0x00
tombol->getString(str, 0); //karakpter yang disalin
delete monitor; //menghapus layar
delete tombol;
return EXIT_SUCCESS; //untuk mengakhiri program atau keluar dari program
}
UCHAR detectMouse(UCHAR *btn) //bahasa asembly
{
UCHAR state, button;
asm mov ah, 0x00;
asm mov al, 0x00;
asm int MOUSE_INT; //menjalankan interupsi 0x33
asm mov state, al;
asm mov button, bl;
*btn = button;
return state;
}
Comments
Post a Comment
Mohon kritik dan sarannya :-)