Kamis, 31 Maret 2011
BAB I Pengenalan Bahasa Assembly
Bahasa assembly adalah bahasa pemrograman mendasar yang sangat dekat dengan mesin. Konsep perangkat keras dan perangkat lunak dapat dijelaskan secara konstektual dengan memahami bahasa assembly. Disini akan dijelaskan bagaimana perangkat keras computer dan sistem operasi bekerja sama dan bagaimana program aplikasi berkomunikasi dengan system operasi.
Assembler adalah program yang mengonversi kode program sumber ke dalam bahasa mesin. Terdapat dua assembler yang dikenal baik untuk IBM-PC , yaitu MASM (Microsoft Assembler) dan TASM (Turbo Assembler)
.
Download tulisan lengkapnya: klik disini
CONTOH PROGRAM HELLO
CONTOH PROGRAM HELLO
Program Hello pada gambar 1.3 yang menempilkan pesan ‘’Hello, world !” pada layar . Baris 1 mengandung perintah title; semua karakter sisanya pada baris 1 dianggap komentar , seperti pada baris 3. Sebelum menyelesaikan lebih lanjut kita jelaskan dulu segmen ,yaitu bagian-bagian yang membangun program .
Segmen code adalah bagian dimana intruksi program di simpan ; segmen data adalah bagian dimana variable di simpan ; dan segmen stack adalah tempat menyimpan stack . stack sendiri merupakan daftar dalam memori dimana program dijaga dalam variable sementara, kembali dari subrutin , dan semacamnya .
Direktif dosseg menunjukkan segmen standar untuk code , data dan segmen stack . perintah model small mengindifikasikan bahwa program menggunakan Microsoft assembler memory “small” . Direktif stack menset 100 H (256) byte stack untuk program.
Title program hello word [1]
[2]
; program ini menampilkan pesan “hello,word” [3]
[4]
Dosseg [5]
. model small [6]
. stack 100h [7]
[8]
. data [9]
. hello_message db ‘hello, world !’,0dh,0ah, ‘$’ [10]
[11]
. code [12]
main proc [13]
mov ax, @data [14]
mov ds,ax [15]
[16]
mov ah ,9 [17]
mov dx, offset hello_message [18]
int 21 h [19]
[20]
mov ax,4000h [21]
int 21h [22]
main endp [23]
endp main [24]
GAMBAR 1.3 Program hello.asm
Direcktif . code menandai awal segmen code . perintah data menandai awal segmen data , dimana variable dideklarasikan .
Baris 9-10 mengandung segmen data, dimana variable diberi nama hello_message dideklarasikan . huruf db adalah direktif define byte yang meminta assembler mengalokasikan serangkaian byte memori untk data yang mengikutinya .
Baris 13 mengunakan perintah proc untuk mendeklarasikan prosedur main (mungkin juga menggunakan nama lain ) . Baris 14-15 menyalin alamat segmen data ke dalam reg DS . intruksi MOV selalu mempunyai 2 operand: tujuan dan sumber .
Baris 17-19 menyebabkan string karakter dituliskan kekonsole . Mereka melakukannya dengan memnggil fungsi DOS yang menampilkan string yang beralamat dalam register DX.Nomor fungsi diletakkan dalam register AH.
Baris 21-22 adalah perintah untuk berhenti dan kembali ke DOS. Baris 23 akhir dari prosedur main dan baris 24 baris terakhir di assembly.
Rabu, 16 Maret 2011
Bahasa assembly (bag. konversi bilangan)
1.Konversi Dari Sistem Bilangan Desimal
1.1.Konversi Desimal ke Biner
52/2 = 26 sisa 0, sebagai LSB( Least Significant Bit )
26/2 = 13 sisa 0
13/2 = 6 sisa 1
6 /2 = 3 sisa 0
3/2 = 1 sisa 1
1/2 = 0 sisa 1, sebagai MSB( Most Significant Bit )
sehingga 5210 à 1101002
o Cara lain à menjumlahkan bilangan-bilangan pangkat dua yang jumlahnya sama dengan bilangan desimal yang akan dikonversikan. Contoh konversi bilangan 5410 ke bilangan biner :
20 = 1 1
22 = 4 100
23 = 8 1000
25 = 35 100000 +
101101
o Bila bilangan desimal yang akan dikonversikan berupa pecahan à bilangan tersebut harus dipecah menjadi dua bagian. Contoh bilangan desimal 125,4375 dipecah menjadi 125 dan 0,4375.
125/2 = 62 sisa 1
62/2 = 31 sisa 0
31/2 = 15 sisa 1
15/2 = 7 sisa 1
7/2 = 3 sisa 1
3/2 = 1 sisa 1
1/2 = 0 sisa 1
Bilangan desimal 125 à 1111101.
Kemudian bilangan yang pecahan dikonversikan:
0,4375 * 2 = 0,875
0,875 * 2 = 1,75
0,75 * 2 = 1,5
0,5 * 2 = 1
hasil konversi 0,0111
Maka hasil konversi 125,4375 ke bilangan biner:
125 = 1111101
0,4375 = 0,0111 +
125,4375 = 11111,0111
1.2.Konversi Desimal ke Oktal
o Teknik pembagian yang berurutan dapat digunakan untuk mengubah bilangan desimal menjadi oktal. Contoh : 581910 à oktal:
5819/8 = 727 sisa 3, LSB
727/8 = 90 sisa 7
90/8 = 11 sisa 2
11/8 = 1 sisa 3
1/8 = 0 sisa 1, MSB
Sehingga 581910 = 132738
1.3.Konversi Desimal ke Hexadesimal
o Dengan remainder method [pembaginya basis dari bilangan hexadesimal :16]. 340910 à hexadesimal:
3409/16 = 213 sisa 1 = 1, LSB
213/16 = 13 sisa 5 = 5
13/16 = 0 sisa 13 = 0, MSB
jadi, 340910 = 05116
2.Konversi dari Sistem Bilangan Biner
2.1.Konversi Biner ke Desimal
o Bilangan biner dikonversikan kebilangan desimal à mengalikan masing-masing bit dalam bilangan dengan posisi valuenya sebagai contoh :
10110110 = 1*25 + 0*24 + 1*23 + 1*22 + 0*21 + 1*20
= 1*32 + 0*16 + 1*8 + 1*4 + 0*2 + 1*1
= 32 + 0 + 8 + 4 + 0 + 1
= 18210
o Bentuk pecahan biner à 1111101,0111 dapat dikonversikan :
1111101,0111 = 1*26 + 1*25 + 1*24 + 1*23 + 1*22 + 0*21 + 1*20 + 0*2-1 + 1*2-2 + 1*2-3 + 1*2-4
= 64+32+16+8+4+0+1+ 0.25 + 0.125 + 0.0625
= 125,437510
Sehingga 1111101,01112 = 125,437510
2.2.Konversi Biner ke Oktal
o Konversi dapat dilakukan dengan mengkonversikan tiap-tiap tiga buah digit biner, dimulai dari digit yang paling kanan. Contoh : 111100110012dikelompokkan menjadi 11 110 011 001 à
112 = 38, MSB
1102 = 68
0112 = 38
0012 = 18, LSB
Jadi bilangan biner 111100110012 = 36318
2.3.Konversi Biner ke Hexadesimal
o Konversi dapat dilakukan dengan mengkonversi tiap-tiap empat buah digit biner, diawalai dari digit yang paling kanan. Contoh : 01001111010111102dikelompokkan menjadi 0100 1111 1010 1110 à 0100 = 416, MSB
1111 = F16
0101 = 516
1110 = E16, LSB
Maka, bilangan 01001111010111102 = 4F5E16
3.Konversi dari Sistem Bilangan Oktal
3.1.Konversi Bilangan Oktal ke Desimal
o Bilangan oktal dapat dikonversikan ke bilangan desimal dengan mengalikan masing-masing bit dalam bilangan dengan position valuenya. Contoh : 3248 dikonversi kebilangan desimal :
3248 = 3 * 82 + 2 * 81 + 4 * 80
= 3 * 64 + 2 * 8 + 4 * 1
= 192 + 16 + 4
= 21210
o Apabila bilangan oktal yang akan dikonversikan itu memiliki koma à Contoh : mengkonversi bilangan 521,58 ke desimal :
521 = 5 * 82 + 2 * 81 + 1 * 80
= 320 + 64 + 1
= 337
sedangkan pecahannya à 0.5 = 5 * 8-1 = 0.625
Sehingga, 521,58 = 337.62510
3.2.Konversi Oktal ke Biner
o Konversi dari bilangan oktal ke biner dapat dilakukan dengan mengkonversikan masing-masing digit oktal ke tiga digit biner, dan masing-masing digit okatl diubah ke biner secara terpisah kemudian diurutkan dari MSB ke LSB. Contoh : 35278 à ke biner :
3 = 0112, MSB
58 = 1012
28 = 0102
78 = 1112, LSB
Sehingga, 35278 = 0111010101112.
o Konversi bilangan oktal yang berkoma à 75,638 :
@ 758 @ 638
78 = 1112 68 = 1102
58 = 1012 38 = 0112
Sehingga, 75,638 = 111101,1100112
3.3.Konversi Oktal ke Heksadesimal
o Ada dua tahapan :
a.Rubah bilangan oktal ke bilangan biner, kemudian
b.Rubah bilangan biner ke bilangn heksadesimal
Contoh : 25378 dikonversi keheksadesimal à
o Konversi terlebih dahulu kebilangan biner
28 = 0102
58 = 1012
38 = 0112
78 = 1112
o Dari bilangan biner dikonversi ke bilangan heksadesimal
01012 = 516
01012 = 516
11112 = F16
Maka bilangan oktal 25378 = 55F16
4.Konversi dari Sistem Bilangan Heksadesimal
4.1.Konversi Heksadesimal ke Desimal
o Contoh : B6A à
B6A16 = 11 * 162 + 6 * 161 + 10 * 160
= 11 * 256 + 6 * 16 + 10 * 1
= 2816 + 96 + 10
= 292210
Tabel hubungan nilai heksadesimal diposisi tertentu dengan nilai desimal
Posisi 4 | Posisi 3 | Posisi 2 | Posisi 1 | ||||
Hexa | Desimal | Hexa | Desimal | Hexa | Desimal | Hexa | Desimal |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
1 | 4096 | 1 | 256 | 1 | 16 | 1 | 1 |
2 | 8192 | 2 | 512 | 2 | 32 | 2 | 2 |
3 | 12288 | 3 | 768 | 3 | 48 | 3 | 3 |
4 | 16384 | 4 | 1024 | 4 | 64 | 4 | 4 |
5 | 21480 | 5 | 1280 | 5 | 80 | 5 | 5 |
6 | 24576 | 6 | 1536 | 6 | 96 | 6 | 6 |
7 | 28672 | 7 | 1792 | 7 | 112 | 7 | 7 |
8 | 32768 | 8 | 2048 | 8 | 128 | 8 | 8 |
9 | 36864 | 9 | 2304 | 9 | 144 | 9 | 9 |
A | 40960 | A | 2560 | A | 160 | A | 10 |
B | 45056 | B | 2816 | B | 176 | B | 11 |
C | 49152 | C | 3072 | C | 192 | C | 12 |
D | 53248 | D | 3728 | D | 288 | D | 13 |
E | 57344 | E | 3584 | E | 224 | E | 14 |
F | 61440 | F | 3840 | F | 240 | F | 15 |
Contoh 17E16 = 256 + 112 + 14 = 38210
o Bila bilangan heksadesimal yang akan dikonversikan berupa pecahan : Contoh : 9B,05 dikonversikan ke desimal à
9B,0516 = 9*161 + 11*160 + 0*16-1 + 5*16-1 = 9*16 + 11*1 + 0*0.625 + 5*0.004
= 144 + 11 + 0 + 0,02
= 155,0210
4.2.Konversi Heksadesimal ke Biner
o Contoh : 2A5C16 dikonversi ke biner
216 = 00102, MSB
A16 = 10102
516 = 01012
C16 = 110016, LSB
Sehingga 2A5C16 = 00101010010111002
4.3.Konversi Heksadesimal ke Oktal
o Contoh : 55F16 dikonversi ke desimal à
· Rubah terlebih dahulu ke biner
516 = 01012
5 16 = 01012
F16 = 11112
o Dari bilangan biner baru dikonversikan ke oktal
0102 = 28
1012 = 38
1112 = 78
Maka 55F16 = 25378