tutor tasm2

15
1 TA.2008/2009 Semester-1 CE113 Computer System (3 credits) Dosen: S.N.M.P. Simamora, ST., MT. Program studi: Teknik Komputer Jurusan Teknologi Informasi Bandung – 2008 Tuntunan Praktis Bahasa Rakitan menggunakan Turbo Assembler 2.0 Reference: Irvine, Kip R., ”Assembly Language for Intel-Based Computers Fifth Edition”, Florida International University, School of Computing and Information Sciences, Pearson Education, Inc., 2007. Simamora, S.N.M.P., ”Diktat Kuliah KOM244 Sistem Mikroprosesor (3 sks)”, Jurusan Ilmu Komputer, F-MIPA, UNAI, Bandung, 2006. Simamora, S.N.M.P., ”Diktat Kuliah SK-303 Organisasi dan Arsitektur Komputer (2 sks)”, Departemen Teknik Elektro, Fak.Teknik, ITHB, Bandung, 2002. Skema Register Data dalam prosesor x86 Arsitektur Keluarga Intel 8086: General-Purpose Register AH/AL AX (EAX) Accumulator BH/BL BX (EBX) Base CH/CL CX (ECX) Counter DH/DL DX (EDX) Data

Upload: s-n-m-p-simamora

Post on 24-Jun-2015

2.614 views

Category:

Education


0 download

DESCRIPTION

this article describes user-guide about assembly language in x86 machine.

TRANSCRIPT

Page 1: Tutor Tasm2

1

TA.2008/2009 Semester-1 CE113 Computer System (3 credits)

Dosen: S.N.M.P. Simamora, ST., MT. Program studi: Teknik Komputer

Jurusan Teknologi Informasi Bandung – 2008

Tuntunan Praktis Bahasa Rakitan menggunakan Turbo Assembler 2.0

Reference:

Irvine, Kip R., ”Assembly Language for Intel-Based Computers Fifth Edition”, Florida International University, School of Computing and Information Sciences, Pearson Education, Inc., 2007.

Simamora, S.N.M.P., ”Diktat Kuliah KOM244 Sistem Mikroprosesor (3 sks)”, Jurusan Ilmu Komputer, F-MIPA, UNAI, Bandung, 2006.

Simamora, S.N.M.P., ”Diktat Kuliah SK-303 Organisasi dan Arsitektur Komputer (2 sks)”, Departemen Teknik Elektro, Fak.Teknik, ITHB, Bandung, 2002.

Skema Register Data dalam prosesor x86 Arsitektur Keluarga Intel 8086:

General-Purpose Register AH/AL AX (EAX) Accumulator BH/BL BX (EBX) Base CH/CL CX (ECX) Counter DH/DL DX (EDX) Data

Page 2: Tutor Tasm2

2

Perbedaan register General-purpose Register: AH/AL, memiliki panjang @ 8-bit AX, memiliki panjang 16-bit EAX, memiliki panjang 32-bit

Segment Register AH/AL AX (EAX) Code Segment BH/BL BX (EBX) Stack Segment CH/CL CX (ECX) Data Segment DH/DL DX (EDX) Extra Segment

Pointer Register Stack Register SI (ESI) Source Index SP (ESP) Stack Pointer DI (EDI) Destination Index BP (EBP) Base Pointer IP (Instruction Pointer) Status Register

FLAGS Status Flags Klasifikasi register (panjang 16 bit) pada mesin x86:

register AX: dikenal juga sebagai Accumulator (Acc), dibagi atas dua bagian (masing-masing 8 bit), yaitu: AH dan AL. Misalkan: isi AH bernilai 0, lalu di-copy-kan ke AL; lalu selanjutnya isi AL ditambahkan dengan 1. Sehingga isi terbaru AX bernilai 1. MOV AH,0 MOV AL,AH INC AL

register BX: register ini terdiri dari dua bagian, yaitu BH dan BL. Register BX dapat mengakses langsung ke lokasi dari main-memory. Contoh: MOV AX,0 MOV DS,AX MOV BX,9 MOV AL,[BX] Keterangan mnemonic-instruction: pertama-tama AX diisi nilai 0, kemudian di-copy ke register DS; selanjutnya BX diisi nilai 9, dan isi lokasi memori 9 (bukan isi register BX) sekarang di-copy-kan ke AL. Ini artinya, register BX berlaku sebagai link ke alamat memori.

register CX: register ini digunakan untuk pencacahan dan operasi string, dan menampung panjang program yang sedang aktif. Seperti halnya register AX dan BX, register ini terbagi dua, CH dan CL.

Page 3: Tutor Tasm2

3

register DX: register ini dimanfaatkan untuk lalu-lintas (IN dan OUT) data pada port komputer. Biasanya juga boleh digunakan untuk menampung data yang akan ditampilkan ke output-devices, misalkan monitor atau printer, bahkan speaker.

register SI: register yang digunakan sebagai pointer ke memori. Misalkan: mov ax,o mov ds,ax mov si,10 mov al,[si]

register BP: register yang dapat digunakan juga sebagai pointer ke memori, namun perbedaannya terletak pada tujuan peletakan pointer tersebut, yakni ke register stack yang disebut register SP.

register SP: register yang digunakan untuk keperluan stack. Stack sendiri pengertiannya adalah area di memori yang digunakan untuk menyimpan nilai sebelum dan sesudah proses data terakhir.

Klasifikasi instruksi lompatan (Looping Instruction): JMP, instruksi lompatan tak bersyarat

Contoh: JMP 0108 ⇒ langsung melompat ke alamat memori segment=0108 CMP, instruksi lompatan dengan bersyarat

Contoh: CMP [op-1],[op-2] Beberapa jenis instruksi Lompatan Bersyarat seperti: • JE (Jump if Equal) • JNE (Jump if Not Equal) • JG (Jump if Greater than) • JNG (Jump if Not Greater than) • JNGE (Jump if Not Greater than Equal) • JE (Jump if less than) • JLE (Jump if less or Equal than) • JNL (Jump if Not Less or Equal) • JNLE (Jump if Not Less or Equal) • JA (Jump if Above) • JNA (Jump if Not Above) • JNAE (Jump if Not Above or Equal) • JNS (Jump On Not Sign) • JC (Jump On Carry) • JNC (Jump On Not Carry) • JCXZ (Jump If CX=0) • JB (Jump If Below) • JBE (Jump If Below or Equal) • JNBE (Jump If Not Below or Equal) • JZ (Jump On Zero)

Page 4: Tutor Tasm2

4

• JNZ (Jump On Not Zero) • JS (Jump On Sign)

Skema Relasi Komponen Utama dalam Komputer

Struktur Program dalam Turbo Assembler Diformulasikan sebagai berikut: label instruksi/directive operand ;komentar label : nama simbolik yang boleh dipakai atau tidak bergantung kebutuhan.

Instruksi tentu saja mutlak, operand dapat saja tidak ada, atau satu buah atau dua buah, tergantung instruksi yang digunakan.

komentar: yang diawali dengan titik koma boleh optional digunakan. Ini biasanya

digunakan untuk memberi keterangan/maksud sebuah baris kode yang dituliskan.

Dengan demikian, yang terpenting adalah instruksi (mnemonic-instruction) dan operand-nya. Nilai numerik yang dimasukkan ke dalam operand, dapat berupa decimal atau hexadecimal, namun umumnya dalam hexadecimal. Contoh: karakter.asm .MODEL SMALL .CODE ORG 100h iniLoh : MOV AH,02h ;Nilai servis untuk mencetak karakter MOV DL,'S' ;DL diisi Karakter 'S' yang akan dicetak INT 21h ;menampilkan ke monitor INT 20h ;kendali dikembalikan ke sistem operasi END iniLoh

Page 5: Tutor Tasm2

5

Tampilan proses penerjemahan dan eksekusi program: Proses linking di atas menggunakan instruksi: tlink /t nama_object_file Dan keluarannya akan men-set program aplikasi tersebut ke dalam platform DOS, dengan catatan blok inisialisasi program dituliskan sebagai berikut: .MODEL SMALL .CODE ORG 100h Bedakan dengan source-program berikut, dimana jika di-linking dengan instruksi ini tlink /t nama_object_file halo.asm dosseg .model small .stack 100h .data kalimat db 'Apakabar Indonesia..' ,13,10,'$' .code mov ax,@data mov ds,ax mov ah,9 mov dx,offset kalimat int 21h mov ah,4ch int 21h end akan menampilkan pesan error, sehingga proses linking digunakan instruksi berikut ini: tlink nama_object_file

Page 6: Tutor Tasm2

6

Tampilan proses penerjemahan dan eksekusi aplikasi pemrograman: Penjelasan: maksud bilangan 13,10,’$’ adalah instruksi untuk ganti baris baru (‘new-line’) dengan demikian cursor akan diletakkan pada baris baru di bawahnya. Contoh lain: sandi.asm DOSSEG .MODEL SMALL .CODE ORG 100H mulamula: JMP mulai IniDia DB 'Selamat dan Sukses..',13,10,'$' ItuDia DB 'Password: ',13,10,'$' mulai: MOV AH,09H MOV DX,OFFSET ItuDia INT 21H ;mencetak ItuDia awal: MOV AH,07H INT 21H CMP AL,'s' JE sini1 CMP AL,'S' JNE awal sini1: MOV AH,07H INT 21H CMP AL,'n' JE sini2 CMP AL,'N' JNE awal sini2: MOV AH,07H INT 21H CMP AL,'m' JE sini3

Page 7: Tutor Tasm2

7

CMP AL,'M' JNE awal sini3: MOV AH,07H INT 21H CMP AL,'p' JE sini4 CMP AL,'P' JNE awal sini4: MOV AH,09H MOV DX,OFFSET IniDia INT 21H INT 20H END mulamula Proses penerjemahan dilakukan dengan perintah sbb: Proses kompilasi: tasm sandi.asm Proses linking: tlink /t sandi apabila proses linking digunakan perintah: tlink sandi maka, akan muncul pesan: No Stack, ini disebabkan, proses linking akan mengubah object-file menjadi file executed-program dalam tipe file .EXE, sedangkan source-code di-create menggunakan model agar ukuran file dalam ukuran 64KB, dengan kata lain dalam tipe file: .COM; oleh sebab itu proses linking menggunakan instruksi: tlink /t nama_file. Program di atas akan menanyakan password yang diketikkan user tanpa menampilkannya ke layar komputer, tanpa menekan tombol ENTER (↵). Jika salah, maka tetap akan meminta password sampai kata sandi yang diisikan benar. Password berdasar isi blok program adalah: snmp. Tampilan proses penerjemahan dan hasil eksekusi program:

Page 8: Tutor Tasm2

8

Agar lebih jelasnya, perlu diketahui beberapa hal sebagai berikut: Stack: secara sederhananya, dalam pemrograman bahasa rakitan, stack

merupakan tempat menampung isi register. Stack pada tipe file: .COM terdapat di akhir segment, dan saat pertama sekali program dijalankan Stack Pointer akan langsung menuju byte terakhir dari segment. Sedangkan pada tipe file: .EXE, user harus me-create stack sendiri dan mengalihkan pointer stack ke tempat yang diinginkan.

Perbedaan aplikasi pemrograman untuk tipe file .COM dengan .EXE adalah ukuran (size) file tersebut. Untuk tipe file .COM, maksimal membutuhkan satu segment dengan luas sebesar 64KB. Sedangkan untuk tipe file .EXE tidak dibatasi berapa segment, oleh sebab itu ukuran filenya di atas 64KB (karena bisa lebih dari satu segment).

Segment Directive Segment Directive yang paling sederhana adalah: DOSSEG, MODEL, STACK, DATA dan CODE. DOSSEG: menyebabkan segmen dalam program sebuah bahasa rakitan

dikelompokkan sesuai dengan pembagian segment oleh DOS (Disk Operating System). Biasanya sebuah program dengan bahasa rakitan akan berjalan baik jika dimulai dengan kata DOSSEG. Dan patut diingat bahwa segment directive ini tidak diperlukan saat program bergabung dengan bahasa pemrograman tingkat tinggi.

.MODEL: menunjukkan model memori untuk bahasa rakitan yang menggunakan

segment directive yang sederhana. Model yang tersedia adalah: • tiny: baik program maupun data harus masuk dalam segment yang

sama yaitu 64KB. Tipe kode dan data adalah near. • small: program harus masuk dalam segment tunggal 64KB, dan data

harus masuk dalam segment tunggal lainnya sebesar 64KB. Tipe kode dan data adalah near.

• medium: program dapat lebih besar dari 64KB, tetapi data harus masuk dalam segment tunggal sebesar 64KB. Kode program ber-tipe far, sedangkan data adalah near.

• compact: program harus tepat tertampung dalam segmentasi 64KB, sebaliknya data-nya dapat lebih besar dari 64KB. Tipe kode adalah near, sedangkan data adalah far. Disamping itu, data array tidak boleh melebihi 64KB.

• large: baik program maupun data dapat lebih besar dari 64KB, tetapi array data tidak dapat melebihi 64KB. Tipe kode program dan data adalah far.

• huge: kode program dan data sangat besar sekali melebihi 64KB, dan array untuk data dapat melebihi 64KB. Tipe kode program dan data adalah far, dan pointer untuk array juga harus far.

.STACK: berguna untuk mengontrol stack. Contohnya adalah sebagai berikut, misalkan dituliskan:

Page 9: Tutor Tasm2

9

.STACK 200h Ini artinya, didefinisikan stack sebesar 200heksadesimal (atau ini senilai dengan DEC512) byte panjangnya. Umumnya ini sudah cukup bagi sebuah aplikasi program, namun jika menginginkan ukuran stack lebih besar lagi, maka tinggal mengganti nilai 200h.

.DATA: ini adalah bagian sebagai tempat untuk medefinisikan data yang akan dipakai dalam blok program.

Misalkan: .DATA Nilai dw 100 Counter dw? Pesan db 0dh,0ah,’Hello apakabar...’,odh,0ah,’$’

.CODE: ini adalah bagian inti dari sebuah program bahasa rakitan; dimana semua kode/sintaks ditulis pada blok ini.

Mekanisme dalam Pendeklarasian Data

Pada Bahasa Rakitan, setiap data dikelompokkan dalam blok .DATA, dengan mendefinisikannya sebagai berikut beserta panjang data di memori yang dibutuhkan: DB : 1 byte DW : 2 byte = 1 word DD : 4 byte = 1 double word DF, DP: 6 byte = 1 far pointer word DQ : 8 byte = 1 quardword DT : 10 byte 1 byte identik 1 karakter, direpresentasikan 8 bit, karena menggunakan sistem pengkode ASCII 8-bit. Dengan catatan, untuk penulisan tersebut, tidak ada perbedaan antara penulisan menggunakan capital-case maupun lower-case. Kadangkala, seorang pemrograman perlu mensiasati setiap tipe data yang digunakannya untuk efisiensi alokasi memori saat program dieksekusi.

Algoritma Perpindahan Data dalam Bahasa Rakitan Yang dimaksud dengan algoritma adalah langkah-langkah atau tahapan-tahapan yang dilakukan dalam pemecahan suatu persoalan dan dapat diimplementasikan dalam sebuah blok pemrograman. Misalkan dalam perintah mnemonic-instruction berikut ini: MOV AX,0 ;copy-kan numerik 0 ke isi register AX MOV BX,5 ;copy-kan numerik 5 ke isi register BX MOV AX,BX ;copy-kan isi register BX ke isi register AX Dengan demikian, dapat disimpulkan setiap perintah MOV bukan menandakan suatu nilai berpindah tempat, namun yang sebenarnya adalah nilai tersebut di-duplikasikan.

Page 10: Tutor Tasm2

10

Skemanya agar lebih jelas, dapat diuraikan sebagai berikut:

Pertukaran nilai antara dua operand Misalkan: isi dua register akan dipertukarkan, maka mnemonic-struction-nya dituliskan sebagai berikut, XCHG AX,DX Instruksi ini dapat juga digantikan menggunakan instruksi lain seperti berikut ini: PUSH AX MOV AX,DX POP DX Instruksi PUSH, artinya menampungkan isi dari sebuah register ke puncak stack, sedangkan instruksi POP, artinya menampungkan isi dari puncak stack ke sebuah register. Keadaan ini sering juga disebut dengan swaping, yakni mempertukarkan isi dari kedua operand atau register.

Contoh Program:

Menampilkan karakter ke layar komputer. Misalkan, sebelumnya ditampilkan karakter ‘S’, maka isi register DL digantikan dengan heksa 53 atau 0x53. karakt3r.asm .MODEL SMALL .CODE ORG 100h iniLah : MOV AH,02h ;Nilai servis untuk mencetak karakter MOV DL,53h ;DL diisi Karakter 'S' yang akan dicetak INT 21h ;menampilkan ke monitor INT 20h ;kendali dikembalikan ke sistem operasi END iniLah

Page 11: Tutor Tasm2

11

Tampilan skema penerjemahan & eksekusi program:

Menampilkan string ke layar komputer halo.asm dosseg .model small .stack 100h .data kalimat db 'Apakabar Indonesia..' ,13,10,'$' .code mov ax,@data mov ds,ax mov ah,9 mov dx,offset kalimat int 21h mov ah,4ch int 21h end

Menampilkan karakter/string dari user Program berikut akan menampilkan setiap yang diketikkan oleh user ke layar komputer; untuk mengakhirinya, cukup tekan ENTER dua kali. isilah.asm dosseg .model small .stack 100h .code lagi: mov ah,1 int 21h cmp al,13 jz selesai mov dl,al

Page 12: Tutor Tasm2

12

int 21h jmp lagi selesai: mov ah,4ch int 21h end Untuk melakukan proses linking, gunakan instruksi: tlink isilah Tampilan proses penerjemahan dan eksekusi program: Kesimpulan, proses linking untuk instruksi ’tlink /t’ digunakan atau tidak, dilihat dari sintaks berikut ini: .stack 100h

Menanyakan jumlah dari sebuah statement ’2+3’ ijumlah.asm DOSSEG .MODEL SMALL .CODE ORG 100H mulamula: JMP mulai IniDia DB 'Anda benar..',13,10,'$' ItuDia DB '2 + 3 = ',13,10,'$' mulai: MOV AH,09H MOV DX,OFFSET ItuDia INT 21H ;mencetak ItuDia awal: MOV AH,07H INT 21H CMP AL,'5' JE sini4 CMP AL,'P'

Page 13: Tutor Tasm2

13

JNE awal sini4: MOV AH,09H MOV DX,OFFSET IniDia INT 21H INT 20H END mulamula Perhatikan, karena sintak mnemonic-instruction memunculkan ’ORG 100h’, maka proses linking menggunakan: ’tlink /t nama_object_file’. Tampilan proses penerjemahan dan eksekusi program: Program akan terus meminta hasil yang benar, sepanjang user belum memberi input ’5’.

Menampilkan alternatif pilihan jawaban dari user. pilihlah.asm dosseg .model small .stack 100h .data hari db 'Jam menunjukkan pk14.30 (y/t)? $' sudah db 13,10,'Segera berkemas-kemas untuk kuliah Pak SNS..',13,10,'$' belum db 13,10,'Selesaikan tugas yang akan dikumpulkan!',13,10,'$' .code mov ax,@data mov ds,ax mov dx,OFFSET hari mov ah,09h int 21h mov ah,1h int 21h cmp al,'y' jz oke

Page 14: Tutor Tasm2

14

cmp al,'Y' jnz nehi oke: mov dx,OFFSET sudah jmp selesai nehi: mov dx,OFFSET belum selesai: mov ah,9h int 21h mov ah,4ch int 21h end Tampilan proses penerjemahan dan eksekusi program: Perhatikan, jika sintak berikut .. sudah db 13,10,'Segera berkemas-kemas untuk kuliah Pak SNS..',13,10,'$' belum db 13,10,'Selesaikan tugas yang akan dikumpulkan!',13,10,'$' .. Dihilangkan ekspresi: .. 13,10, .. Maka, pada saat pilihlah.exe dijalankan, maka string yang dihasilkan tidak ditempatkan pada baris baru, melainkan langsung digandengkan dengan akhir dari jawaban yang diketikkan. Apabila pilihlah.asm di-edit pada baris terakhir: .. selesai: mov ah,9h int 21h mov ah,4ch int 21h end

Page 15: Tutor Tasm2

15

Digantikan dengan sintaks berikut: .. selesai: mov ah,9h int 21h int 20h end Lalu disimpankan dengan nama siiplah.asm, maka saat siiplah.exe dijalankan dan user memberi input, akan tertampil pesan error: Ini menandakan, bahwa instruksi: .. int 21h int 20h .. Tidak tepat digunakan mengingat initial-state menggunakan ukuran file .EXE bukan .COM.

Interrupt (INT) Instruksi interrupt, artinya kendali dari Control Unit (CU), saat sebuah program sedang berjalan, akan diambil alih oleh sistem operasi. Klasifikasi interrupt dibagi atas dua yaitu:

BIOS Interrupt (mengambil alih isi dari ROM), yaitu interrupt yang disediakan oleh Basic Input Output System (BIOS). Yang tergolong dalam interrupt ini adalah int 0h s.d int 1fh.

DOS Interrupt (mengambil alih isi dari RAM), yaitu interrupt yang disediakan oleh DOS (Disk Operating System), yaitu nomot interrupt di atas int 1fh, termasuk int 20h dan int 21h.

..

..