C++ Lanjutan

Register

















Register terdiri dari 16 bit (2 byte) yang dibagi lagi menjadi 2 yaitu high dan low.

GPP Register

  1. Register  AX  atau register akumulator adalah register yang  berhubungan dengan operasi  khusus seperti aritmatika, IN, OUT, shift, logika dan operasi binary decimal.
  2. Register BX disebut juga base register dan berfungsi pada operasi rotate, aritmatika, shift dan  logika. Register  BX  juga  dapat  digunakan  untuk mereferensikan  alamat  memori.
  3. Register  CX adalah sebuah register yang  khusus  digunakan  untuk  operasi  perulangan  (loop)  dan  pencacah  (counter).
  4. 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 
  1. 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). 
  2. 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. 
  3. 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

  1. CS  (Code  Segment)
  2. DS (Data  Segment) 
  3. SS  (Stack Segment)
  4. ES (Extra Segment)


4. Flag Register 
Pada arsitektur awal Intel x86 terdapat beberapa flag register, yaitu: 
  1. CF  (Carry  Flag),  menandakan  jika  suatu  instruksi  ADD  menghasilkan  nilai  carry,  atau suatu instruksi SUB menghasilkan nilai borrow. 
  2. PF (Parity Flag), menandakan jika suatu instruksi menghasilkan nilai genap atau ganjil. Register ini akan bernilai 1 jika bilangan yang dihasilkan bernilai genap. 
  3. AF (Auxiliary Carry Flag), digunakan untuk operasidesimal berkode binari (BCD), seperti pada operasi AAA (ASCII Adjust for Addition). 
  4. OF  (Overflow  Flag),  menandakan  jika  suatu  operasi  aritmatika  mengalami  overflow (melebihi  jangkauan  nilai  yang  telah  ditentukan  atau  hasil  operasi  aritmatika  melebihi ukuran register). 
  5. SF  (Sign  Flag),  digunakan  pada  operasi  aritmatika  yang  menggunakan  bilangan bertanda (bilangan positif atau bilangan negatif). 
  6. ZF (Zero Flag), menandakan jika suatu operasi aritmatika menghasilkan nilai nol. 
  7. DF (Direction Flag), digunakan pada operasi stringyang menunjukan arah proses. 
  8. IF (Interrupt Enable Flag), menandakan jika CPU akan memproses interupsi jika bernilai 1 (satu) atau mengabaikan interupsi jika bernilai nol. 
  9. TF (Trap Flag), digunakan saat debugging, dengan mode single step.
  10. NT  (Nested  Task),  digunakan  untuk  memantau  jalannya  interupsi  yang  terjadi  secara beruntun. 
  11. IOPL  (I/O  Protection  Level),  flag  ini  digunakan  jika  program  berjalan  pada  mode 3 terproteksi (protected mode). 
  12. PE (Protection Enable), flag ini digunakan untuk mengaktifkan mode terproteksi.
  13. MP  (Monitor  Coprocessor),  digunakan  untuk  memantau kerja  coprocessor dan menangani terjadinya instruksi WAIT. 
  14. EM  (Emulate  Coprocessor),  digunakan  jika  prosesor  akan  mengemulasikan  kerja coprocessor. 
  15. ET  (Extention  Type),  digunakan  untuk  menentukan  jenis  coprocessor  (80287  atau 80387). 
  16. 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 <conio.h>
#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

Popular posts from this blog

Apa yang salah dengan nilai 0?

Membuat Progress Bar dengan C++

Resensi Film Negeri 5 Menara