Keinginan adalah kunci motivasi, tapi tekad dan komitmen itu pengejaran tanpa henti untuk sebuah tujuan yaitu komitmen menuju keunggulan yang akan memungkinkan Anda untuk mencapai keberhasilan yang Anda cari.

Translate

Selasa, 25 Januari 2011

Materi Assembly


Selamat Belajar Assembly


Assembler directives
Directives adalah perintah yang ditujukan kepada assembler ketika sedang menerjemahkan program kita ke bahasa mesin. Directive dimulai dengan tanda titik.
.model : memberitahu assembler berapa memori yang akan dipakai oleh program kita. Ada model tiny, model small, model compact, model medium, model large, dan model huge.
.data : memberitahu assembler bahwa bagian di bawah ini adalah data program.
.code : memberitahu assembler bahwa bagian di bawah ini adalah instruksi program.
.stack : memberitahu assembler bahwa program kita memiliki stack. Program EXE harus punya stack.

Definisi data

DB : define bytes. Membentuk data byte demi byte. Data bisa data numerik maupun teks.
catatan: untuk membentuk data string, pada akhir string harus diakhiri tanda dolar ($).
sintaks: {label} DB {data}
contoh: teks1 db "Hello world $"
DW : define words. Membentuk data word demi word (1 word = 2 byte).
sintaks: {label} DW {data}
contoh: kucing dw ?, ?, ? ;mendefinisikan tiga slot 16-bit yang isinya don't care (disimbolkan dengan tanda tanya)
DD : define double words. Membentuk data doubleword demi doubleword (4 byte).
sintaks: {label} DD {data}
EQU : equals. Membentuk konstanta.
sintaks: {label} EQU {data}
contoh: sepuluh EQU 10
untuk assembly yang melibatkan bilangan pecahan (floating point) saya belum belajar, jadi dalam tutorial ini saya hanya memakai bilangan bulat (integer).
Sebenarnya masih ada DF (define far words), DQ (define quad words), dan DT (define ten bytes).



Perpindahan data
MOV : move. Memindahkan suatu nilai dari register ke memori, memori ke register, atau register ke register.
sintaks: MOV {tujuan}, {sumber}
contoh:
mov AX, 4C00h ;mengisi register AX dengan 4C00(hex).
mov BX, AX ;menyalin isi AX ke BX.
mov CL, [BX] ;mengisi register CL dengan data di memori yang alamatnya ditunjuk BX.
mov CL, [BX] + 2 ;mengisi CL dengan data di memori yang alamatnya ditunjuk BX lalu geser maju 2 byte.
mov [BX], AX ;menyimpan nilai AX pada tempat di memori yang ditunjuk BX.
mov [BX] - 1, 00101110b ;menyimpan 00101110(bin) pada alamat yang ditunjuk BX lalu geser mundur 1 byte.

LEA : load effective address. Mengisi suatu register dengan alamat offset sebuah data.
sintaks: LEA {register}, {sumber}
contoh: lea DX, teks1

XCHG : exchange. Menukar dua buah register langsung.
sintaks: XCHG {register 1}, {register 2}
Kedua register harus punya ukuran yang sama. Bila sama-sama 8 bit (misalnya AH dengan BL) atau sama-sama 16 bit (misalnya CX dan DX), maka pertukaran bisa dilakukan.
Sebenarnya masih banyak perintah perpindahan data, misalnya IN, OUT, LODS, LODSB, LODSW, MOVS, MOVSB, MOVSW, LDS, LES, LAHF, SAHF, dan XLAT. Tapi semua ini ribet dan bikin pusing pembaca.
Operasi logika
AND : melakukan bitwise and.
sintaks:
AND {register}, {angka}
AND {register 1}, {register 2}
hasil disimpan di register 1.
contoh:
mov AL, 00001011b
mov AH, 11001000b
and AL, AH ;sekarang AL berisi 00001000(bin), sedangkan AH tidak berubah.
OR : melakukan bitwise or.
sintaks:
OR {register}, {angka}
OR {register 1}, {register 2}
hasil disimpan di register 1.
NOT : melakukan bitwise not (one's complement)
sintaks: NOT {register}
hasil disimpan di register itu sendiri.
XOR : melakukan bitwise eksklusif or.
sintaks:
XOR {register}, {angka}
XOR {register 1}, {register 2}
hasil disimpan di register 1.
Tips: sebuah register yang di-XOR-kan dengan dirinya sendiri akan menjadi berisi nol.
SHL : shift left. Menggeser bit ke kiri. Bit paling kanan diisi nol.
sintaks: SHL {register}, {banyaknya}
SHR : shift right. Menggeser bit ke kanan. Bit paling kiri diisi nol.
sintaks: SHR {register}, {banyaknya}
ROL : rotate left. Memutar bit ke kiri. Bit paling kiri jadi paling kanan kali ini.
sintaks: ROL {register}, {banyaknya}
Bila banyaknya rotasi tidak disebutkan, maka nilai yang ada di CL akan digunakan sebagai banyaknya rotasi.
ROR : rotate right. Memutar bit ke kanan. Bit paling kanan jadi paling kiri.
sintaks: ROR {register}, {banyaknya}
Bila banyaknya rotasi tidak disebutkan, maka nilai yang ada di CL akan digunakan sebagai banyaknya rotasi.
Perintah menarik yang tidak dijelaskan di sini: RCL dan RCR.
Operasi matematika
ADD : add. Menjumlahkan dua buah register.
sintaks: ADD {tujuan}, {sumber}
operasi yang terjadi: tujuan = tujuan + sumber.
carry (bila ada) disimpan di CF.
ADC : add with carry. Menjumlahkan dua register dan carry flag (CF).
sintaks: ADC {tujuan}, {sumber}
operasi yang terjadi: tujuan = tujuan + sumber + CF.
carry (bila ada lagi) disimpan lagi di CF.
INC : increment. Menjumlah isi sebuah register dengan 1. Bedanya dengan ADD, perintah INC hanya memakan 1 byte memori sedangkan ADD pakai 3 byte.
sintaks: INC {register}
SUB : substract. Mengurangkan dua buah register.
sintaks: SUB {tujuan}. {sumber}
operasi yang terjadi: tujuan = tujuan - sumber.
borrow (bila terjadi) menyebabkan CF bernilai 1.
SBB : substract with borrow. Mengurangkan dua register dan carry flag (CF).
sintaks: SBB {tujuan}, {sumber}
operasi yang terjadi: tujuan = tujuan - sumber - CF.
borrow (bila terjadi lagi) menyebabkan CF dan SF (sign flag) bernilai 1.
DEC : decrement. Mengurang isi sebuah register dengan 1. Jika SUB memakai 3 byte memori, DEC hanya memakai 1 byte.
sintaks: DEC {register}
MUL : multiply. Mengalikan register dengan AX atau AH.
sintaks: MUL {sumber}
Bila register sumber adalah 8 bit, maka isi register itu dikali dengan isi AL, kemudian disimpan di AX.
Bila register sumber adalah 16 bit, maka isi register itu dikali dengan isi AX, kemudian hasilnya disimpan di DX:AX. Maksudnya, DX berisi high order byte-nya, AX berisi low order byte-nya.
IMUL : signed multiply. Sama dengan MUL, hanya saja IMUL menganggap bit-bit yang ada di register sumber sudah dalam bentuk two's complement.
sintaks: IMUL {sumber}
DIV : divide. Membagi AX atau DX:AX dengan sebuah register.
sintaks: DIV {sumber}
Bila register sumber adalah 8 bit (misalnya: BL), maka operasi yang terjadi:
 -AX dibagi BL,
 -hasil bagi disimpan di AL,
 -sisa bagi disimpan di AH.
Bila register sumber adalah 16 bit (misalnya: CX), maka operasi yang terjadi:
 -DX:AX dibagi CX,
 -hasil bagi disimpan di AX,
 -sisa bagi disimpan di DX.
IDIV : signed divide. Sama dengan DIV, hanya saja IDIV menganggap bit-bit yang ada di register sumber sudah dalam bentuk two's complement.
sintaks: IDIV {sumber}
NEG : negate. Membuat isi register menjadi negatif (two's complement). Bila mau one's complement, gunakan perintah NOT.
sintaks: NEG {register}
hasil disimpan di register itu sendiri.
Baca Selanjutnya »

PERINTAH JUMP DAN FUNGSINYA PADA ASSEMBLER

PERINTAH JUMP DAN FUNGSINYA PADA ASSEMBLER

JA (jump if above): Lompat, jika Operand1 > Operand2 untuk bilangan tidak bertanda.
JG (jump if greater) : Lompat, jika Operand1 > Operand2 untuk bilangan bertanda
JE (jump if equal) : Lompat, jika Operand1 = Operand2
JNE (jump if not equal) : Lompat, jika Operand1 tidak sama dengan Operand2
JB (jump if bellow) : Lompat, jika Operand1 < Operand2 untuk bilangan tidak bertanda
JL (jump if less) : Lompat, jika Operand1 < Operand2 untuk bilangan bertanda
JBE (jump if bellow or equal): Lompat, jika operand1 < = Operand2 untuk bilangan tidak bertanda
JLE (jump if less or equal) : Lompat, jika Operand1 < = Operand2 untuk bilangan bertanda
JAE (jump if above or equal): Lompat, jika Operand1 >= Operand2 untuk bilangan tidak bertanda
JGE (jump if greater or equal) : Lompat, jika Operand1 >= Operand2 untuk bilangan bertanda
JC (jump carry) : Lompat, jika Carry flag=1
JCXZ (jump if CX is zero) : Lompat, jika CX=0
JNA (jump if not above) : Lompat, jika Operand1 < Operand2 dengan CF=1 atau ZF=1 JNAE (jump if not above nor equal): Lompat, jika Operand1 < Operand2 dengan CX=1 JNB (jump if not bellow) : Lompat, jika Operand1 > Operand2 dengan CF=0
JNBE (jump if not bellow nor equal): Lompat, jika Operand1 > Operand2 dengan CF=0 dan ZF=0
JNC(jump if no carry) : Lompat, jika CF=0
JNG (jump if not greater) : Lompat, jika Operand1 <= Operand2 dengan ZF=1 atau SF tidak sama OF
JNGE (jump if not greater not equal): Lompat, jika Operand1 < = Operand2 dengan SF tidak sama OF
JNL (jump if not less): Lompat, jika Operand1 >= Operand2 dengan SF=OF
JNLE (jump if not less nor equal): Lompat, jika Operand1 > Operand2 dengan ZF=0 dan SF=OF
JNO (jump if no overflow): Lompat, jika tidak terjadi tidak terjadi Overflow
JNP (jump if not parity) : Lompat, jika Ganjil
JNS (jump if no sign) : Lompat, jika SF=0
JNZ (jump if not zero) : Lompat, jika tidak 0
JO (jump on overflow) : Lompat, jika OF=1
JP (jump on parity) : Lompat, jika Genap
JPE (jump if parity event) : Lompat, jika PF=1
JPO (jump if parity odd) : Lompat, jika PF=0
JS (jump on sign) : Lompat, jika SF=1
JZ (jump is zero) : Lompat, jika 0
Baca Selanjutnya »

Praktikum X - PERBEDAAN MOV AH, 01H – 07H – 08H


PERBEDAAN MOV AH, 01H – 07H – 08H

01H
07H
08H
.model small
.code
org 100h

mulai :
mov ah,01h
int 21h
mov ah, 02h
mov dl,'z'
int 21h
int 20h
end mulai

.model small
.code
org 100h

mulai :
mov ah,071h
int 21h
mov ah, 02h
mov dl,'z'
int 21h
int 20h
end mulai


.model small
.code
org 100h

mulai :
mov ah,08h
int 21h
mov ah, 02h
mov dl,'z'
int 21h
int 20h
end mulai

hasil : _(missal ketik a) maka yang dihasilkan adalah az

hasil : z

hasil : z (input no echo hanya menyimpan)


keterangan : 01h à input with echo, 01h fungsinya menyimpan dan mencetak
ketika  c:/asm>01h
_ (ketik ctrl+c) maka hasilnya ^C yang artinya pada 01h mengenal ctrl+c hal ini juga berlaku dengan 08h hasilnya juga sama
Pada 07h tidak mengenal ctrl+c  jadi hasilnya langsung z

keterangan : 07h adalah input without echo (hanya menyimpan tidak mencetak)

           
Baca Selanjutnya »

Praktikum IX - Mencetak Angka


MENCETAK ANGKA

.model small
.code
org 100h

mulai:
mov bl, 10
mov al, 38
div bl
push ax
mov dl,al
add dl, 30h
mov ah,2
int 21h

pop ax
mov dl,ah
mov ah,2
add dl,30h
int 21h

int 20h

end mulai

hasil : 38

CONTOH 2 :

.model small
.code
org 100h

TData :
JMP Proses
Text_Angka Dw 345

Proses:
mov ax, Text_Angka
mov bx,10
xor cx, cx;cx

ulang:
xor dx,dx
div bx
push dx
inc cx
cmp ax,0
jne ulang

cetak :
pop dx
add dl,'0'
mov ah,02
int 21h

loop cetak

int 20h
end TData

hasil : 345

 Tadi kuliah mbahas virus..  jadi penasaran..
Baca Selanjutnya »

Praktikum VIII - Cari Kata


CARI KATA

.model small
.code
org 100h
data:
jmp mulai

asal db 'widya utama$'
kata db 'masukan huruf yang dicari : $'
ket1 db 'huruf ditemukan $'
ket2 db 'huruf tidak ditemukan $'

mulai:
      xor bx,bx ;cek panjang kalimat

cek:
      mov al,asal[bx] ; pindah asal [index] ke al
      inc bx
      cmp al,'$'
      jne cek

dec bx
mov cx,bx

xor bx,bx
mov ah,9
lea dx,asal
int 21h

mov ah,2
mov dl,13
int 21h
mov dl,10
int 21h

mov ah,9
lea dx, 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
lea dx,ket2
int 21h
jmp barisBaru
benar:
mov ah,2
mov dl,13
int 21h
mov dl,10
int 21h

mov ah,9
lea dx,ket1
int 21h
jmp barisBaru

barisBaru:
mov ah,2
mov dl,13
int 21h
mov dl,10
int 21h
int 20h

end data

HASIL :
Widya utama
Huruf yang dicari : (kursor _) u
Huruf ditemukan
                                                                                                                                                      
 Terima kaish telah berkunjung ke blog ini ^^...

Baca Selanjutnya »

Praktikum VII - Konsep Penambahan dalam Assembly

KONSEP PENAMBAHAN DALAM ASSEMBLY

.model small
.code
org 100h

mulai:
mov ax,115
mov bx,100
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
int 20h
cetak_k proc near

mov ah,02
int 21h
ret
cetak_k endp

end mulai

HASIL : 215

Hari yang dingin... Brrrr...


Baca Selanjutnya »

Jumat, 21 Januari 2011

Praktikum VI - LATIHAN STRING, INPUT, COMPARE (FUNGSI IF.. THEN)


LATIHAN STRING, INPUT, COMPARE (FUNGSI IF.. THEN)


.model small
.code
org 100h
mulai:
            jmp proses
            vcall db 'Anda sudah makan hari ini???(Y/T)$'
            vcall1 db 10, 'Selamat anda sudah kenyang$'
            vcall2 db 10,'Aduh kasihan deh$'
           
            proses:
            mov ah, 09h
            lea dx, vcall
            int 21h

           
            mov ah, 01h
            int 21h
           
           
            cmp al, 'Y'
            je ya
            jne tidak
           
            ya:
            mov ah, 09h
            lea dx, vcall1
            int 21h
            int 20h
           
            tidak:
            mov ah, 09h
            lea dx, vcall2
            int 21h

int 20h
end mulai

HASIL :
Anda sudah makan hari ini???(Y/T)
Selamat anda sudah kenyang  (jika menjawab Y)
Aduh kasihan deh (jika menjawab T)

CATATAN :
KOMENTAR UNTUK ASSEMBLY ;======INPUT============
BIASAKAN UNTUK TUTUP KODING
DOKUMENTASIKAN APABILA INGIN DIPAUSE UNTUK MEMBUAT PROGRAM
COMPARE-JUMP = FUNGSI IF


Wah masih banyak yang harus diupload... Semangat!
Baca Selanjutnya »

Praktikum V - Membuat Password

MEMBUAT PASSWORD

.model small
.code
org 100h
mulai:
jmp proses
vcal db 10, 'ENTER PASSWORD: $'
vcal1 db 10, 'INCORRECT$'
vcal2 db 10, 'WELLCOME GUYS$'

proses:
mov ah, 09h
lea dx, vcal
int 21h

mov ah, 07h
int 21h

cmp al, 'Y'
je ya1
jne tidak1

ya1:
mov ah, 02h
mov dl, 2Ah
int 21h

mov ah, 07h
int 21h

cmp al, 'O'
je ya2
jne tidak2

tidak1:
mov ah, 09h
lea dx, vcal1
int 21h
jmp proses

ya2:
mov ah, 02h
mov dl, 2Ah
int 21h

mov ah, 07h
int 21h

cmp al, 'U'
je ya3
jne tidak3

tidak2:
mov ah, 09h
lea dx, vcal1
int 21h
jmp proses

ya3:
mov ah, 02h
mov dl, 2Ah
int 21h

mov ah, 07h
int 21h

cmp al, 'R'
je ya4
jne tidak4

tidak3:
mov ah, 09h
lea dx, vcal1
int 21h
jmp proses

ya4:
mov ah, 02h
mov dl, 2Ah
int 21h
mov ah, 09h
lea dx, vcal2
int 21h
int 20h

tidak4:
mov ah, 09h
lea dx, vcal1
int 21h
jmp proses


end mulai

hasil : Password YOUR (Kapital semua)
ENTER PASSWORD : ****
WELCOME GUYS
Apabila terjadi kesalahan maka akan tampil “INCORRECT” 

 Lanjut ke praktikum VI - Whoamm.. semakin mengantuk
Baca Selanjutnya »

Praktikum IV - Membuat Kalimat


MEMBUAT KALIMAT

.model small
.code
org 100h
mulai:
      jmp proses
      vcal db 'nama :esti$'
      vcal1 db 10,09,'alamat :baturaden$'
      vcal2 db 10,'email : esti.yoeliana@gmail.com$'
      vcal3 db 10, 'hobi : tidur$'
proses:
      mov ah,09h
      lea dx,vcal
      int 21h
      lea dx,vcal1
      int 21h
      lea dx, vcal2
      int 21h
      lea dx, vcal3
      int 21h
      int 20h
end  mulai

ket : 09 adalah tab

Hasil :
Nama : esti         
      Alamat : baturaden
e-mail : esti.yoeliana@gmail.com
hobi : tidur



MEMBUAT TULISAN DENGAN FOREGROUND DAN BACKGROUND

Fore : pink
Back : merah


.model small
.code
org 100h
mulai :

            mov ah, 09h
            mov al, 'A'
            mov bh,00h
            mov bl, 011001101b
            mov cx, 20

ulang :

            int 10h
            inc al
loop ulang
int 20h
end mulai


hasil : TSRQONMLKJIHGFECDBA

 Lapper... xixi... lanjut ke praktikum V.. >_<
Baca Selanjutnya »

Praktikum III - Belajar Menggunakan Looping


PRACTICE I
.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
ulang1:
            int 21h
            dec dl
loop ulang1
int 20h

HASIL : ABCDEFGHIJKLMNOPQRSTUVWXYYXWVUTSRQPONMLKJIHGFEDCBA





PRACTICE II
.model small
.code
org 100h
mulai :
            mov ah,02h
            mov dl,'B'
            mov cx,13
ulang:
            int 21h
            inc dl
            inc dl
loop ulang

int 20h
end mulai


HASIL : BDFHJLNPRTVY

Lanjut ke Praktikum IV.. Whoamm cuacanya makin dingin saja


 
Baca Selanjutnya »

Praktikum II - Menganalisa Cara Kerja dengan Debug.com


Nama            :  Esti Yuliana
NIM               :  SIR200938
Mata kuliah    :  Pemrograman Bahasa Rakitan
Dosen            :  Nahar Mardiyantoro, S. Kom

Ini lanjutan kuliah yang pertama.. ^^ 

Cara : File yang sudah dilink dan compile menjadi .com lalu dicek dengan command prompt, misal :

C:\asm1>DEBUT NAMA.COM
Jika sudah NOP maka proses sudah selesai.











 Lanjut ke praktikum 3... Whoam.. persiapan ujian memang melelahkan apalagi untuk orang yang tidak terlalu pintar seperti aku ini ^^ yang penting semangat!
Baca Selanjutnya »