MENGENAL CARA KERJA KOMPUTER DAN BAHASA PEMROGRAMAN
Register Prosesor
Register prosesor, dalam arsitektur komputer, yaitu sebanyak kecil memori komputer yang memainkan pekerjaan dengan kecepatan
sangat tinggi yang dipakai sebagai menerapkan eksekusi terhadap program-program komputer dengan menyediakan akses
yang cepat terhadap nilai-nilai yang umum dipakai. Umumnya nilai-nilai yang
umum dipakai yaitu nilai yang sedang dieksekusi dalam waktu tertentu.
Register prosesor berdiri pada tingkat tertinggi dalam hierarki memori: ini berfaedah bahwa
kecepatannya yaitu yang sangat cepat; kapasitasnya yaitu sangat kecil; dan
harga tiap bitnya yaitu sangat tinggi. Register juga dipakai sebagai perkara
yang sangat cepat dalam sistem komputer sebagai menerapkan manipulasi data. Register umumnya diukur dengan satuan bit yang
mampu ditampung olehnya, seperti "register 8-bit", "register
16-bit", "register 32-bit", atau "register 64-bit"
dsb-nya.
Istilah register ketika ini mampu merujuk kepada himpunan register yang
mampu diindeks secara langsung sebagai menerapkan input/output terhadap suatu instruksi
yang dirumuskan oleh set instruksi. sebagai istilah ini, digunakanlah kata
"Register Arsitektur". Sebagai contoh set instruksi Intel x86 merumuskan sekumpulan delapan buah register
dengan ukuran 32-bit, tapi CPU yang mengimplementasikan set instruksi x86 mampu
mengandung lebih dari delapan register 32-bit.
Jenis register
Register
terbagi diproduksi menjadi beberapa kelas:
·
Register data, yang dipakai sebagai menyimpan angka-angka dalam bilangan bulat (integer).
·
Register alamat, yang dipakai sebagai menyimpan alamat-alamat memori dan juga sebagai mengakses
memori.
·
Register general
purpose, yang mampu dipakai sebagai menyimpan angka dan alamat
secara sekaligus.
·
Register floating-point, yang dipakai sebagai menyimpan angka-angka bilangan titik mengambang (floating-point).
·
Register konstanta (constant register), yang dipakai sebagai menyimpan
angka-angka tetap yang hanya mampu dibaca (bersifat read-only),
semacam phi, null, true, false dan
lainnya.
·
Register vektor, yang dipakai sebagai menyimpan hasil pemrosesan vektor yang dilaksanakan
oleh prosesor SIMD.
·
Register special
purpose yang mampu dipakai sebagai menyimpan data internal
prosesor, seperti halnya instruction pointer, stack pointer, dan status
register.
·
Register yang spesifik
terhadap model mesin (machine-specific
register), dalam beberapa arsitektur tertentu, dipakai sebagai menyimpan
data atau pengaturan yang berkaitan dengan prosesor itu sendiri. Karena guna
dari setiap register langsung diberi pokok ke dalam desain prosesor tertentu
saja, mungkin register jenis ini tidak diproduksi menjadi standar selang
generasi prosesor.
Ukuran register
Tabel
berikut mengandung ukuran register dan padanan prosesornya
Register |
Prosesor |
4-bit |
|
8-bit |
|
16-bit |
|
32-bit |
Intel 80386, Intel 80486, Intel Pentium Pro, Intel Pentium, Intel Pentium 2, Intel Pentium 3, Intel Pentium 4, Intel Celeron, Intel Xeon, AMD K5, AMD K6, AMD Athlon, AMD
Athlon MP, AMD Athlon XP, AMD Athlon 4, AMD Duron, AMD Sempron |
64-bit |
Intel Itanium, Intel Itanium 2, Intel Xeon, Intel Core, Intel Core 2, AMD Athlon 64, AMD Athlon X2,
AMD Athlon FX, AMD Turion 64, AMD Turion X2, AMD Sempron |
Untuk assembler program menggunakan NASM dapat dilakukan pada Linux atau
Windows, karena NASM tersedia untuk kedua sistem operasi tersebut. Netwide Assembler (NASM) adalah assembler dan dissembler untuk
arsitektur Intel x86 dan banyak digunakan untuk membuat program 16-bit, 32-bit
(IA-32), dan 64-bit (x86-64).
·
Menyusun Assembly Program Menggunakan
NASM untuk Linux
1. Membuat
FIle Sumber
Anda dapat menggunakan editor teks apa
saja, seperti Gedit, KWrite, atau XEmacs,
untuk melakukannya. Saat Anda menyimpan file ini,
simpan dengan ekstensi ASM.
2.
Merakit
File Sumber
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.
3.
Membuat
File Excutable
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.
4. Eksekusi
Program
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
1.
Menginstal
Software
Anda harus menginstal http://ccm.net/download/download 1025 NASM.
Letakkan arsip di suatu temapt, 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.
2. Membuat
File Sumber
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.
3. Merakit
File Sumber
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.exeI
Membuat Aplikasi “Hello World”
dengan Assembler
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
Membuat Input – Output dengan
assembler
Prosedur adalah
suatu blok intruksi yang secara logic melakukan suatu tugas tetentu yang dapat
dipanggil oleh program utama atau prosedur lain. Setap prosedur mempunyai suatu
tugas otomik yang tidak tergantung pada program lain. Pada beberapa bahasa
pemrograman, prosedur juga sering disebut subrutin.
Unsur penting
dalam suatu prosedur adalah nama prosedur. Suatu prosedur dapat digunakan oleh
prosedur lain atau program utama dengan cara memanggil nama prosedurnya.
Penggunaan prosedur dapat dilakukan berulang-ulang sesuai keperluan.
Dalam
pemrograman high level, terdapat dua istilah yang memiliki karakteristik yang
sedikit berbeda, yaitu konsep prosedur dan fungsi. Fungsi adalah ssubrutin yang
mengembalikan hasil, sedangkan prosedur tidak. Istilah subrutin merupan istilah
umum dari keduanya. Kata prosedur dan subrutin sering dipakai secara
bergantian.
KEYWORD PROC,
ENDP, CALL DAN RET
Dalam bahasa
assembly, KEYWORD PROC dan ENDP menandai awal dan akhir prosedur. Pada contoh
program dibawah ini terdapat dua prosedur yang diberi nama “main” dan
“first_proc”. Dalam prosedur main terdapat perintah call, yaitu perintah untuk
memanggil prosedur. Pada akhir prosedur first_proc terdapat perintah ret, yaitu
perintah untuk kembali ke intruksi pada prsedur pemanggil.
.code
Main PROC
...
Mov ax,1
Mov dx,ax
Call first_proc
...
...
Main ENDP
First_proc PROC
...
Mov cx, 2
Mov bx, 3
...
...
First_proc ENDP
Contoh program
: FIRST2PROC.ASM
Pada contoh
berikut terdapat dua buah prosedur, yaitu prosedur input_char dan calc_sum.
Prosedur input_char berfungsi untuk memasukkan karakter dari keyboard dan
mengembalikanya kedalam AL. Prosedurnya sangat sederhana, hanya mengandung dua
intruksi yang diperlukan untuk memanggil fungsi 1 DOS (input keyboard). DOS
otomatis mengembalikan karakterke dalam AL. Jadi, nilai akan tersimpan disana
ketika input_char kembali kepemanggilnya, yaitu prosedur main.
Title contoh
program subrutin
Dosseg
.model small
.stack 100h
.data
Char db ?
Array dw 100h,
200h,300h,400h,500h
Array_size equ
5
Sum dw ?
.code
Main proc
Mov ax.@data
Mov ds, ax
Call input_char
Mov char, al
Mov bx,offset
array
Mov
cx,array_size
Call calc_sum
Mov sum,ax
Mov ax,4000h
Int 21h
Main endp
Cala_sum proc
Push bx
Push cx
Mov ax,0
Cls :
Add ax,[bx]
Add bx,2
Loop csl
Pop cx
Pop bx
Ret
Calc_sum endp
End main
Prosedur
calc_sum menghitung jumblah isi array integer sampai 65,535 integer. Untuk
memangggil prosedur ini, pada prosedur main dilakukan settiing offset array.
Nilai offset array ditempatkan dalam register bx. Untuk menghitung jumlah
elemen, digunakan register cx. Program pemanggil harus menyesuaikan parameter
sesuai keperluan subrutin yang dipangggil
TIPE PROSEDUR
NEAR DAN FAR
NEAR
Pemanggilan
prosedur NEAR dilakukan ketika pemangil dan surutin berada dalammsegment
program yang sama. Dalam hal ini assembler akan membuat kode mesin untuk near
call. Sebelum mengakses subrutin, intruksi call menyimpan nilai IP (INTUKTION
POINTER) saat ini kedalam stack. Kemudian nilai IP diganti dengan nilai offset
subrutin. Dengan cara inilah subrutin dijalankan.
Intruksi RET
(kependekan dari Return) pada akhir prosrdur berfungsi untuk mengembalikan
eksekusi intuksi pada program pemanggil. Proses yang terjadi adalah nilai yang
terdapat dalam stack diambil kembali dan dimasukkan kedalam IP. Dengan cara ini
maka intruksi yang akan eksekusi berikutnya adalah intruksi yang terdapat pada
program pemanggil.
Tabel diatas
menjelaskan tentang proses pemanggilan prosedur NEAR dengan contoh offset.
FAR
Pemanggilan prosedur FAR dilakukan ketika pemanggil dan subrutin berada pada
segment kode yang berbeda. Dalam hal ini assembler akan membuat kodee mesin untuk
far call. Sebelum mengaksees subrutin, intruksi CALL terlebiih dahulu menyimpan
nilai register CS dan IP saat inii kedalam stack. Kemudian, intruksi tersebut
mengambil alamat segment subrutin kedalamm CS dan offsetnya kedalam IP.
Tabel diatas
menunjukkan prosedur main membuat pemanggiln prosedur FAR terhadap subrutin
dalam segmen berbeda. Deklarasi FAR harus ditambahkan sesudah nama subrutin 1
dan operator FAR PTR ditambahkan pada intruksi call pada saat memanggil.
Pada akhir subruti 1, assembler akan membuat intruksi mesin khusus RETF.
Intruksi ini berfungsi untuk mengembalikan eksekusi kepada pemanggilnya. Waktu
eksekusi untuk prosedur FAR lebih lambat dari pada prosedur NEAR karena adnya
penambahan proses push dan pop untuk nilai segmennya ( CS ).
2. INTERRUPT
Interrupt
terdiri dari dua jenis yaitu :
A. Interrupt
Perangkat Keras
Interrupt perangkat keras adalah sinyal
yang dikirim perangakat keras sistem yang memerlukan respons segera dari CPU.
Interrupt perangkat keras ini dihasilkan oleh chip khusus, controlle interrupt,
yang memberi sinyal pada CPU untuk menangguhkan eksekusi program yang sedang
dieksekusi dan memproses intrrupt. Contoh sederhana interrupt perangkat keras
adalah akses input dari keyboard. Pada saat salah satu kunci (key) ditekan maka
CPU akan menangguhkan program yang sedang dieksekusi dan mengalikannya untuk mengeksekusi
rutin BIOS yang membaca karakter dari port input keyboard dan menyimpannya
dalam buffer memori. CPU dapat melanjutkan mengeksekusi intruksi yang tertunda
setelah proses interrupt selesai.
Dalam pemrograman ada saatnya progremer
harus menghentikan interrupt perangkat keras secara termporer. Misalnya pada
saat melakukan operasi yang sensitif pada registe segmen dan stck. Untuk
mematikn sementara interrupt perngkat keras, diguunakan intruksi CLI ( clear
interrupt flag). Setelah normal kembali, untuk mengaktifkannya, digunakan
intruksi STI ( set interrupt flag ).
B. Interrupt
Perangkat Lunak
Interrupt perangkat lunak adalah proses
pemanggilan salah satu rutin layanan interrup BIOS atau DOS. Interrupt jenis
ini sebenarnya interrupt tiruan, bukan interrupt sesungguhnya. Istilah
interrupt masih digunakan karena proses yang terjadi mirip dengan interrupt
pada perangkat keras. Interrupt perangkat lunak menyediakan menyediaan akses
untuk menangani proses I/O secara rinci. Intruksi interrupt ditandai dengan
intruksi INT ( kependekan dari interrupt ). Intruksi INT meminta layanan dari
sistem operasi, biasanya untuk I/O. Layanan ini adalah program kecil yang
berlokasi di dalam BIOS dan bagian resident DOS.
Intriksi INT
Intriksi INT
berfungsi untuk memanggil subrutin yang yang terdapat pada sistem operasi.
Identifikasi jenis interrupt ditentukan oleh angka yang nilainya dalam range
00h-FFh. Untuk melengkapi intruksi INT, sebelumnya register AH harus diisi
terlebih dahulu dengan nomor fungsi yang mengidentifikasikan subrutin yang
diinginkan. Sintak intruksi INT adalah :
INT nomor
Intriksi INT
digunakan untuk tampilan konsol baik input maupun output, manipulasi file dan
video dan berbagai layanan lain yang disediakan oleh BIOS dan DOS.
INTERRUPT
VECTOR TABLE ( IVT )
Dalam proses interrupt, CUP mengakses
interrupt vector table, yaitu alamat memori yang besarnya 1 KB. Tabel IVT
adalah kumpulan pointer yang lebarnya 32 bit yang menunjukkan kesubrutin yang
terdapat pada sisstem operasi. Gambar dibawah ini mengilustrasikan
langkah-langkah yang diambil oleh CPU pada saat intruksi INT ditemukan dalam
program :
·
Nomor yang interrupt pada intruksi INT digunakan oleh CPU
untuk mengakses data pada interrupt vector table. Dalam contoh, INT 10h.
Intruksi ini berfungsi untuk meminta layanan video.
·
Langkah berikutnya, CPU akan mengambil alamat yang
terdapat pada IVT, yaitu (F000:F065).
·
Alamat ini digunakan untuk mengakses
subrutin DOS yang menangani interrupt pada alamat F000:F065, CPU akan
mengeksekusi fungsi yang terdapat pada alamat tersebut sampai ditemukan alamat
intruksi IRET.
Sti
Cld
Push es
Push ds
…
…
IRET
·
Pada saat ditemukan intruksi IRET
maka CPU akan mngeksekusi kembali intruksi pada program pemanggil.
Interrupt prangkat lunak memanggil rutin layanan interrupt dalam BIOS atau DOS.
Beberapa interrupt yang serring digunakan :
1. INT 10h : layanan video; rutin layanan video yang
mengatur posisi kursor, geser layar, dan menampilkan grafik video.
2. INT 16h : layanan keyboard; rutin yang membaca keyboard
dan mengecek statusnya.
3. INT 17h : layanan printer ; rutin untuk instalasi,
pint dan mengembalikan status printer.
4. INT 1Ah : rutin yang mendapat nmor jam pada
saat mesin dinyalakan, atau menset pencacah dengan nilai baru.
5. INT 1Ch : intrrup waktu bagi pengguna; ruti
kosong tang dieksekusi 18.2 kali per detik.
6. INT 21h : layanan DOS ; rutin layanan DOS untuk
masukan/ keluaran, penanganan file, manajemen memori dan dikenal sebagai fungsi
call DOS.
2.3 FUNGSI CALL DOS
INT 21h disebut juga fungsi call DOS.
Terdapat 87 fungsi berbeda yang didukung oleh interrupt ini,didentifikasikan
oleh nomor fungsi yang ditempatkan dalam register AH. Berikut ini daftar fungsi
00h sampai 0Ch :
1. 01H
: INPUT KONSOL DENGAN ECHO
Fungsi 1 DOS menunggu karakter yang
akan ditampilkan yang diinputkan dari konsol dan menyimpannya dalam register
AL. (karakter yang sedang berada dalam buffer secara otomatis akan disimpan
kedalam AL).
CTRL-BREAK aktif. Dalam contoh
berikut sebuah karakter akan diinput dan ditempatkan dalam variable bernama
char :
Mov ah, 1
Int 21h
Mov char, al
2. 02H : OUTPUT KARAKTER
Fungsi 2 DOS mengirim karakter ke
konsol. CTRL-BREAK aktif. Karakter yang akan ditampilkan disimpan dalam
register DL, seperti contoh berikut :
Mov ah, 2
Mov DL, ‘*’
Int 21h
AL diubah oleh DOS selama
pemanggilan int 21h. agar nilainya bias digunakan kembali maka terlebih dahulu
harus disimpan dalam stack sebelum pemaggilan int 21h. pada saat selesai
pemanggilan int 21h nilai AL dpat iambil kembali.
1. 05H
: OUTPUT PRINTER
Untuk mecetak karakter, tempatkan
karakter dalam DL dan panggil fungsi 5. DOS menunggu sampai printer siap untuk
menerima karakter. Output akan keluar keprinter 1(nama perangkat LPT 1). Contoh
berikut mencetak karakter dolar ($).
Mov ah, 5
Mov DL,’$’
INT 21h
Mov dl, 0Dh
INT 21h
2. 06H
: INPUT OUTPUT KONSOL LANGSUNG
Fungsi 6 DOS melakukan proses baca
atau tulis pada konsol. CTRL-BREAK tidak aktif dan tidak ada filter terhadap
karakter. Untuk meminta konsol inpt (tanpa menunggu), register DL harus ber
nilai 0FFh. Karakter disimpan dalam register AL. contoh berikut untuk
input/output :
Input karakter
Moov ah, 6
Mov dl, 0FFh
Int 21h
Output karakter
Mov ah, 6
Mov dl, ‘&’
Int 21h
Menghapus buffer keyboard. Program
aplikasi biasanya dibutuhkan untuk menghapus buffer keyboard. Berikut ini
contoh prosedur yang menggabungkan INT 21h dengan intruksi Loop untuk menghapus
buffer :
Hapus_keyboard proc
Mov cx, 15
L1 :
Mov ah,6
Mov dl,0FFh
Int 21
Loop L1
Ret
Hapus_keyboard endp
3. 07H
: INPUT KONSOL LANGSUNG
Fungsi 7 menunggu karakter yang
tidak terfilter dari konsol. Karakter tidak ditampilkan di konsol dan
CTRL-BREAK aktif. Fungsi input ini cocok untuk karakter khusus seperti karakter
fungsi dan panah kursor.
Contoh program:
Mov ah, 7
Int 21h
Mov char,al
4. 08H
: INPUT KONSOL TANPA ECHO
Fungsi 8 menunggu karakter yang
tidak difilter dari konsol tanpa menampilkannya, sementara CTRL-BREAK aktif.
Karakter disimpan dalam register AL. fungsi input ini cocok untuk larakter
khusus.
Contoh :
Mov ah, 8
Int 21h
Mov char, al
5. 09H
: OUTPUT STRING
Fungsi 9 menampilkan string karakter
pada konsol. Alamat offset string harus ada dalam DX, dan string harus diakhiri
oleh karakter dolar ($).
Contoh :
Mov ah, 9
Mov dx, offset string
Int 21h
…
…
String db ‘hallo kota bandung.’,Odh,
Oah,’$’
6. 0AH
: BUFFER INPUT KONSOL
Fungsi 0Ah membaca string karakter
sampai 255 karakter dari konsol dan menyimpannya dalam buffer. Enter digunakan
untuk mengakhiri input. CTRL-BREAK aktif dan seluruh karakter ditampilkan pada
konsol.
Sebelum fungsi dipanggil, DX harus diisi
dengan offset area parameter keyboard. Format area sebagai berikut :
Dalam byte offset 0 ditempatkan
jumlah maksimum karakter yang bias diinput. Jika jumlahnya 5, misalnya, dos
akan mengizinkan 4 karakter tambah enter yang diinput. Sesudah interrupt
dipanggil, dos menempatkan jumlah karakter yang benar-benar pada byte offset 1.
Karakter tersebut sisimpan mulai offset 2. Contoh :
Mov ah, 0Ah
Mov dx, offset max_kunci
Int 21h
…
…
Max_kuncidb 32
Chars_input db ?
Buffer db 32 dup(0)
Misalnya, kita meninputkan 21
karakter dari konsol :
Nama
saya Demian Saba
Maka isi buffer akan sebagai berikut
:
1. 0B
H : MENGAMBIL STATUS INPUT KONSOL
Fungsi 0Bh adalah menerima buffer
keyboard DOS untuk melihat karakter dalam buffer. Jika ada karakter, DOS
mengembalikan nilai 0FFh dalam register AL. jika tidak, DOS mengembalikan 00
dalam register Al, sementara CTRL-BREAK aktif. Contoh :
Mov ah, 0Bh
Int 21
2. 0CH
: MEMBERSIHKAN BUFFER INPUT, MENEMUKAN FUNGSI INPUT
Fungsi 0Ch membersihkan
buffer keyboard dan memanggil fungsi input konsol. Funsi yang dipanggil
(1,6,7,dan 8) diidentifikasikan oleh nilai dalam AL. karakter input akan
dikembalikan dalam AL.contoh :
Mov ah, 0Ch
Mov al, 1
Int21h
Mov chr, al
Input keyboard level BIOS (INT 16H)
Cara langsung untuk mengambil input
keyboard adalah dengan mengunakan int 16h layanan keyboard dalam system BIOS.
Berikut ini daftar layanan INT 16h :
Analisa Instruksi Komputasi
Dengan Objdumb
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.
Komentar
Posting Komentar