Kamis, 26 Januari 2012

Bahasa Assembler



Bahasa Assembly adalah bahasa komputer yang kedudukannya di antara bahasa mesin dan bahasa level tinggi misalnya bahasa C atau Pascal. Bahasa C atau Pascal dikatakan sebagai bahasa level tinggi karena memakai kata-kata dan pernyataan yang mudah dimengerti manusia, meskipun masih jauh berbeda dengan bahasa manusia sesungguhnya. Bahasa mesin adalah kumpulan kode biner yang merupakan instruksi yang bisa dijalankan oleh komputer. Sedangkan bahasa Assembler memakai kode Mnemonic untuk menggantikan kode biner, agar lebih mudah diingat sehingga lebih memudahkan penulisan program.
Program yang ditulis dengan bahasa Assembly terdiri dari label; kode mnemonic dan lain sebagainya, pada umumnya dinamakan sebagai program sumber (Source Code) yang belum bisa diterima oleh prosessor untuk dijalankan sebagai program, tapi harus diterjemahkan dulu menjadi bahasa mesin dalam bentuk kode biner.

Bagan kerja proses Assembly

Program sumber dibuat dengan program editor biasa, misalnya Note Pad pada Windows atau SideKick pada DOS,  selanjutnya program sumber diterjemahkan ke bahasa mesin dengan menggunakan program Assembler. Hasil kerja program Assembler adalah “program objek” dan juga “assemly listing”.
Program Objek berisikan kode kode bahasa mesin, kode-kode bahasa mesin inilah yang diumpankan ke memori-program prosessor.
Assembly Listing merupakan naskah yang berasal dari program sumber, dalam naskah tersebut pada bagian sebelah setiap baris dari program sumber diberi tambahan hasil terjemahan program Assembler. Tambahan tersebut berupa nomor memori-program berikut dengan kode yang akan diisikan pada memori-program bersangkutan. Naskah ini sangat berguna untuk dokumentasi dan sarana untuk menelusuri program yang ditulis.
Yang perlu diperhatikan adalah setiap prosessor mempunyai konstruksi yang berlainan, instruksi untuk mengendalikan masing-masing prossesor juga berlainan, dengan demikian bahasa Assembly untuk masing-masing prosessor juga berlainan, yang sama hanyalah pola dasar cara penulisan program Assembly saja.

Konsep-konsep dasar bahasa Assembler
Informasi Unit
Dalam rangka untuk PC untuk memproses informasi, maka perlu bahwa informasi ini berada di sel khusus yang disebut register. Register adalah kelompok 8 atau 16 sandal jepit.
Sebuah flip-flop adalah suatu perangkat yang mampu menyimpan dua tingkat tegangan, satu rendah, teratur 0,5 volt, dan satu sama lain, biasanya dari 5 volt. Rendahnya tingkat energi dalam flip-flop ditafsirkan sebagai off atau 0, dan tingkat tinggi atau 1. Negara-negara ini biasanya dikenal sebagai bit, yang merupakan unit informasi terkecil dalam komputer.
Sekelompok 16 bit ini dikenal sebagai kata; kata dapat dibagi dalam kelompok-kelompok dari 8 bit disebut byte, dan kelompok 4 bit disebut camilan.

Sistem numerik
Sistem numerik yang kita gunakan sehari-hari adalah sistem desimal, tetapi sistem ini tidak nyaman untuk mesin karena informasi ditangani dikodifikasikan dalam bentuk on atau off bit, ini cara kodifikasi membawa kita ke perlunya mengetahui perhitungan posisi yang akan memungkinkan kita untuk mengekspresikan nomor di setiap pangkalan di mana kita membutuhkannya.
Hal ini dimungkinkan untuk mewakili nomor yang ditentukan dalam basis apapun melalui rumus berikut:
Dimana n adalah posisi awal digit dari kanan ke kiri dan penomoran dari nol. D adalah digit di mana kita beroperasi dan B adalah basis angka yang digunakan.

 Metode representasi data di komputer.
Kode ASCII
ASCII singkatan dari American Standard Kode untuk Informasi Interchange. Kode ini memberikan huruf-huruf alfabet, angka desimal dari 0 sampai 9 dan beberapa simbol tambahan bilangan biner 7 bit, bit ke-8 menempatkan dalam keadaan off atau 0. Dengan cara ini setiap huruf, angka atau karakter khusus menempati satu byte dalam memori komputer.
Kita dapat mengamati bahwa metode representasi data yang sangat tidak efisien pada aspek numerik, karena dalam format biner satu byte tidak cukup untuk mewakili angka 0 sampai 255, tapi di sisi lain dengan kode ASCII satu byte dapat mewakili hanya satu digit . Karena inefisiensi ini, kode ASCII ini terutama digunakan dalam memori untuk mewakili teks.
Metode BCD
BCD adalah akronim dari Kode Biner Desimal. Dalam kelompok notasi dari 4 bit digunakan untuk mewakili setiap digit desimal dari 0 sampai 9. Dengan metode ini kita dapat mewakili dua digit per byte informasi.
Bahkan ketika metode ini jauh lebih praktis untuk representasi angka dalam memori dibandingkan dengan kode ASCII, hal itu masih kurang praktis daripada biner karena dengan metode BCD kita hanya dapat mewakili angka 0-99.
Di sisi lain dalam format biner kita dapat mewakili semua angka dari 0 sampai 255.
Format ini terutama digunakan untuk mewakili angka yang sangat besar dalam aplikasi perdagangan karena memfasilitasi operasi menghindari kesalahan.
Representasi floating point
Representasi ini didasarkan pada notasi ilmiah, ini, untuk mewakili nomor di dua bagian: dasar dan eksponen.
Sebagai contoh, nomor 1234000, dapat direpresentasikan sebagai 1,123 * 10 ^ 6, dalam hal ini notasi eksponen terakhir menunjukkan kepada kami jumlah ruang yang titik desimal harus dipindahkan ke kanan untuk memperoleh hasil yang asli.
Dalam kasus eksponen negatif, akan menunjukkan kepada kita jumlah ruang yang titik desimal harus dipindahkan ke kiri untuk mendapatkan hasil yang asli.

Menggunakan program Debug
Program proses penciptaan
Untuk pembuatan program perlu mengikuti lima langkah:
Desain algoritma, tahap masalah yang akan dipecahkan adalah dibentuk dan solusi terbaik adalah diusulkan, menciptakan squematic
diagram digunakan untuk usulan solusi yang lebih baik. Coding algoritma, terdiri dalam menulis program dalam beberapa bahasa pemrograman, bahasa assembly dalam kasus khusus ini, mengambil sebagai basis solusi yang diajukan pada langkah sebelumnya. Terjemahan ke bahasa mesin, adalah penciptaan program objek, dengan kata lain, program ditulis sebagai urutan nol dan
orang yang dapat diinterpretasikan oleh prosesor. Menguji program, setelah program terjemahan ke dalam bahasa mesin, jalankan program dalam mesin komputer. Tahap terakhir adalah penghapusan kesalahan terdeteksi pada
program pada tahap uji. Koreksi kesalahan biasanya membutuhkan pengulangan dari semua langkah dari pertama atau kedua.

CPU register
CPU memiliki 4 register internal, masing-masing 16 bit. Empat yang pertama, AX, BX, CX, DX adalah dan penggunaan umum register dan juga dapat digunakan sebagai register 8 bit, jika digunakan dalam sedemikian rupa maka perlu untuk merujuk kepada mereka sebagai contoh seperti: AH dan AL, yang merupakan byte tinggi dan rendah dari AX register. Nomenklatur ini juga berlaku untuk BX, CX, dan register DX.
Register dikenal dengan nama khusus mereka:
AX Akumulator
Base register BX
Menghitung CX mendaftar
DX data mendaftar
DS segmen data mendaftar
Segmen ES mendaftar Ekstra
Baterai SS segmen mendaftar
CS Kode segmen mendaftar
Dasar pointer BP mendaftar
Indeks Sumber SI mendaftar
Indeks Takdir DI mendaftar
Baterai SP pointer mendaftar
Selanjutnya pointer instruksi IP mendaftar
F Bendera mendaftar

Debug program
Untuk membuat sebuah program dalam assembler ada dua pilihan, yang pertama adalah dengan menggunakan TASM atau Turbo Assembler, Borland, dan yang kedua adalah dengan menggunakan debugger - pada bagian pertama kita akan menggunakan yang terakhir karena ditemukan di setiap PC dengan MS-DOS, yang membuatnya tersedia untuk setiap pengguna yang memiliki akses ke mesin dengan karakteristik ini.
Debug hanya dapat membuat file dengan ekstensi. COM, dan karena karakteristik jenis-jenis program yang mereka tidak dapat lebih besar bahwa 64 kb, dan mereka juga harus mulai dengan perpindahan, offset, atau 0100H arah memori dalam segmen tertentu.
Debug menyediakan satu set perintah yang memungkinkan Anda melakukan sejumlah yang berguna
operasi:
Sebuah Merakit instruksi simbolis ke dalam kode mesin
D Tampilan isi dari area memori
E Masukkan data ke dalam memori, dimulai pada lokasi tertentu
G Jalankan program dieksekusi dalam memori
N Nama program
P Lanjutkan, atau mengeksekusi satu set instruksi yang terkait
Q Keluar dari program men-debug
R Menampilkan isi dari satu atau lebih register
T Trace isi dari satu instruksi
U unassembled kode mesin ke dalam kode simbolik
W Menulis program ke disk
Hal ini dimungkinkan untuk memvisualisasikan nilai-nilai register internal dari CPU menggunakan program Debug. Untuk mulai bekerja dengan Debug, ketik prompt berikut di komputer Anda:
C: /> Debug [Enter]
Pada baris berikutnya dasbor akan muncul, ini adalah indikator Debug, pada saat ini petunjuk Debug dapat diperkenalkan dengan menggunakan perintah berikut:
-R [Enter]
AX = 0000 BX = 0000 CX = 0000 DX = 0000 SP = ffee BP = 0000 SI = 0000 DI = 0000
DS = 0D62 = 0D62 ES SS = 0D62 = 0D62 CS IP = 0100 NV EI PL NZ NA PO NC
0D62: 2E 0100 CS:
0D62: 0101 CMP BYTE PTR 803ED3DF00 [DFD3], 00 CS: DFD3 = 03
Semua isi dari register internal dari CPU yang akan ditampilkan, sebuah
alternatif melihat mereka adalah dengan menggunakan "r" perintah menggunakan sebagai parameter
nama register yang nilainya ingin dilihat. Sebagai contoh:
-RBX
BX 0000
:
Instruksi ini hanya akan menampilkan isi dari register BX dan indikator berubah Debug dari "-" untuk ":"
Ketika prompt seperti ini, adalah mungkin untuk mengubah nilai dari register yang terlihat dengan mengetikkan nilai baru dan [Enter], atau nilai lama dapat dibiarkan dengan menekan [Enter] tanpa mengetik nilai lain.

Assembler struktur
Dalam bahasa assembly baris kode memiliki dua bagian, yang pertama adalah nama dari instruksi yang akan dieksekusi, dan yang kedua adalah parameter dari perintah. Sebagai contoh: add ah bh
Berikut "menambahkan" adalah perintah yang akan dieksekusi, dalam hal ini sebuah tambahan, dan "ah" serta "bh" adalah parameter.
Sebagai contoh: mov al, 25
Dalam contoh di atas, kita menggunakan instruksi mov, itu berarti memindahkan nilai 25 dengan al mendaftar.
Nama dari instruksi dalam bahasa ini terbuat dari dua, tiga atau empat huruf. Instruksi-instruksi ini juga disebut nama atau kode mnemonik operasi, karena mereka mewakili fungsi prosesor akan melakukan.
Kadang-kadang instruksi yang digunakan sebagai berikut:
tambahkan al, [170]
Kurung dalam parameter kedua menunjukkan kepada kita bahwa kita akan bekerja dengan isi sel memori nomor 170 dan tidak dengan nilai 170, ini dikenal sebagai pengalamatan langsung.
Membuat program assembler dasar
Langkah pertama adalah untuk memulai Debug, langkah ini hanya terdiri dari mengetik men-debug [Enter] pada sistem operasi prompt.
Untuk merakit sebuah program pada Debug, "a" (merakit) Perintah ini digunakan; ketika perintah ini digunakan, alamat di mana Anda ingin untuk memulai perakitan dapat diberikan sebagai parameter, jika parameter ini diabaikan perakitan akan dimulai pada wilayah yang ditentukan oleh CS: IP, biasanya 0100h, yang merupakan lokasi di mana program dengan COM ekstensi harus.
dimulai. Dan itu akan menjadi tempat kita akan digunakan sejak Debug hanya dapat membuat jenis spesifik dari program.
Meskipun pada saat ini tidak perlu untuk memberikan "sebuah" perintah parameter, maka dianjurkan untuk melakukannya untuk menghindari masalah setelah CS: register IP yang digunakan, karena itu kita ketik:
sebuah 100 [enter]
mov ax, 0002 [masukkan]
mov bx, 0004 [masukkan]
tambahkan kapak, bx [enter]
nop [enter] [enter]
Apa program ini lakukan?, Memindahkan nilai 0002 ke register kapak, memindahkan nilai 0004 ke register bx, menambahkan isi dari kapak dan register bx, instruksi, operasi tidak ada, untuk menyelesaikan program.
Dalam program debug. Setelah melakukan ini, muncul di layar beberapa seperti baris berikut:
C: \> men-debug
-A 100
0D62: 0100 mov ax, 0002
0D62: 0103 mov bx, 0004
0D62: 0106 menambahkan kapak, bx
0D62: nop 0108
0D62: 0109
Ketik perintah "t" (trace), untuk mengeksekusi setiap instruksi dari program ini,
contoh:
-T
AX = 0002 BX = 0000 CX = 0000 DX = 0000 SP = ffee BP = 0000 SI = 0000 DI = 0000
DS = 0D62 = 0D62 ES SS = 0D62 = 0D62 CS IP = 0103 NV EI PL NZ NA PO NC
0D62: 0103 BB0400 MOV BX, 0004
Anda melihat bahwa nilai 2 pindah ke AX mendaftar. Ketik perintah "t" (trace),
lagi, dan Anda melihat instruksi kedua dijalankan.
-T
AX = 0002 BX = 0004 CX = 0000 DX = 0000 SP = ffee BP = 0000 SI = 0000 DI = 0000
DS = 0D62 = 0D62 ES SS = 0D62 = 0D62 CS IP = 0106 NV EI PL NZ NA PO NC
0D62: 0106 01D8 ADD AX, BX
Ketik perintah "t" (jejak) untuk melihat menambahkan instruksi dijalankan, Anda akan melihat baris berikut:
-T
AX = 0006 BX = 0004 CX = 0000 DX = 0000 SP = ffee BP = 0000 SI = 0000 DI = 0000
DS = 0D62 = 0D62 ES SS = 0D62 = 0D62 CS IP = 0108 NV EI PL NZ NA PE NC
0D62: 90 NOP 0108
Kemungkinan bahwa register mengandung nilai yang berbeda ada, tapi AX dan BX harus sama, karena mereka adalah orang-orang kita hanya dimodifikasi.
Untuk keluar Debug menggunakan "q" (berhenti) perintah.

PERINTAH DASAR ASSEMBLER
 ¨             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:
-       Register AH, harus berisi service number dari Int 21h yang akan dijalankan (02h)
-       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.
 
Demikian sedikit pengenalan bahasa mesin atau assemblay semoga bisa menambah pengetahuan kita mengenai bahasa mesin.


Tidak ada komentar:

Posting Komentar