45
Real mode memory adressing http://www.materidosen.com/2016/11/pointer-pada-c-lengkap-contoh- program.html Pointer pada C++, Lengkap Contoh Program dan Pembahasan Ditulis oleh MateriDosen Senin, 28 November 2016 1 Komentar

materimengajarkomputer.files.wordpress.com  · Web viewC++, Lengkap dengan Contoh Program dan Pembahasan. Salah satu kelebihan dari Bahasa C / C++ adalah Karena Bahasa ini mendukung

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: materimengajarkomputer.files.wordpress.com  · Web viewC++, Lengkap dengan Contoh Program dan Pembahasan. Salah satu kelebihan dari Bahasa C / C++ adalah Karena Bahasa ini mendukung

Real mode memory adressinghttp://www.materidosen.com/2016/11/pointer-pada-c-lengkap-contoh-program.html

Pointer pada C++, Lengkap Contoh Program dan PembahasanDitulis oleh MateriDosen  Senin, 28 November 2016  1 Komentar    

Tahukah sobat bahwa setiap variabel yang kita buat akan tersimpan di dalam memory komputer ? Lalu tahukah sobat bahwa memory - memory ini terpetakan pada komputer dengan nomor unik yang disebut dengan nomor address (alamat memori) ? untuk mengetahui dan memahami hal tersebut langsung saja mari kita simak materi Pointer

Page 2: materimengajarkomputer.files.wordpress.com  · Web viewC++, Lengkap dengan Contoh Program dan Pembahasan. Salah satu kelebihan dari Bahasa C / C++ adalah Karena Bahasa ini mendukung

pada C++, Lengkap dengan Contoh Program dan Pembahasan.

Salah satu kelebihan dari Bahasa C / C++ adalah Karena Bahasa ini mendukung sepenuhnya untuk pemanipulasian memori dengan menggunakan pointer, lalu apa itu pointer ? Pointer sendiri dapat didefinisikan sebagai variabel yang menyimpan alamat memori. Pada materi sebelumnya kita sudah terbiasa dengan penggunaan variabel, tapi variabel tersebut hanya berisi nilai, bukan alamat.

Pointer yaitu variabel yang berisi (menyimpan) alamat memori dari sebuah variabel lain atau pointer dapat diartikan sebagai variabel yang menunjuk ke sebuah alamat memori dari sebuah variabel lain. Pointer ini digunakan dengan maksud untuk menunjukan ke suatu alamat memori sehingga kita dapat mengetahui dengan mudah alamat dari sebuah variabel. Pointer juga bisa diartikan sebagai tipe data yang nilainya mengarah pada nilai yang terdapat pada suatu alamat memori.

Page 4: materimengajarkomputer.files.wordpress.com  · Web viewC++, Lengkap dengan Contoh Program dan Pembahasan. Salah satu kelebihan dari Bahasa C / C++ adalah Karena Bahasa ini mendukung

Dalam melakukan operasi pada Pointer, Terdapat 2 macam operator pointer yang disediakan dalam bahasa C++ yaitu Operator dereference (&) dan Operator reference (*).

2 Macam Operator PointerOperator Dereference (&)Operator Dereference (&) yaitu operator yang berfungsi mendeklarasikan sebuah variabel didalam penggantian memori. operator ini biasa disebut dengan "address of". Jadi seandainya sobat ingin mengetahui dimana variabel akan disimpan (untuk mengetahui letak / alamat penyimpanan variabel di memori), sobat dapat memberikan tanda "&" (ampersand sign) didepan variabel, yang berarti "address of". Karena dengan menggunakan operator dereference (&) ini, sebuah variabel akan menghasilkan alamat lokasi penyimpanannya di memori. Sebagai contoh "int angka" ditempatkan pada memori dengan alamat 0x6ffe34 untuk mengetahuinya sobat dapat menuliskan code seperti ini cout<<"\nAlamat variabel angka (&angka) : "<<&angka; berikut code lengkapnya:#include <iostream>

using namespace std;

int main(){

Page 5: materimengajarkomputer.files.wordpress.com  · Web viewC++, Lengkap dengan Contoh Program dan Pembahasan. Salah satu kelebihan dari Bahasa C / C++ adalah Karena Bahasa ini mendukung

       //deklarasi variabel angka dengan tipe data int    

     int angka = 90;

     //deklarasi pointer angkax dengan tipe data int     int *angkax;

     //angkax sama dengan Address Of angka (0x6ffe34)     //sekarang pointer angkax menunjuk ke alamat memori variabel angka     //atau pointer angkax berisi (menunjuk) alamat memori variabel angka     angkax = &angka;

Page 6: materimengajarkomputer.files.wordpress.com  · Web viewC++, Lengkap dengan Contoh Program dan Pembahasan. Salah satu kelebihan dari Bahasa C / C++ adalah Karena Bahasa ini mendukung

     cout<<"Nilai (isi) dari variabel angka : "<<angka;     cout<<"\nAlamat variabel angka (&angka) : "<<&angka;     cout<<"\nNilai yang ditunjuk pointer *angkax : "<<*angkax;

     return 0;}

Contoh Penggunaan Operator Dereference (&)

Dari program (code) contoh penggunaan Operator Dereference (&) diatas, kami mencoba membuat ilustrasinya pada gambar dibawah ini sehingga sobat dapat lebih memahami code yang kami buat, perlu diketahui alamat memori dari sebuah variabel / pointer pada setiap komputer kemungkinan besar berbeda.

Page 7: materimengajarkomputer.files.wordpress.com  · Web viewC++, Lengkap dengan Contoh Program dan Pembahasan. Salah satu kelebihan dari Bahasa C / C++ adalah Karena Bahasa ini mendukung

Ilustrasi Pointer pada C++, pada program Contoh Penggunaan Operator Dereference (&)

Pada program diatas awalnya kita membuat variabel dengan tipe data int dengan nama "angka", disaat yang bersamaan kita juga melakukan inisialisasi "int angka" dengan nilai awal "90", kemudian kita melakukan deklarasi sebuah pointer dengan tipe data int dan dengan nama "angkax", Setelah itu kita menuliskan code "angkax = &angka;" yang artinya memerintahkan pointer angkax menunjuk ke alamat memori variabel angka, sehingga nilai yang ditunjuk pointer angkax sama dengan nilai dari variabel angka (90) karena pointer angkax telah menunjuk ke alamat memori variabel angka (lihat kembali code diatas).

Operator Reference (*)Seandainya pada operator Dereference (&) sobat dapat mengeluarkan alamat memory dari sebuah variabel, sedangkan pada Operator Reference (*) sobat dapat mengeluarkan (menampilkan) nilai dari

Page 8: materimengajarkomputer.files.wordpress.com  · Web viewC++, Lengkap dengan Contoh Program dan Pembahasan. Salah satu kelebihan dari Bahasa C / C++ adalah Karena Bahasa ini mendukung

alamat memori yang di tunjuk. untuk penggunaan nya sendiri sobat dapat menambahkan identifier asterisk (*) didepan variabel. biasanya Operator reference disebut dengan "value pointed by"

Baca Juga : Gratis, Tutorial Lengkap Belajar Bahasa Pemrograman C++

Dari contoh program diatas, nilai *angkax adalah "90", hal tersebut karena pointer angkax menjunjuk ke variabel angka sehingga apabila kita menuliskan code cout<<"\nNilai yang ditunjuk pointer *angkax : "<<*angkax; maka akan keluar angka 90 karena kita mengeluarkan nilai dari alamat memori yang ditunjuk oleh pointer angkax (nilai / value yang berada di alamat memori 0x6ffe34).

untuk lebih memahami materi Pointer pada C++ ini, khususnya dalam penggunaan Operator Dereference (&) dan Operator Reference (*), kita akan membahas satu lagi contoh program pointer lengkap dengan penjelasannya.

Contoh Program Pointer pada C++, Lengkap Pembahasan#include <iostream>

using namespace std;

Page 9: materimengajarkomputer.files.wordpress.com  · Web viewC++, Lengkap dengan Contoh Program dan Pembahasan. Salah satu kelebihan dari Bahasa C / C++ adalah Karena Bahasa ini mendukung

int main(){

     //deklarasi variabel x dengan tipe data int     int x;

     //deklarasi pointer p dengan tipe data int     int *p;

     x = 20;     p = &x;

     cout<<"\t\t===== Program Contoh Pointer =====\n\n";

     cout<<"Nilai X   \t\t: "<<x<<endl;     cout<<"Alamat X (&X) \t\t: "<<&x<<endl<<endl;

     cout<<"Nilai yang ditunjuk *P\t: "<<*p<<endl;     cout<<"Alamat yang ditunjuk *P\t: "<<p<<endl;     cout<<"Alamat *P (&P) \t\t: "<<&p<<endl;

     // mengisi nilai 30 kedalam *p / alaman

Page 10: materimengajarkomputer.files.wordpress.com  · Web viewC++, Lengkap dengan Contoh Program dan Pembahasan. Salah satu kelebihan dari Bahasa C / C++ adalah Karena Bahasa ini mendukung

yang ditunjuk pointer p     // untuk megisikan nilai melalui alamat pointer gunakan *     // karena alamat memori yang ditunjuk pointer p merupakan alamat memori variabel x     // maka nilai dari variabel x juga ikut berubah     *p = 30;

     cout<<"\n\n\nNilai X   \t\t: "<<x<<endl;     cout<<"Alamat X (&X) \t\t: "<<&x<<endl<<endl;

     cout<<"Nilai yang ditunjuk *P\t: "<<*p<<endl;     cout<<"Alamat yang ditunjuk *P\t: "<<p<<endl;     cout<<"Alamat *P (&P) \t\t: "<<&p<<endl;

     return 0;}

Page 11: materimengajarkomputer.files.wordpress.com  · Web viewC++, Lengkap dengan Contoh Program dan Pembahasan. Salah satu kelebihan dari Bahasa C / C++ adalah Karena Bahasa ini mendukung

Contoh Program Pointer pada C++, Lengkap dengan Pembahasan

Dari program (code) Contoh Pointer dalam C++ diatas, kami mencoba membuat ilustrasinya pada gambar dibawah ini sehingga sobat dapat lebih memahami code yang kami buat, perlu diketahui alamat memori dari sebuah variabel / pointer pada setiap komputer kemungkinan besar berbeda.

Page 12: materimengajarkomputer.files.wordpress.com  · Web viewC++, Lengkap dengan Contoh Program dan Pembahasan. Salah satu kelebihan dari Bahasa C / C++ adalah Karena Bahasa ini mendukung

Ilustrasi Pointer pada C++, Pada Contoh Program Pointer pada C++

Pada program diatas awalnya kita membuat variabel dengan tipe data int dengan nama "x", kemudian sebuah pointer dengan tipe data int dengan nama "p". setelah itu memberikan nilai x dengan nilai "20" kemudian mengarahkan / mengisi / menunjukkan pointer p ke alamat memori variabel x. setelah itu menampilkan data dari variabel x dan pointer p,

Kemudian code *p = 30; memiliki arti bahwa kita akan mengisi nilai 30 kedalam pointer p / alaman yang ditunjuk pointer p, karena alamat memori yang ditunjuk ponter p merupakan alamat memori variabel x maka nilai dari variabel x juga ikut berubah, Untuk membuktikan nilai variabel x juga ikut berubah (menjadi 30) maka pada code dibawah nya kita akan menampilkan data dari variabel x dan pointer p. Bagaimana sudah paham kan ?

Page 13: materimengajarkomputer.files.wordpress.com  · Web viewC++, Lengkap dengan Contoh Program dan Pembahasan. Salah satu kelebihan dari Bahasa C / C++ adalah Karena Bahasa ini mendukung

Sekian Artikel mengenai Pointer pada C++, Lengkap Contoh Program dan Pembahasan, semoga artikel ini dapat bermanfaat bagi sobat baik untuk menambah ilmu, mengerjakan tugas, maupun untuk sekedar menambah wawasan tentang Pointer pada C++ dan Macam Operator Pointer baik Operator Dereference (&) maupun Operator Reference (*), apabila sobat menemui kesulitan dalam memahami artikel ini silakan tuliskan komentar di kolom komentar atau hubungi kami melalui halaman Kontak Kami. Akhir kata, Terimakasih atas kunjungannya.

Pointer pada C++, Lengkap Contoh Program dan PembahasanMateriDosen.Com

Page 14: materimengajarkomputer.files.wordpress.com  · Web viewC++, Lengkap dengan Contoh Program dan Pembahasan. Salah satu kelebihan dari Bahasa C / C++ adalah Karena Bahasa ini mendukung

Segmen dan offsethttps://yulisjogja.wordpress.com/2010/05/08/pengalamatan-memory/

Pengalamatan Memory{ Mei 8, 2010 @ 11:46 am } · { Ilmu komputer }

Hal yang tidak dapat dipindahkan dari komputer adalah memory karena setiap komputer memerlukan memory sebagai tempat kerjanya

Fungsi memory adalah unuk memuat program dan juga menampung hasil proses

Memory terdiri dari1. RAM (Random Access Memory) => data-data dapat

ditulis maupun di baca pada lokasi manasaja di memory2. ROM (Raed Only Memory) => hanya dapat dibaca dan

tidak dapat ditulisi biasanya ditujukan untuk mengatur aktivitas komputer pada saat pertama kali dihidupkan(ROM-BIOS). Pengisian ROM dikerjakan oleh Pabrik (AMI BIOS, AWARD dll)

Hal yang perlu diperhatikan dalam membuat program dengan bahasa Assembler berkenaan dengan memory adalah Segmentasi memory yaitu pembagian alamat sebagai lokasi suatu data atau instruksi.

Ada dua macam alamat memory1. Alamat Fisik(Physical Address) => alamat yang ada

pada jalur 20 bit. Nilainya antara 00000H – FFFFFH2. Alamat Logik(Logical Address) => alamat yang di pakai

oleh program yang terdiri dari SEGMENT dan OFFSET. Nilai dasar segment diambil dari salah satu segment register(CS,SS,DS,ES) dan offset nilainya ada pada

Page 15: materimengajarkomputer.files.wordpress.com  · Web viewC++, Lengkap dengan Contoh Program dan Pembahasan. Salah satu kelebihan dari Bahasa C / C++ adalah Karena Bahasa ini mendukung

index register atau pointer register atau juga bisa didapat dari berbagai addressing mode

Main Memory/Memory utama terdiri dari sejumlah sel yang masing masing dapat menyimpan informasi sebesar 1 byte(8bit)

Masing-masing sel memory diberi satu alamat (address)dimulai dari 0 sampai dengan jumlah memory dikurangi 1

Dengan adanya address ini, maka lokasi dari memori dapat dihubungi.

Pada mikroprosessor intel 8086/8088 digunakan memory sebesar 1 Mb=1048576 byte, oleh karena itu alamatnya antara 00000 – FFFFF (20 bit)

Kemampuan prosessor 8088 memiliki register yang ukurannya 16 bit, berabti masih kekurangan 4 bit lagi untuk menampung satu alamat memory.

Untuk menampung kekurangan sebesar 4 bit maka harus dilakukan penomoran dengan 2 register.

1. Sebuah register berisi 16 bit yang terletak disebelah kiri dan dinamakan register segment

2. Sebuah register lain berisi 16 bit yang terletak disebelah kanan dan dinamakan register offset

Antara segment dan offset ditulis dan dipisahkan oleh tanda titik dua ( : ) seperti berikut

SEGMENT : OFFSET2845 : FB00

Pengalamatan Memory

Cara pengalamatan memory yang dilakukan oleh komputer sering disebut dengan pengalamatan relatif(relatif address), sedangkan yang kita perlukan adalah kemampuan 20 bit sehingga pengalamatan yang dilakukan adalah pengalamatan mutlah atau absolut

Memory pada 8088 adalah 1 MB, Perlu diingat bahwa 1 Kb = 1024 byte, 1 Mb = 1024 KB = 1048576 byte (20 bit). Dengan demikian alamat memory dari 0 – 1 MB otomatis memerlukan 5 digit angka desimal 00000 – FFFFF

Page 16: materimengajarkomputer.files.wordpress.com  · Web viewC++, Lengkap dengan Contoh Program dan Pembahasan. Salah satu kelebihan dari Bahasa C / C++ adalah Karena Bahasa ini mendukung

Padahal register pada prosessor 8086/8088 hanya berukuran 16 bit, berarti hanya dapat menampung 4 digit hexadesimal yaitu 0000-FFFF

Oleh karena itu, dengan kondisi tersebut perlu aturan penulisan sebagai berikut

Pada Segmen register => nilai digit terendah adalah 161 dan digit tertinggi 164 (hal ini mengakibatkan segment register digeser kekiri 1 digit)

Pada Offset =>register terendah 160 dan tertinggi 163 Tabel Alamat Fisik dan Logic

Alamat Fisik(dalam Hexadesimal)

Alamat Logik(dalam Segment:Offset)

Alamat Fisik(dalam desimal)

0000000001000020000300004………7FFFF……FFFFDFFFFEFFFFF

0000:00000000:00010000:00020000:00030000:0004….….….7000:FFFF….….F000:FFFDF000:FFFEF000:FFFF

01234….….….524288…..…..104857310485741048575

Contoh: Alamat dimemory adalah 2845:FB00, berapakah alamat

fisik/absolutnya? Segment => 2845H

Offset => FB00HCara:

Page 17: materimengajarkomputer.files.wordpress.com  · Web viewC++, Lengkap dengan Contoh Program dan Pembahasan. Salah satu kelebihan dari Bahasa C / C++ adalah Karena Bahasa ini mendukung

28450FB00 +37F50 => Alamat Fisik

Catatan: Segment 0 => 0000:0000 s/d 0000:FFFF Segment 1 => 1000:0000 s/d 1000:FFFF

…………..

Segment F =>F000:0000 s/d F000:FFFF

Organisasi Memory IBM PC

Seperti yang telah disebutkan di atas bahwa prosesor 8088 secara langsung dapat berhubungan dengan lokasi memory sebanyak 1 Mb, yang di mulai 00000H sampai dengan FFFFFH dan keseluruhan lokasi memory tersebut terdapat pada dua jenis memory yaitu RAM dan ROM.

Seperempat memory paling di atas, terdiri dari segment paragraf 0000H sampai FFFFH disediakan untuk ROM dan ROM BIOS menempati 8 KB lokasi memory yang diawali dari paragraf FE00H.

ROM BASIC menempati 32 KB sebelumnya, yang dimulai dari segment paragraf F600H dan berakhir pada awal lokasi ROM BIOS. Sisa lokasi ROM yang ada dapat digunakan untuk ROM tambahan dan diletakkan diatas paragraf 0000H.

Di bawah area ROM terdapat area sebesar 64 Kb yang secara khusus di sediakan untuk menunjang keperluan layar tampilan. Area memory tersebut di bagi menjadi 2 bagian yaitu bagian pertama pada paragraf B000H digunakan untuk monochrom display yang kedua diguanakan unuk color graphics display pada paragraf B800H. Monochrome display hanyan menempati 4 Kb, sedangkan color grafics display menggunakan 16 Kb. Lokasi yang tersisa tidak digunakan atau digunakan untuk pengembangan berikutnya.

Page 18: materimengajarkomputer.files.wordpress.com  · Web viewC++, Lengkap dengan Contoh Program dan Pembahasan. Salah satu kelebihan dari Bahasa C / C++ adalah Karena Bahasa ini mendukung

Untuk display adapter, sebenarnya tidak hanya 64 Kb saja yang disediakan melainkan 64 Kb di bawahnya juga dapat digunakan sesuai dengan dokumentasi IBM ( A000H – B000H ). Lokasi memory 64 Kb tersebut dibagi menjadi 2 bagian yaitu 16 Kb pertama (paragraf A000–A400H ) digunakan secara tidak menentu (tidak ada indikasi maksud kegunaannya ) sedangkan 48 Kb sisanya ( dari paragraf A400H sampai dengan B000H ) merupakan bagian dari seluruh 112 Kb memory yang disediakan untuk high resolution display baru, yang membutuhkan memory yang lebih besar dari pada memory monochrome display dan color grafics display. Jadi alokasi memory seluruhnya yang disediakan untuk tampilan dimulai dari segment paragraf A400H sampai dengan 0000H.

Lokasi memory yang terletak dibawah paragraf A000H dapat digunakan seperti penggunaan memory biasa. Memory yang sebesar 16 Kb pertama diatas 1000H terletak pada board sistem dan memory tambahan diletakkan pada expansion board.

IBM-PC sebenarnya hanya ditunjang dengan memory sebesar 256 K dan memungkinkan untuk dikembangkan lebih besar dari 256 Kb yang akan di cek oleh program poweron self test dari ROM BIOS. Semua RAM yang dipasang pada komputer ini diletakkan pada lokasi terendah ari memory yang ada.

Peta Memory IBM PC

Alamat fisik (heks)

Keterangan

00000 – 0007F00000 – 003FF00400 – 004FF00500 – 005FF00600 – 9CFFFA0000 – A3FFF

BIOS Interupt VektorDOS Interupt VektorBIOS Data AreaDOS dan Basic data areaRAM Working SpaceCadangan

A4000 – AFFFFB0000 – B1000B1001 – B7FFFB8000 – BBFFF

Monochrome AdapterVideo BufferColor/Grafics Adapter

Page 19: materimengajarkomputer.files.wordpress.com  · Web viewC++, Lengkap dengan Contoh Program dan Pembahasan. Salah satu kelebihan dari Bahasa C / C++ adalah Karena Bahasa ini mendukung

BC000 – BFFFFC0000 – C7FFFC8000 – F3FFFCC000 – F3FFFF4000 – F5FFFF6000 – FDFFFFE000 – FFFFF

Ekpansi MemoryHarddiskCadanganUser ROM (8K)ROM BASIC (32K)ROM BIOS (8K)

Protected mode memory adressing

https://yohan.es/reverse-engineering/bab6/

Page 20: materimengajarkomputer.files.wordpress.com  · Web viewC++, Lengkap dengan Contoh Program dan Pembahasan. Salah satu kelebihan dari Bahasa C / C++ adalah Karena Bahasa ini mendukung

Bab 6: Aristektur Intel X86/AMD64Ini merupakan arsitektur yang paling populer, dipakai di PC saat ini dan sebagian tablet/ponsel. Arsitektur ini juga sangat rumit karena berkembang dan backward compatible dengan versi sebelumnya. Akan sangat sulit untuk menjelaskan keseluruhan arsitektur ini, anggap saja ini hanya perkenalan, banyak detail spesifik yang akan dibahas ketika membahas sistem operasi tertentu (Linux, Windows, macOS).

Dari sisi reverser, jika hanya ingin mereverse engineer aplikasi biasa (user mode application) ada banyak hal yang bisa dilewati. Jika ingin melakukan reverse engineering sampai level device driver atau kernel, maka ada banyak hal yang perlu dipelajari. Contohnya dalam hal managemen memori: di sisi kernel kita perlu memahami masalah paging, managemen memori, dsb, tapi di sisi aplikasi, ini tidak bisa diubah, hanya bisa dipakai.

DokumentasiDokumentasi seluruh instruksi X86 dan AMD64 dapat dibaca di situs Intel: Intel® 64 and IA-32 Architectures Software Developer Manuals. AMD memiliki sedikit perbedaan dalam instruksi tingkat lanjut, ini bisa dibaca di situs AMD Developer Guides, Manuals & ISA Documents.

Page 21: materimengajarkomputer.files.wordpress.com  · Web viewC++, Lengkap dengan Contoh Program dan Pembahasan. Salah satu kelebihan dari Bahasa C / C++ adalah Karena Bahasa ini mendukung

VersiArsitektur ini berkembang dari 25 tahun yang lalu, dan setiap update sejak 8086 masih kompatibel dengan versi sebelumnya: dari mulai 8086 (mikroprosessor 16 bit), 80286 (masih 16 bit tapi mendukung virtual memory dan memory protection), 80386 (mulai versi 32 bit), sampai chip yang terbaru yang mendukung 64 bit. Sejarah lengkap perkembangan arsitektur x86 bisa dilihat di Wikipedia.

Karena dibuat kompatibel dengan sebelumnya, ilmu mengenai arsitektur lama sebagian besar masih terpakai di arsitektur baru. Misalnya pengetahuan mengenai register yang kompatibel dengan yang lama. Register RAX (64 bit), 32 bit rendahnya ada di register EAX (32 bit, muncul sejak 386), dan 16 bit rendahnya juga ada di register AX (16 bit, ada sejak 8086) dan 8 bit rendahnya ada di register AL (8 bit, ada sejak 8086).

Sebelum Pentium, setiap rilis chip dengan arsitektur x86 menggunakan versi berurut (8086, 80186, 80286, 80386, dan 80486), tapi kemudian Intel memilih menggunakan nama pentium untuk 586, dan seterusnya aristektur 686 menggunakan nama yang berbeda di sisi Intel dan AMD.

Intel berusaha membuat arsitektur baru yang tidak kompatibel dengan seri x86 yang dinamakan Itanium, tapi ini kurang sukses untuk end user walaupun sukses di Enterprise. Sementara itu AMD membuat instruction set AMD64 yang kompatibel dengan x86. Akhirnya Intel bekerjasama dengan AMD dan membuat chip yang

Page 22: materimengajarkomputer.files.wordpress.com  · Web viewC++, Lengkap dengan Contoh Program dan Pembahasan. Salah satu kelebihan dari Bahasa C / C++ adalah Karena Bahasa ini mendukung

kompatibel dengan chip AMD64. Kadang AMD64 ini disebut juga dengan x86_64.

Proses bootSaat ini proses booting PC sudah cukup rumit dan bisa menjadi satu buku sendiri, jadi saya tidak akan membahas detail proses ini. Secara umum ada dua proses booting: yang lama memakai BIOS (Basic Input Output System) dan yang baru memakai UEFI (Universal Extensible Firmware Interface). Sebagai catatan arti Universal di sini adalah bisa berlaku untuk sistem selain x86.

Pada arsitektur yang memakai BIOS, setelah prosessor menjalankan BIOS, maka kendali ada di tangan BIOS. Semua BIOS menggunakan konvensi yang sama: meload sektor pertama floppy (boot sector) atau harddisk (master boot record/MBR) dan meload ke alamat 0000:7c00. Setelah isi diload ke memori, BIOS akan mengecek apakah dua byte terakhir adalah 055 diikuti 0xAA, jika iya, maka akan dilakukan jump ke 0000:7c00.

Dari titik tersebut, kode dalam boot sector/MBR bisa meload sektor-sektor berikutnya ke memori dan melakukan JUMP ke memori tersebut. Karena ukuran boot sector hanya 512 byte, maka isi boot sector ini biasanya sangat sederhana, hanya memanggil fungi BIOS untuk meload sektor lain dan menampilkan error jika gagal. Bagian yang diload oleh boot sector ini yang biasanya disebut sebagai boot loader.

Bootloader akan melakukan berbagai setup, misalnya pindah ke mode 32 bit atau 64 bit, lalu membaca filesystem

Page 23: materimengajarkomputer.files.wordpress.com  · Web viewC++, Lengkap dengan Contoh Program dan Pembahasan. Salah satu kelebihan dari Bahasa C / C++ adalah Karena Bahasa ini mendukung

dan mencari konfigurasi untuk booting. Setelah itu kernel bisa diload. Contoh bootloader adalah GRUB, LILO, dan NTLDR.

Dari penjelasan di atas bisa dibayangkan repotnya semua langkah ini hanya demi kompatibilitas dengan sistem lama: ada BIOS yang meload satu sektor saja dari disk, lalu satu sektor itu meload bootloader (banyak sektor), dan bootlaoder akan meload sistem operasi. Ini disederhanakan dalam UEFI.

Arsitektur yang memakai UEFI lebih mudah: Firmware UEFI bisa meload file UEFI langsung dari filesystem. File ini adalah executable khusus yang bisa berjalan tanpa sistem operasi. Aplikasi UEFI memanggil kode dalam Firmware UEFI untuk melakukan berbagai aksi misalnya meload sektor dari disk atau bahkan mengakses jaringan.

Selain aplikasi UEFI, kita juga bisa membuat Boot service driver yang merupakan driver agar UEFI bisa mengakses device khusus atau Runtime Driver yang akan tetap ada setelah sistem operasi berjalan.

Jadi di dalam UEFI: firmware akan langsung meload file bootloader, dan bootloader itu hanya perlu meload OS dengan opsi yang diset oleh pengguna.

Sistem operasiJumlah sistem operasi untuk Intel x86 ada sangat banyak, beberapa yang terkenal antara lain:

DOS

Page 24: materimengajarkomputer.files.wordpress.com  · Web viewC++, Lengkap dengan Contoh Program dan Pembahasan. Salah satu kelebihan dari Bahasa C / C++ adalah Karena Bahasa ini mendukung

Windows Linux dan segala turunannya (ChromeOS, Android,

FirefosOS) FreeBSD/NetBSD/OpenBSD Solaris

Banyak yang dulu terkenal tapi sekarang sudah tidak banyak dipakai. misalnya:

OS/2 dan eComStation Netware

Dan banyak yang lain yang kurang terkenal tapi masih aktif dikembangkan misalnya:

Plan 9 GNU/Hurd Haiku KolibriOS ReactOS HelenOS

Masing-masing sistem operasi biasanya memiliki:

Format file yang berbeda, walau ada juga format standar seperti ELF yang dipakai di beberapa sistem operasi

Memiliki cara yang berbeda untuk memanggil fungsi sistem operasi

Page 25: materimengajarkomputer.files.wordpress.com  · Web viewC++, Lengkap dengan Contoh Program dan Pembahasan. Salah satu kelebihan dari Bahasa C / C++ adalah Karena Bahasa ini mendukung

Memiliki built in library yang berbeda (kecuali jika mengimplementasikan standar tertentu misalnya POSIX)

Melakukan managemen memori dengan cara yang berbeda (kecuali jika memang ingin kompatibel, seperti ReactOS yang ingin kompatibel dengan Windows)

ToolsCompilerJumlah compiler untuk arsitektur X86/AMD64 tidak terhitung jumlahnya. Hampir semua bahasa pemrograman ada compilernya. Beberapa compiler C yang populer adalah:

Clang (Selain C juga mendukung berbagai bahasa) GCC (Selain C juga mendukung berbagai bahasa) MSVC (dari Microsoft)

DisassemblerDisassembler yang populer adalah IDA Pro, tapi selain itu juga ada banyak yang lain, misalnya: radare, sourcerer (untuk 16 bit). Secara umum berbagai debugger juga memiliki fungsi disassembler.

Page 26: materimengajarkomputer.files.wordpress.com  · Web viewC++, Lengkap dengan Contoh Program dan Pembahasan. Salah satu kelebihan dari Bahasa C / C++ adalah Karena Bahasa ini mendukung

SimulatorArsitektur x86 bisa disimulasikan dengan emulator CPU Qemu, DOSBOX, dan juga menggunakan hypervisor.

DebuggerBeberapa debugger yang terkenal:

GDB: Linux, Windows dan berbagai sistem operasi lain WinDBG: Windows OllyDbg: Windows

Masih banyak juga debugger lain yang sudah lama tidak didukung misalnya SoftICE untuk Windows 9x, DEBUG.COM untuk DOS.

ArsitekturX86 menggunakan arsitektur Von Neuman. Jumlah register, mode akses memori, dan berbagai fitur lain berkembang selama beberapa puluh tahun.

RegisterRegister arsitektur X86 berkembang dari sejak 8086, yang memiliki register 16 bit:

AX : dipecah menjadi AH dan AL

Page 27: materimengajarkomputer.files.wordpress.com  · Web viewC++, Lengkap dengan Contoh Program dan Pembahasan. Salah satu kelebihan dari Bahasa C / C++ adalah Karena Bahasa ini mendukung

BX : dipecah menjadi BH dan BL

CX : dipecah menjadi CH dan CL

DX : dipecah menjadi DH dan DL

SI : source index

DI : destination index

BP : base pointer

SP : stack pointer

IP : program counter

Ada register flags yang tidak bisa diakses langsung dengan menggunakan nama, tapi bisa diakses dengan sedikit trik sperti ini:

PUSHF

POP AX

Dan untuk mengesetnya:

PUSH AX

POPF

8086 mendukung segmented addressing dengan register:  CS  (Code Segment),  DS  (Data Segment),  ES  (Extra Segment) dan  SS  (Stack Segment).

Page 28: materimengajarkomputer.files.wordpress.com  · Web viewC++, Lengkap dengan Contoh Program dan Pembahasan. Salah satu kelebihan dari Bahasa C / C++ adalah Karena Bahasa ini mendukung

Sejak arsitektur 32 bit (sejak 80386), register-register tersebut diperluas:

EAX, EBX, ECX, EDX: versi 32 bit dari AX, BX, CX, DX, LSB dari versi 32 bit tetap diakses dari AX/BX/CX/DX

ESI, EDI, EBP, ESP, EIP: versi 32 bit dari SI, DI, BP, SP, IP

Segmen baru: FS dan GS

Sejak arsitektur 64 bit, registernya diperluas lagi:

RAX, RBX, RCX, RDX: versi 64 bit dari EAX, EBC, ECX, dan EDX

Register 64 bit general purpose baru: r8 sampai r15

RSI, RDI, RBP, RSP, RIP: versi 64 bit dari ESI, EDI, EBP, ESP, EIP

Register XMM/SSESejak Pentium MMX ada 8 register khusus ditambahkan untuk SIMD (Single Instruction Multiple Data). Register ini adalah  xmm0  sampai  xmm7 , pada mode 64 bit ada 8 register tambahan dari  xmm8  sampai  xmm15

Page 29: materimengajarkomputer.files.wordpress.com  · Web viewC++, Lengkap dengan Contoh Program dan Pembahasan. Salah satu kelebihan dari Bahasa C / C++ adalah Karena Bahasa ini mendukung

Mode eksekusiArsitektur x86 memiliki berbagai mode eksekusi, 16/32/64 bit. Di mode 16 bit, semua register 32/64 bit tidak bisa diakses, di mode 32 bit, register 64 bit tidak bisa diakses. Ketika boot pertama kali, prosessor akan masuk mode 16 bit. Di prosessor 32 bit, bootloader bisa beralih ke mode 32 bit, dan di prosessor 64 bit, bootloader bisa beralih ke mode 64 bit.

Managemen MemoriPada arsitektur 16 bit (8086), ini sangat sederhana, siapapun (program apapun) bisa mengakses program lain, termasuk juga milik sistem operasi ataupun BIOS. Karena ukuran register hanya 16 bit, maka teorinya alamat yang bisa diakses hanya 64 kilobyte, tapi 8086 mendukung segmentasi sederhana dengan register CS/DS/ES/SS, agar memori yang bisa diakses sampai dengan 1 megabyte. Alamat memori yang diakses adalah:

16 x SegmentReg + Offset.

Ketika 80286 diperkenalkan, ditambahkan protected mode sehingga memori yang bisa diakses bisa sampai 16 megabyte. Akses memori tidak lagi perkalian segment dengan nilai konstan, tapi merupakan index ke segment descriptor. Ini merupakan tabel yang berisi base address, jadi memori yang diakses menejadi:

SegmentDescriptor[SegmentReg] + Offset

Page 30: materimengajarkomputer.files.wordpress.com  · Web viewC++, Lengkap dengan Contoh Program dan Pembahasan. Salah satu kelebihan dari Bahasa C / C++ adalah Karena Bahasa ini mendukung

Untuk arsitektur 32 bit dan 64 bit, ditambahkan lagi fitur baru yaitu paging, dengan fitur ini jika memori yang diakses tidak ditemukan, maka akan terjadi page fault, sistem operasi bisa menggunakan ini untuk fitur swap memory. Selain itu di versi 32 bit ada fitur memory protection, dengan ini sistem operasi bisa membatasi memori mana yang boleh diakses oleh suatu program.

InstruksiJumlah instruksi arsitektur x86 saat ini sudah sangat banyak, banyak yang redundan, dan banyak juga instruksi sangat spesifik untuk kasus tertentu (misalnya instruksi AES). Encoding instruksi sifatnya variabel length, artinya ada instruksi yang butuh 1 byte, 2 byte, 3 byte, dan maksimum sampai dengan 15 byte.

Karena sifatnya variable length, maka serangkaian byte bisa memiliki banyak arti jika kita melakukan decoding mulai dari titik yang berbeda. Hal ini banyak digunakan oleh malware untuk teknik anti disassembler.

Contoh Program KecilBerikut ini beberapa contoh program kecil (dalam assembly) menggunakan NASM.

Page 31: materimengajarkomputer.files.wordpress.com  · Web viewC++, Lengkap dengan Contoh Program dan Pembahasan. Salah satu kelebihan dari Bahasa C / C++ adalah Karena Bahasa ini mendukung

Contoh program 16 bit DOSDOS mendukung format file COM (tanpa header sama sekali) dan file EXE (memiliki executable header). Program kecil ini formatnya COM dan menggunakan interrupt DOS (interrupt 21) untuk memanggil fungsi print yang diterminasi dengan karakter dollar ($).

bits 16

org 100h

mov dx,msg

mov ah,9

int 21h

ret

msg db 'Contoh kode COM (DOS), Intel x86 16 bit',0Dh,0Ah,'$'

Informasi mengenai berbagai interrupt di DOS bisa dilihat di Ralph Brown's Interrupt List

Contoh program 32 bit LinuxDi Linux kita bisa memanggil fungsi puts milik libray C atau memanggil langsung fungsi kernel (melakukan  syscall ) dengan interrupt 0x80.

Page 32: materimengajarkomputer.files.wordpress.com  · Web viewC++, Lengkap dengan Contoh Program dan Pembahasan. Salah satu kelebihan dari Bahasa C / C++ adalah Karena Bahasa ini mendukung

Contoh berikut ini menggunakan syscall, diambil dari http://asm.sourceforge.net/intro/hello.html

section .text

global _start ;must be declared for linker (ld)

_start: ;tell linker entry point

mov edx,len ;message length

mov ecx,msg ;message to write

mov ebx,1 ;file descriptor (stdout)

mov eax,4 ;system call number (sys_write)

int 0x80 ;call kernel

Page 33: materimengajarkomputer.files.wordpress.com  · Web viewC++, Lengkap dengan Contoh Program dan Pembahasan. Salah satu kelebihan dari Bahasa C / C++ adalah Karena Bahasa ini mendukung

mov eax,1 ;system call number (sys_exit)

int 0x80 ;call kernel

section .data

msg db 'Hello, world!',0xa ;our dear string

len equ $ - msg ;length of our dear string

dan untuk mengcompilenya

nasm -f elf contoh.asm

ld -melf_i386 contoh.o -o contoh

Contoh program 64 bit LinuxPada mode 64 bit di Linux, untuk mengakses kernel digunakan instruksi  syscall  dengan nomor syscall yang berbeda

Page 34: materimengajarkomputer.files.wordpress.com  · Web viewC++, Lengkap dengan Contoh Program dan Pembahasan. Salah satu kelebihan dari Bahasa C / C++ adalah Karena Bahasa ini mendukung

Menggunakan informasi dari http://blog.rchapman.org/posts/Linux_System_Call_Table_for_x86_64/ saya ubah program sebelumnya menjadi seperti ini:

bits 64

section .text

global _start ;must be declared for linker (ld)

_start: ;tell linker entry point

mov rdx,len ;message length

mov rsi,msg ;message to write

mov rdi,1 ;file descriptor (stdout)

mov rax,1 ;system call number (sys_write)

syscall

Page 35: materimengajarkomputer.files.wordpress.com  · Web viewC++, Lengkap dengan Contoh Program dan Pembahasan. Salah satu kelebihan dari Bahasa C / C++ adalah Karena Bahasa ini mendukung

mov rax,60 ;system call number (sys_exit)

syscall

section .data

msg db 'Hello, world!',0xa ;our dear string

len equ $ - msg ;length of our dear string

dan untuk mengcompilenya

nasm -f elf64 contoh64.asm

ld contoh64.o -o contoh64

Page 36: materimengajarkomputer.files.wordpress.com  · Web viewC++, Lengkap dengan Contoh Program dan Pembahasan. Salah satu kelebihan dari Bahasa C / C++ adalah Karena Bahasa ini mendukung