pemograman bahasa rakitan assembly

Click here to load reader

Post on 29-Jun-2015

1.443 views

Category:

Documents

9 download

Embed Size (px)

TRANSCRIPT

Pemrograman Bahasa Assembly

Pemograman Bahasa Rakitan AssemblyOleh : Ninik Yuliana sir200902

A.PengertianBahasa Assembly itu sendiri merupakan bahasa pemograman yang tergolong dalam pemrograman bahasa tingkat rendah (Low Level Lenguage) dan setingkat diatas bahasa mesin ( Machine Language). Dalam pemograman assembly kita akan menemukan apa yang disebut dengan register .Register itu sendiri merupakan memori dalam mikroprosesor yang bekerja dengan kecepatan yang sangat tinggi .dan jenis jenis register itu sendiri dibagi menjadi beberapa bagian yaitu 1.Segmen Register Register CS (Code Segmen) SS (Stack Segmen) DS (Data Segmen ) ES (Extra Segmen) Kegunaan Menujukan tempat segmen yang sedang aktif Untuk letak segmen yang digunakan o/ Stack Ketempat segmen dimana data-data program disimpan Register bonus yang tidak memiliki tugas khusus

2.Pointer dan Index Register Register SP(Stack Pointer) BP(Base Pointer) SI (Source Index) DI(Dstination indx) Pasangan Register SS :SP SS:BP Kegunaan u/ menunjukan alamat dari stack u/ mencatat almt dimemori t4 data Sama spt Register (DI) u/operasi string dengan makses secara lngsng pd alamat yg ditunjukan ol ke 2 register

3.General Purpose Register Register AX BX CX DX Kegunaan u/ op. aritmatika terutama dlm pembagian & pengurangan u/ menunjukan suatu alamat offset dr suatu segmen u/ op.looping dmn register menentukan bnyk-nya looping u/ menampung sisa hasil pembagian 16 bit

Ninik Yuliana TI / SIR200902 STMIK WIDYA UTAMA PURWOKERTO 09

Pemrograman Bahasa Assembly 4.. Index Pointer Register Register IP berpasangan dengan CS(CS:IP) menunjukkan alamat dimemory tempat dari intruksi(perintah) selanjutnya yang akan dieksekusi. Register IP juga merupakan register 16 bit. Pada prosesor 80386 digunakan register EIP yang merupakan register 32 bit. 5.Flags Register Flag register menujukan kondisi sari suatu kaadaan [ya atau tidak ].karena setiap keadaan dapat digunakan 1 bit saja ,maka sesuai dengan jumlah bitnya,flag register hanya mampu mencatat sampai 16 keaddan . Flag Kegunaan - OF . Jika terjadi OverFlow pada operasi aritmatika, bit ini akan bernilai 1. - SF . Jika digunakan bilangan bertanda bit ini akan bernilai 1 - ZF . Jika hasil operasi menghasilkan nol, bit ini akan bernilai 1. - CF . Jika terjadi borrow pada operasi pengurangan atau carry pada penjumlahan, bit ini akan bernilai 1. - PF . Digunakan untuk menunjukkan paritas bilangan. Bit ini akan bernilai 1 bila bilangan yang dihasilkan merupakan bilangan genap - DF . Digunakan pada operasi string untuk menunjukkan arah proses. - IF . CPU akan mengabaikan interupsi yang terjadi jika bit ini 0. - TF . Digunakan terutama untuk Debugging, dengan operasi step by step. - AF . Digunakan oleh operasi BCD, seperti pada perintah AAA. - NT . Digunakan pada prosesor 80286 dan 80386 untuk menjaga jalannya interupsi yang terjadi secara beruntun. - IOPL . Flag ini terdiri atas 2 bit dan digunakan pada prosesor 80286 dan 80386 untuk mode proteksi - PE . Digunakan untuk mengaktifkan mode proteksi. Flag ini akan bernilai 1 pada mode proteksi dan 0 pada mode real. - MP Digunakan bersama flag TS untuk menangani terjadinya intruksi WAIT. - EM . Flag ini digunakan untuk mensimulasikan coprosesor 80287 atau 80387 - TS . Flag ini tersedia pada 80286 keatas. - ET Flag ini digunakan untuk menentukan jenis coprosesor80287 atau 80387. Ninik Yuliana TI / SIR200902 STMIK WIDYA UTAMA PURWOKERTO 09

Pemrograman Bahasa Assembly - RF . - VF . Register ini hanya terdapat pada prosesor 80386 keatas Bila flag ini bernilai 1 pada saat mode proteksi, mikroprosesor akan memungkinkan dijalankannya aplikasi mode real pada mode proteksi. Register ini hanya terdapat pada 80386 keatas

Perintah Perintah Debug A : Merakit intruksi simbolik (kode mesin) D : menampilkan isi suatu daerah memori E : memasukan data ke memori yang dimulai pad lokasi tertentu G : run executable program ke memori N : menamai program P : eksekusi sekumpulan intruksi yang terkait Q : quit R : menampilkan isi satu atau lebih register T : trace isi sebuah intruksi U : unassembled kode mesin ke kode simbolik W : menulis program ke disk Langkah-langkah Pemrograman Bahasa assembly 1.Buatlah Folder asm di C:/ 2.Dan untuk menuliskan program assemblynya kita bisa gunakan notepad .dan penyimpananya dimasukan di folder ASM yang sudah kita buat tadi, Dan penyimpanannya kita tambahkah .asm misalnya latihan.asm 3.Dan selanjutnya yang kita lakukan adalah meng-compire /menjalankan program tadi apakah sudah benar atau masih terdapat kesalahan yaitu dengan Klik AllProgram Accessorise- pilih Command Prompt. Apabila sudah kita pilh maka akan munjul tampilan seperti ini

Ninik Yuliana TI / SIR200902 STMIK WIDYA UTAMA PURWOKERTO 09

Pemrograman Bahasa Assembly

Apabila sudah masuk ke command prom berarti kita tinggal mengejalankan program kita tadi .yaitu dengan langkah-langkah dibawah ini. yang pertama cara supaya kita bisa masuk kedalam folder penyimpanan asm yang sudah kita simpan tadi yaitu di C:/

selanjutnya kita masukan ke TASM {NAMA PROGRAM }.asm TASM digunakan untuk mengetest apakah masih terdapat kesalahn dalam program atau tidak.

Dan kita masukan ke TLINK / t { NAMA PROGRAM }.OBJ TLINK / t untuk me link-kaan program menjadi program COM TLINK untuk melink-kan program menjadi program EXE

Ninik Yuliana TI / SIR200902 STMIK WIDYA UTAMA PURWOKERTO 09

Pemrograman Bahasa Assembly

Selanjutnya kita tinggal memanggil program kita misalnya Lathan,.COM. Kemudian ENTER.

Cara cepat mencompire-nya lebih cepat maka kita digukan dengan extensi .BAT. Buka notepad baru dan ketikasn program seperti ini @echooff Tasm {nama program} .asm Tlink/t {nama program} .obj {nama program}.com kemudian di folder ASM dan simpan misalnya Latihan.bat

Ninik Yuliana TI / SIR200902 STMIK WIDYA UTAMA PURWOKERTO 09

Pemrograman Bahasa Assembly

Praktikum-praktikum Bahasa Assembly Pencetakan Satu KarakterPraktikum 1Program pencetakan satu karakter A .MODEL SMALL .CODE ORG 100h Mulai: Mov ah,02 Mov dl , A INT 21h INT 20h End mula ; service unk mencetak satu karakter ; memulai program ; menujukan bahwa program yang akan dibuat berupa.COM

; interrupt untk menampilkan / mencetak isi program ; intrurrupt untk menghentikan program ; mengahiri program

Hasil program : pencetakan satu Karakter A

Ket : pada saat terjadi interuptsi pada 21h,maka register akan melihat isi pada AH Jika berisi02,maka akan mencetak satu karaktr berdasarka kode ASCII yang terdapat di DL.

Ninik Yuliana TI / SIR200902 STMIK WIDYA UTAMA PURWOKERTO 09

Pemrograman Bahasa Assembly

PENCETAKAN BEBERAPA KARAKTER dengan Service 02hPraktikum 2Program pencetakkan beberapa karakter dengan menggunakan service 02h. Program.misal kita akan mencetak BUNGA .MODEL SMALL .CODE org 100h Mulai: mov ah,02 mov dl,B INT 21h mov dl,U INT 21h mov dl,N INT 21h mov dl,G INT 21h mov dl,A INT 21h INT 20h End mulai Hasil Program :Pencetakan beberapa karakter dg menggunakan servive 02h ; service mencetak satu karakter ; register yang akan dicetak B

; register yang akan dicetak U ; register yang akan dicetak N

; register yang akan dicetak G ; register yang akan dicetak A

Ket : Pencetakan yang digunakan masih menggunakan service 02h,tetapi disini masih menggunakan secara manual yaitu pada DL.pada program masih menggunakan DL secra berulang-ulang yaitu akan disi sejumlah karakter yang akan ditampilkan. Ninik Yuliana TI / SIR200902 STMIK WIDYA UTAMA PURWOKERTO 09

Pemrograman Bahasa Assembly

Perulangan (LOOP)Dalam pencetakan beberapa karakter,selain menggunakan service 02h dapat juga menggunakan looping atau dengan register CX. Register CX digunakan secara khusus pada operasi looping dimana register ini menentukan berapa banyaknya looping yang akan terjadi.

Praktikum 3Program pencetakan karakter huruf ABCDEFGHIJKLMNOPQRSTUVWXYYXWVUTSRQPONMLKJIHGFEDCBA .MODEL SMALL .CODE ORG 100h mulai: mov ah,02h mov dl,'A' mov cx,25 ulang: int 21h inc dl loop ulang mov dl,'Y' mov cx,25 maning: int 21h dec dl loop maning int 20h End mulai ;service mencetak karakter ; akan melooping sebanyak 25

; tambah DL sebanyak 1 ; akan mengulang label ulang sebanyak 25 kali

; akan mencetak / menampilkan karakter ; kurangi DL senyak 1 ; akan menulang label maning sebanyak 25 kali

Ninik Yuliana TI / SIR200902 STMIK WIDYA UTAMA PURWOKERTO 09

Pemrograman Bahasa Assembly

Hasil program praktikum 3 : Mencetak karakter ABCDEFGHIJKLMNOPQRSTUVWXYYXWVUTSRQPONMLKJIHGFEDCBA

Ket :

looping atau perulangan ini sama dengan perintah jump.semua instruksi loop menggunakan register CX memiliki 16 bit dan nilai maksumum dapat mencangkau 65535. Praktikum 4 Program menampilkan karakter BDFHJLNPRTVXZ .MODEL SMALL .Code org 100h mulai: mov ah,02h mov dl,'B' mov cx,13 ulang: int 21h inc dl ;Tambah DL Sebanyak 1 inc dl loop ulang ;Lompat ke label ulang int 20h ;service menghentikan program end mulai ;service mencetak karakter ;register untuk me-looping

Ninik Yuliana TI / SIR200902 STMIK WIDYA UTAMA PURWOKERTO 09

Pemrograman Bahasa Assembly Hasil program praktikum 4

Membuat Karakter Huruf menjadi BerwarnaTadi kita sudah bisa menampilkan beberapa karakter,dan sekarang kita akan mengmodif tampilan karakter tdi menjadi tulisan berwarna agar lebih menarik.dengan menggunakan register BL. Praktikum 5 Program tampilan karakter berwarna .MODEL SMALL .CODE ORG 100h mulai: mov ah,09h mov al,'A' mov bl,00000001b mov cx,25 ulang: int 10h inc al inc bl loop ulang int 20h end mulai Hasil program praktikum 5 ;service untuk mencetak kalimat ;masukan A ke AL ;service mengubah karakter menjadi berwarna ;register untuk me-looping ;tambah AL ;tambah BL

Ninik Yuliana TI / SIR200902 STMIK WIDYA UTAMA PURWOKERTO 09

Pemrograman Bahasa Assembly

Membuat Warna BackgroundPraktikum 6 Program membuat warna background .model small .code org 100h mulai: mov ah, 09h mov al, 'A mov bl, 01001101b mov cx, 10 ulang: int 10h inc al loop ulang int 20h end mulai Hasil Program Praktikum 6 ;tambah AL ;lompat ke ulang ;service untuk mencetak kalimat ; service membuat baground warna ;looping senyak 10 kali

Ninik Yuliana TI / SIR200902 STMIK WIDYA UTAMA PURWOKERTO 09

Pemrograman Bahasa Assembly

Membuat Program dengan JMPPerintah JMP (jump) merupakan perintah yang digunakan untuk melompat daerah data progam. Praktikum 7 .Model Small .Code org 100h mulai: jmp proses vkal db ' my love $ ' vkalr db 'is blink $ ' proses : mov ah,09h lea dx,vkal int 21h lea dx,vkalr int 21h int 20h end mulai Hasil program Prktikum 7

Ket : LEA : Perintah untuk mendapatkan alamat dari sebuah variable.. JMP: Perintah untuk melakukan lompatan ke label tertentu. DB (Define Byte) : suatu jenis data yang besarnya 1 byte

Ninik Yuliana TI / SIR200902 STMIK WIDYA UTAMA PURWOKERTO 09

Pemrograman Bahasa Assembly

Program Pengoprasian AritmatikaPraktikum 8 =========================================================================== .model small .code org 100h proses : mov ah,15h ;AH = 15 h mov al,4 ;AL= 4 add ah,al ;AH = AH + AL = 19h mov ax,1234h ;AX=1234 h CF=0 mov bx,0f221h ;BX=01221h add ax,bx ;AX=AX+BX=1234h+01221h =2455h mov bx,9ABCh ;BX=9ABCh CF=0 mov cx,5678h ;BX=5678h CF=0 mov dx,0DEF0h :DX=DEF0h CF=0 add cx,dx ;5678h+0DEF0h adc ax,bx ;1234h+9ABCh inc al int 20h end proses =========================================================================== Ket ; ADD , ADC dan INC digunakan untuk menambah. ADD Tujuan,Asal Mov ah,15h Mov al,4 Add ah,al ;ah=ah+al jadi AH=19h Dan pada ADD ini antara tujuan dan asal harus mempunyai daya tampung yang sama,jika AH =8bit dan AL=8bit , AX=16bit dan BX= 16 bit. Adapun hasil penjumlahan akan ditampung pada register AX:CX yaitu ACF13568h .adapun Flag-flag yang terpengaruh oleh perintah ADD dan ADC adalah CF,PF,AF,ZF,SF dan OF INC (increment)digunakan khusus untuk pertambahan dengan 1.

Ninik Yuliana TI / SIR200902 STMIK WIDYA UTAMA PURWOKERTO 09

Pemrograman Bahasa Assembly

Membuat Program Password FLOWCHART

praktikum 9 .Model Small .Code org 100h mulai: jmp proses vkal db 10, 'ENTER PASSWORD:',13,10,' $ ' vkalr db 13,10,'INCORECT $' vkals db 10, 'WELCOME GUYS ',10,' $' proses: mov ah,09h lea dx,vkal int 21h mov ah,08h Ninik Yuliana TI / SIR200902 STMIK WIDYA UTAMA PURWOKERTO 09

Pemrograman Bahasa Assembly int 21h cmp al,'Y' JE OK1 JNE NO1 OK1: mov ah,02h mov dl,2Ah int 21h mov ah,08h int 21h cmp al,'O' JE OK2 JNE NO2 NO1: mov ah,09h lea dx,vkalr int 21h jmp proses

OK2: mov ah,02h mov dl,2Ah int 21h mov ah,08h int 21h cmp al,'U' JE OK3 JNE NO3 NO2: mov ah,09h lea dx,vkalr int 21h jmp proses OK3: mov ah,02h mov dl,2Ah int 21h mov ah,08h int 21h cmp al,'R' Ninik Yuliana TI / SIR200902 STMIK WIDYA UTAMA PURWOKERTO 09

Pemrograman Bahasa Assembly JE OK4 JNE NO4 NO3: mov ah,09h lea dx,vkalr int 21h jmp proses OK4: mov ah,02h mov dl,2Ah int 21h mov ah,09h lea dx,vkals int 21h int 20h NO4: mov ah,09h lea dx,vkalr int 21h jmp proses end mulai Hasil program praktikum 9

KET: LEA : Perintah untuk mendapatkan alamat dari sebuah variable.. JMP: Perintah untuk melakukan lompatan ke label tertentu. DB (Define Byte) : suatu jenis data yang besarnya 1 byte JE ( JUMP IF EQUAL ):Lompat ,jika operant1=operant 2 JNE (JUMP NOT EQUAL) :Lompat jika operant 1 tidak sama dengan operant 2 Ninik Yuliana TI / SIR200902 STMIK WIDYA UTAMA PURWOKERTO 09

Pemrograman Bahasa Assembly

Membuat Program InputanPraktikum 10 .Model Small .Code org 100h Proses : jmp mulai vkal db 13,' apakah anda sudah belajar :??(y/t) $ ' vkalr db 10, ' Berarti anda bisa memahaminya !! $ ' vkals db 10, ' sayang sekali belum !! $ ' Mulai : mov ah,09h lea dx,vkal int 21h mov ah,01h int 21h cmp al,'y' cmp al,'Y' Je ya JNE Tidak ya: mov ah,09h lea dx,vkalr int 21h int 20h Tidak: mov ah,09h lea dx,vkals int 21h int 20h end proses

Ninik Yuliana TI / SIR200902 STMIK WIDYA UTAMA PURWOKERTO 09

Pemrograman Bahasa Assembly Hasil Program

Ket : Pada program diatas adalah suatu perbandingan yang apabila inputan yang diberikan berupa Y Maka akan mendeteksi yang sama dengan operant1 atau JE ya:Berarti anda bisa memahaminya!! tapi tidak berlaku jika yang kita masukan adalah y atau huruf-huruf yang lain maka hasilnya akan mendeteksi yang JNE tidak: sayang sekali belum !! Jika Inputan yang berikan adalah T maka akan mendeteksi JNE tidak. LEA : Perintah untuk mendapatkan alamat dari sebuah variable.. JMP: Perintah untuk melakukan lompatan ke label tertentu. DB (Define Byte) : suatu jenis data yang besarnya 1 byte JE ( JUMP IF EQUAL ):Lompat ,jika operant1=operant 2 JNE (JUMP NOT EQUAL) :Lompat jika operant 1 tidak sama dengan operant 2 CMP(COMPERE) :Digunakan untuk membandingkan antara operant 1dengan operant2.

Ninik Yuliana TI / SIR200902 STMIK WIDYA UTAMA PURWOKERTO 09

Pemrograman Bahasa Assembly

Membuat program pencarian hurufPraktikum 11 .Model Small .Code org 100h data: jmp mulai asal db 'widyautama ',13,10,'$' kata db 'masukan huruf yang dicari : ',13,10,' $' ket1 db 'Huruf ditemukan ',13,10,'$' ket2 db 'huruf tidak ditemukan ',13,10,' $' mulai: xor bx,bx ;cek panjang kalimat cek : mov al,asal [bx] ;pindahan asal [index] ke al inc bx cmp al,'$' jne cek dec bx mov cx,bx xor bx,bx mov ah,9 mov dx,offset asal int 21h

mov ah,2 mov dl,13 int 21h Ninik Yuliana TI / SIR200902 STMIK WIDYA UTAMA PURWOKERTO 09

Pemrograman Bahasa Assembly mov dl,10 int 21h mov ah,9 mov dx,offset kata int 21h mov ah,1 int 21h

ulang: mov dl,asal [bx] inc bx cmp dl,'$' je salah cmp al,dl jne ulang jmp benar

salah: mov ah,2 mov dl,13 int 21h mov dl,10 int 21h mov ah,9 mov dx,offset ket2 int 21h jmp barisbaru benar: mov ah,2 mov dl,13 Ninik Yuliana TI / SIR200902 STMIK WIDYA UTAMA PURWOKERTO 09

Pemrograman Bahasa Assembly int 21h mov dl,10 int 21h mov ah,9 mov dx,offset ket1 int 21h jmp barisbaru barisbaru: mov ah,2 mov dl,13 int 21h mov dl,10 int 21h int 20h end data Hasil program praktikum 11

Ninik Yuliana TI / SIR200902 STMIK WIDYA UTAMA PURWOKERTO 09

Pemrograman Bahasa Assembly

Program POP dan PUSHPop Dan Push dapat kita bayingkansebagai sebuah tabung yang panjang.sedangkan nilai pada register dapat dibayangkan berbentuk koin yang dimasukan dalam tabung tersebut.dan push itu sendiri diibaratkan kita sedang memasukan koin PUSH AX :Simpan nilai AX pada stack PUSH BX: Simpan nilai BX pada stack PUSH CX: Simpan nilai CX pada stack Sedangkan POP akan mengambil koin nilai pada stack yang paling atas dan dimasukan pada register 16 bit .dari sini bisa kita lihat bahwa data terakhir dimasukan akan merupakan yang pertama dikeluarkan .Inillah sebanya operasi stack dinamakan LIFO ( Last In First Out ) Sebagai contoh untuk mengambil nilai dari register AX,BX dan CX yang disimpan pada stack harus dilakukan pada register CX dahulu brulah BX dan AX seperti : POPCX: Ambil nilai pada puncak stack,masukan ke CX POPBX: Ambil nilai pada puncak stack,masukan ke BX POPAX: Ambil nilai pada puncak stack,masukan ke AX Bila terbalik dalam menngambil nilai pada stack dengan POP AX kemudian POP BX dan POP CX,maka nilai yang akan didapatkan pada register AX,BX,CX akan terbalik. Praktikum 13 .Model Small .Code org 100h mulai: mov ax,15 mov bx,80 add ax,bx mov bx,10 xor cx,cx ulang: xor dx,dx div bx push dx inc cx cmp ax,0 jne ulang cetak: pop dx add dl,'0' call cetak_k loop cetak Ninik Yuliana TI / SIR200902 STMIK WIDYA UTAMA PURWOKERTO 09

Pemrograman Bahasa Assembly int 20h cetak_k proc near mov ah,02 int 21h ret cetak_k endp end mulai

Hasil Program

Praktikum 14 .Model Small .Code org 100h mulai: mov bl,10 mov al,14 div bl push ax ;simpan nilai ax pd stack mov dl,al add dl,30h mov ah,2 int 21h pop ax ;ambil nilai pada puncak stack masukan ke ax Ninik Yuliana TI / SIR200902 STMIK WIDYA UTAMA PURWOKERTO 09

Pemrograman Bahasa Assembly mov dl,ah mov ah,2 add dl,30h int 21h int 20h end mulai Hasil program

Praktikum 15 .model small .code org 100h Tdata: jmp proses test_angka DW 345 Proses: mov ax,test_Angka mov bx,10 xor cx,cx ulang: xor dx,dx div bx push dx inc cx cmp ax,0 jne ulang cetak: Ninik Yuliana TI / SIR200902 STMIK WIDYA UTAMA PURWOKERTO 09

Pemrograman Bahasa Assembly pop dx add dl,'0' mov ah,02 int 21h loop cetak int 20h end tdata Hasil program

Praktikum 16 code segment assume cs:code org 100h start: jmp mulai tanya db 'hello','$' mulai: mov ah,09h mov dx,offset tanya int 21h mov ah,01h int 21h cmp al,'y' jne boot int 20h boot: int 18h code ends end start Ninik Yuliana TI / SIR200902 STMIK WIDYA UTAMA PURWOKERTO 09

Pemrograman Bahasa Assembly

Hasil program

Praktikum 17 .model small .code org 100h tdata: jmp res_kan pesan db 'dibelokan' noint equ 05h bag_res proc push ax push bx push dx push es push di push ds push si mov ax,1300h mov bl,01001111b mov bh,00h mov,20h mov dh,12h mov cx,44h push cx push es lea bp,pesan 1nt 10h push si push ds push di push es push dx push cx Ninik Yuliana TI / SIR200902 STMIK WIDYA UTAMA PURWOKERTO 09

Pemrograman Bahasa Assembly push bx push ax bag_res endp res_kan : mov ah,25h mov al,noint lea dx,res_kan int 27h end tdata

Lampiran Code ASCII

Ninik Yuliana TI / SIR200902 STMIK WIDYA UTAMA PURWOKERTO 09