Register prosesor, dalam arsitektur dalam adalah sejumlah kecil memori komputer yang bekerja dengan kecepatan sangat tinggi yang digunakan untuk melakukan eksekusi terhadap program-program komputer dengan menyediakan akses yang cepat terhadap nilai-nilai yang umum digunakan. Umumnya nilai-nilai yang umum digunakan adalah nilai yang sedang dieksekusi dalam waktu tertentu.
Register prosesor berdiri pada tingkat tertinggi dalam hierarki memori: ini berarti bahwa kecepatannya adalah yang paling cepat; kapasitasnya adalah paling kecil; dan harga tiap bitnya adalah paling tinggi. Register juga digunakan sebagai cara yang paling cepat dalam sistem komputer untuk melakukan manipulasi data. Register umumnya diukur dengan satuan bit yang dapat ditampung olehnya, seperti "register 8-bit", "register 16-bit", "register 32-bit", atau "register 64-bit" dan lain-lain.
Istilah register saat ini dapat merujuk kepada kumpulan register yang dapat diindeks secara langsung untuk melakukan input/output terhadap sebuah instruksi yang didefinisikan oleh set instruksi. untuk istilah ini, digunakanlah kata "Register Arsitektur". Sebagai contoh set instruksi Intel x86 mendefinisikan sekumpulan delapan buah register dengan ukuran 32-bit, tetapi CPU yang mengimplementasikan set instruksi x86 dapat mengandung lebih dari delapan register 32-bit.iiiooo
Menyusun Assembly Program Menggunakan NASM untuk Linux
Anda dapat menggunakan editor teks apa saja, seperti Gedit, KWrite, atau XEmacs, untuk melakukannya. Saat Anda menyimpan file ini, simpan dengan ekstensi ASM.
Pada langkah ini, Anda perlu mengunduh software dan menginstal NASM di komputer Anda. Jika Anda menggunakan Debian atau Ubuntu, cukup ketik perintah berikut ini:
sudo apt-get install nasm
Jika Anda menggunakan paket distribusi Linux lainnya, Anda harus menggunakan manajer paket bawaan dari distribusi Linux Anda (misalnya Urpmi, Yum, Emerge) atau mengunduh NASM dari situs web resminya.
Gunakan perintah berikut ini untuk mulai merakit file sumber:
nasm -f elf test.asm
Dalam contoh berikut ini, file ASM yang tersimpan diberi nama test.asm. Proses ini akan membuat file bernama test.o dalam direktori yang sama.
N.B. "File ini masih tidak dapat dieksekusi. Ini adalah file objek"
Sekarang, setelah membuat file objek bernam test.o, kita perlu membuat file executable untuk proses eksekusi.
Program Anda mungkin dimulai dengan prosedur bernama _start. Ini artinya program Anda memiliki titik masuknya sendiri, tanpa menggunakan fungsi main. Bagaimanapun, Anda akan membutuhkan "l" untuk membuat file eksekutor:
ld test.o -o test
Sebagai alternatif, program Anda mungkin dimulai dengan prosedur yang disebut main. Anda akan membutuhkan "gcc" untuk membuat file yang dapat dieksekusi:
gcc test.o -o test
Sekarang, file executable telah dibuat, diuji, dan berada di direktori yang Anda gunakan.
Untuk emmbuat program yang disebut test, cukup ketik perintah berikut:
. / test
Menyusun Assembly Program Menggunakan NASM untuk Windows
Fungsi utama NASM tidak tersedia pada WIndows dan harus menggunakan WinMain.
Jika titik masuk Anda adalah _start atau main, maka Anda perlu mengubah _start menjadi _WinMain @ 16. Selain itu, ubah ret pada titik akhir prosedur menjadi ret 16:
section .text
global _WinMain@16
_WinMain@16:
mov eax, 0
ret 16
Anda harus menginstal NASM. Letakkan arsip di suatu tempat, agar dapat digunakan lain waktu. Bagian yang cukup sulit adalah menginstal MinGW, yang merupakan program development environment untuk Windows:
Pilih versi terbaru MingGW dari A-Z. Mulai proses instalasi, namun jangan lalukan pembaruan program untuk sementara ini. Tinggalkan semua opsi tambahan, dan tunggu proses instalasi.
Sekarang, masukkan NASM dalam MinGW. Buka arsip NASM. Pada tahap ini, Anda perlu mendapatkan folder yang berisi file dengan nama nasm.exe. Salin file ini ke dalam direktori C: \ MinGW \ bin.
Seperti pada Linux, tidak perlu memilih editor teks khusus saat membuat file sumber untuk NASM. Anda dapat menggunakan Notepad. Namun perlu diketahui, bahwa Notepad akan memberi tambahan ekstensi TXT pada akhir file. Untuk menghilangkan ambiguitas, Anda direkomendasikan untuk memeriksa lagi ekstensi file Anda.
Dalam keadaan apapun, hindari menggunakan program pengolah kata seperti Word atau WordPad.
Jika Anda ingin, Anda juga dapat menggunakan editor teks yang didesain untuk membuat file NASM, seperti NasmEdit IDE.
Pastikan Anda telah menyimpan file sumber dengan ekstensi ASM.
Buka jendela Command melalui menu Start > Run dan ketik cmd.exe.
Dengan menggunakan perintah cd, pergi ke folder yang berisi file sumber Anda. Saat Anda berada pada direktori tersebut, gabungkan file sumber Anda (test.asm) dengan perintah berikut:
nasm -f win32 test.asm -o test.o
Sekarang, Anda telah membuat file objek. Langkah berikutnya adalah file tersebut sebagai file yang dapat dieksekusi.
- Pembuatan dan Eksekusi Program
Dari jendela Command Anda, ketik perintah akhir untuk membuat bagian yang dapat dieksekusi:
ld test.o -o test.exe
Program
bahasa Assembly Hello World
Disini saya akan menjelaskan atau lebih tepatnya mempraktekkan langsung bagaimana membuat program sederhana dengan menggunakan bahasa assembly di OS linux yaitu menggunakan NASM.
NASM merupakan compiler untuk bahasa
pemrograman assembly pada sistem operasi linux, dan perlu kita ketahui kalau di
sistem operasi windows digunakan tasm (turbo assembly). dan saya menganggap
anda sudah mengerti dasar-dasar bahasa Assembly.
- Ok
pertama-tama mari kita install nasm dengan menggunakan Terminal
Setelah itu kita buat program sederhana
menggunakan aplikasi editor, kali ini saya menggunakan gedit, lalu ketik
program berikut:
; section text khusus buat code
section .text
global _start
_start:
; systemcall => write(1,msg,len)
mov edx,len ; panjang
string dimasukkan dalam register EDX
mov ecx,msg ; alamat memori yang
menyimpan string dimasukkan dalam register ECX
mov ebx,1 ;
file descriptor (1=stdout=defaultnya console) disimpan
dalam register EBX
mov eax,4 ;
Nomor syscall 4 adalah fungsi sys_write()
int 0x80 ;
panggil system call dengan interrupt 80 hexa.
; systemcall => exit(0)
xor ebx,ebx ;
membuat EBX menjadi 0 sebagai return code ketika exit
mov eax,1 ;
nomor syscall 1 adalah fungsi exit()
int 0x80 ;
panggil system call dengan interrupt 80 hexa.
section .data ; section data khusus
buat data/variable
msg db "Hello, World!",0xa ;
String diikuti dengan 0xA yaitu new line \n.
len equ $ - msg ;
Panjang
string didapat dengan mengurangi address di baris ini dengan alamat string.
Ketika sudah selesai mengetik program diatas, lalu simpan di folder yang anda inginkan dengan file dengan format .asm (contoh : hello.asm), dan kali ini saya akaan menyimpan di Documents.
Kemudian lakukan compile program
dari source *.asm ke *.o sekalian output dari program
diatas yaitu dengan cara:
Selamat, anda telah berhasil membuat program program
sederhana dengan output Hello World dalam bahasa Assembly.
Input dan Output
Input dan output adalah bagian mendasar dari komputasi, tidak ada cara yang mereka dilakukan dalam bahasa assembly. Hal ini karena cara I / O bekerja tergantung pada set up komputer dan sistem operasi berjalan, tidak hanya apa jenis prosesor yang dimilikinya. Pada contoh bagian contoh Hello World menggunakan MS-DOS panggilan sistem operasi dan contoh setelah menggunakan BIOS panggilan. Hal ini dimungkinkan untuk melakukan I / O dalam bahasa assembly. Memang, bahasa assembly umumnya dapat mengekspresikan apapun yang komputer mampu melakukan. Namun, meskipun ada petunjuk untuk menambahkan dan cabang dalam bahasa assembly yang akan selalu melakukan hal yang sama tidak ada petunjuk dalam bahasa assembly yang selalu melakukan I / O.
Intruksi dasar
Pada program COM perintah ini akan selalu digunakan. Perintah ini digunakan untuk memberitahukan assembler supaya program pada saat dijalankan (diload ke memory) ditaruh mulai pada offset ke 100h(256) byte. Dapat dikatakan juga bahwa kita menyediakan 100h byte kosong pada saat program dijalankan. 100h byte kosong ini nantinya akan ditempati oleh PSP(Program Segment Prefix) dari program tersebut. PSP ini digunakan oleh DOS untuk mengontrol jalannya program tersebut.
Perintah JMP(JUMP) ini digunakan untuk melompat menuju tempat yang ditunjukkan oleh perintah JUMP. Adapun syntaxnya adalah:
JUMP Tujuan .
Dimana tujuannya dapat berupa label seperti yang digunakan pada bagan diatas. Mengenai perintah JUMP ini akan kita bahas lebih lanjut nantinya. Perintah JUMP yang digunakan pada bagan diatas dimaksudkan agar melewati tempat data program, karena jika tidak ada perintah JUMP ini maka data program akan ikut dieksekusi sehingga kemungkinan besar akan menyebabkan program anda menjadi Hang.
Mov
Perintah untuk mengisi, memindahkan, memperbaharui isi suatu register, variabel ataupun suatu lokasi memori.
Penulisan perintah:
MOV [operand A],[operand B]
Dengan ketentuan operand A merupakan register, variabel, lokasi memori dan ketentuan isi operand B berupa register, variabel, lokasi memori ataupun bilangan.
Operand B merupakan bilangan asal yang akan diisikan ke operand A, dengan kata lain operand A merupakan tujuan pengisian atau penduplikatan dari operand B.
Contoh:
MOV AH, AL
Operand A dari perintah diatas adalah register AH
Operand B dari perintah diatas adalah register AL
Hal yang dilakukan dari perintah diatas adalah menduplikatkan isi register AL ke register AH
MOV AH,02
Operand A dari perintah diatas adalah register AH
Operand B dari perintah diatas adalah bilangan 02
Hal yang dilakukan dari perintah diatas adalah memasukkan 02 ke register AH
¨ Int (Interrupt)
Perintah Int (Interrupt) mempunyai cara kerja yang sama dengan perintah GOSUB pada BASIC, hanya pada Int, subrotine yang akan dipaggil sudah tersedia pada memori komputer.
Subrotine yang dipanggil menggunakan perintah Int (interrupt) terdiri dari 2 jenis, yaitu:
1. Bios Interrupt yaitu Int yang disediakan oleh BIOS (Basic Input Output System). Interrupt yang termasuk dalam Interrupt BIOS adalah Int 0 hingga Int 1F hexa.
2. DOS Interrupt yaitu Int yang disediakan oleh DOS (Disk Operating System). Interupt yang termasuk dalam Interrupt DOS adalah Interrupt diatas Int 1F hexa. Misal: Interrupt 20 hexa, Interrupt 21 hexa dll.
Int 20
Int 20h merupakan salah satu dari DOS Interrupt. Tugas Int 20h adalah memberhentikan proses komputer terhadap suatu program COM. Bila pada semua program Com tidak terdapat Int 20h, maka sudah bisa dipastikan bahwa bila program diproses, maka akan terjadi hanging pada komputer. Hal ini terjadi karena komputer tidak menemukan perintah pemberhentian proses.
Int 21h Service 02
Int 21h juga merupakan salah satu dari DOS Interrupt. Int 21h mempunyai banyak tugas, maka tugasnya dibagi-bagi menjadi beberapa bagian. Untuk memanggil bagian-bagian itu, perlu disertakan nomor bagiannya yang disebut Service Number.
Untuk menjalankan fungsi Int 21h service 02 harus dipenuhi beberapa syarat:
1. Register AH, harus berisi service number dari Int 21h yang akan dijalankan (02h)
2. Register DL, harus berisi bilangan hexa dari karakter ASCII yang akan dicetak
Q (Quit)
Bila kita mengetik Q dan menekan Enter, maka akan segera kembali ke DOS Prompt.
Contoh:
A>DEBUG
-Q
A>
¨ H (Hexa)
Perintah yang melaksanakan penjumlahan dan pengurangan terhadap dua bilangan hexa.
Bentuk Umum Instruksi:
H operand1 operand2
Contoh:
-H 2204 2012
4216 01F2
Pada perintah diatas terdapat dua bilangan. Bilangan sebelah kiri adalah penjumlahan kedua bilangan tersebut dan sebelah kanan adalah pengurangan kedua bilangan tersebut.
¨ R (Register)
Perintah ini adalah untuk mengetahui isi masing-masing register pada saat mengetik R dan menekan Enter.
Contoh:
-R
AX=0000 BX=0000 CX=0000 DX=0000 SP=CE2E BP=0000 SI=0000 DI=0000
DS=0FD8 ES=0FD8 CS=0FD8 IP=0100 MV UP DI PL MZ MA PO NC
0FD8:0100 E603 OUT 03,AL
¨ A (Assembler)
Perintah ini berguna untuk tempat menulis program Assembler.
Contoh:
-A100
0fD8:100
Pada sebelah kiri bawah huruf A terdapat angka yang merupakan pernyataan segment dan offset dimana anda menempatkan program.
¨ N (Name)
Perintah ini untuk memasukkan nama program setelah program dibuat.
Bentuk Umum Instruksi:
N [Drive]: [nama program]
Contoh:
-N B:COBA.COM
¨ RCX (Register CX)
Perintah untuk mengetahui dan memperbaharui isi register CX yang merupakan tempat penampungan panjang program yang sedang aktif sebelum dijalankan (running).
Contoh:
-RCX
CX 0000
.
.
.
¨ RIP (Register IP)
Peirntah yang memberitahu komputer untuk memulai proses program dari titik tertentu (selalu dimulai dari 100 hexa).
Contoh:
-RIP
IP 0100
.
.
¨ W (Write)
Setelah selesai membuat program dan menentukan RCX dan RIP dari program yang dibuat, adalah menulis program itu dahulu sebelum memprosesnya.
Contoh:
-W
Writing 0008 bytes
¨ G (Go)
Untuk memproses di dalam DEBUG ketik huruf G dan tekan Enter, maka program yang ditulis akan dijalankan.
Contoh:
-G
A
Program terminated normally
¨ T (Trace)
Perintah ini untuk memproses sebaris program saja.
Contoh:
-T
AX=0200 BX=0000 CX=0008 DX=0000 SP=CE2E BP=0000 SI=0000 DI=0000
DS=0FD8 ES=0FD8 SS=0FD8 CS=0FD8 IP=0102 MV UP DI PL NZ NA PO NC
0FD8:0102 B241 MOV DI,41
¨ U (Unassemble)
Fungsi ini sama dengan fungsi LIST pada BASIC, yaitu untuk melihat ptogram yang sedang aktif saat itu, maka yang ditampilkan adalah program sepanjang 21h.
Contoh:
-U
0FD8:0102 B241 MOV DI,41
0FD8:0104 CD21 INT 21
0FD8:0106 CD20 INT 20
0FD8:0108 D9B90300 FSTCW [BX+DI+0003]
0FD8:010C F3 REPZ
0FD8:010D A4 MOVSB
0FD8:010E B020 MOV AL,20
0FD8:0110 AA STOSB
0FD8:0111 C3 RET
0FD8:0112 3C80 CMP AL,80
0FD8:0114 7214 JB 012A
0FD8:0116 2C80 SUB AL,80
0FD8:0118 1E PUSH DS
0FD8:0119 53 PUSH DX
0FD8:011A BE1E9142 MOV DS:[4291]
0FD8:011E C51E040C LDS BX,[0C04]
Untuk menentukan sendiri panjang program yang ingin dilihat dapat digunakan perintah L (Length) dibelakang U.
Bentuk Umum Instruksi:
U [tempat memulai Unassemble] L [panjang program]
Contoh:
-U100 L 0D
0FD8:0100 B910000 MOV CX,0010
0FD8:0103 B402 MOV AH,02
0FD8:0105 B241 MOV DL,41
0FD8:0107 CD21 INT 21
0FD8:0109 E2F8 LOOP 0103
0FD8:010B CD20 INT 20
UTILITY ASSEMBLER
Menjalankan Assembler
Untuk memulai pembuatan program, harus dijalankan DEBUG.COM terlebih dahulu.
Contoh:
A>Debug
-A100
0FD8:0100
Pada saat mengetik A100 berarti bahwa kita memulai sebuah program Assembler dengan byte pertama program yang diletakkan pada posisi 100 hexa.
Insruksi Input dan Output
Single-key input
Input: AH = 1
Output: AL = Kode ASCII jika tombol karakter ditekan
Display a character or execute a control function
Input: AH = 2
DL = Kode ASCII dari karakter tampilan atau
karakter kontrol
Output: AL = Kode ASCII dari karakter tampilan atau
karakter kontrol
= 0 jika tombol non-karakter yang ditekan
Komputasi yaitu cara untuk menemukan pemecahan masalah dari data input dengan menggunakan suatu algoritma. Hal ini ialah apa yang disebut dengan teori komputasi, suatu sub-bidang dari ilmu komputer dan matematika. Selama ribuan tahun, perhitungan dan komputasi umumnya dilakukan dengan menggunakan pena dan kertas, atau kapur dan batu tulis, atau dikerjakan secara mental, kadang-kadang dengan bantuan suatu tabel. Namun sekarang, kebanyakan komputasi telah dilakukan dengan menggunakan komputer.
Secara umum,Ilmu komputasi adalah bidang ilmu yang mempunyai perhatian pada penyusunan model matematika dan teknik penyelesaian numerik serta penggunaan komputer untuk menganalisis dan memecahkan masalah-masalah ilmu (sains). Dalam penggunaan praktis, biasanya berupa penerapan simulasi komputer atau berbagai bentuk komputasi lainnya untuk menyelesaikan masalah-masalah dalam berbagai bidang keilmuan, tetapi dalam perkembangannya digunakan juga untuk menemukan prinsip-prinsip baru yang mendasar dalam ilmu.
Nah,untuk selanjutnya kita akan membahas inti topik dari artikel ini. Disini saya akan sharing mengenai bagaimana menganalisa Instruksi Komputasi dengan Obdump pada Linux yang nantinya akan jadi seperti gambar berikut ketika selesai.
Untuk memeriksa isi dari file kode objek, terdapat suatu program yang bernama disassembler. Program tersebut dapat melakukan konversi file kode objek menjadi format assembly. Pada sistem Unix/Linux, program OBJDUMP (singkatan dari “OBJect DUMP”) dapat dipanggil menggunakan flag “-d” : $ objdump –d -m \386:x86-64 .hello Untuk menghasilkan kode yang dapat dieksekusi, kita harus menjalankan linker pada seluruh file kode objek. Program eksekusi akan dihasilkan dengan menggabungkan seluruh file kode objek.
File program eksekusi prog yang dihasilkan berisi tidak hanya kode yang kita masukkan, tetapi juga informasi yang digunakan untuk memulai dan mengakhiri program. Kita juga dapat melakukan dissasamble file prog : $ objdump –d,prog Disassembler akan mengekstrak berbagai urutan kode yang terdapat pada file eksekusi prog.
0 Response to "Mengenal Cara Kerja Komputer dan Bahasa Pemrograman "
Post a Comment