Welcome GuestFriday, 2025-01-31, 0:38 AM

Free Your Voice


Main » 2010 » September » 27 » Tutorial Assembly II
5:45 AM
Tutorial Assembly II

Pengulangan

LOOP : loop. Mengulang sebuah proses.
Pertama register CX dikurangi satu. Bila CX sama dengan nol, maka looping berhenti. Bila tidak nol, maka lompat ke label tujuan.
sintaks: LOOP {label tujuan}
Tips: isi CX dengan nol untuk mendapat jumlah pengulangan terbanyak. Karena nol dikurang satu sama dengan -1, atau dalam notasi two's complement menjadi FFFF(hex) yang sama dengan 65535(dec).

LOOPE : loop while equal.
Melakukan pengulangan selama CX ≠ 0 dan ZF = 1. CX tetap dikurangi 1 sebelum diperiksa.
sintaks: LOOP {label tujuan}

LOOPZ : loop while zero.
Identik dengan LOOPE.


while not equal.
Melakukan pengulangan selama CX ≠ 0 dan ZF = 0. CX tetap dikurangi 1 sebelum diperiksa.
sintaks: LOOPNE {label tujuan}

LOOPNZ : loop while not zero.
Identik dengan LOOPNE.

REP : repeat. Mengulang perintah sebanyak CX kali.
sintaks: REP {perintah assembly}
contoh:

mov CX, 05
rep inc BX ;register BX ditambah 1 sebanyak 5x.

REPE : repeat while equal. Mengulang perintah sebanyak CX kali, tetapi pengulangan segera dihentikan bila didapati ZF = 1.
sintaks: REPE {perintah assembly}

REPZ : repeat while zero.
Identik dengan REPE.

REPNE : repeat while not equal. Mengulang perintah sebanyak CX kali, tetapi pengulangan segera dihentikan bila didapati ZF = 0.
sintaks: REPNE {perintah assembly}

REPNZ : repeat while not zero.
Identik dengan REPNE.

Perbandingan

CMP : compare. Membandingkan dua buah operand. Hasilnya mempengaruhi sejumlah flag register.
sintaks: CMP {operand 1}, {operand 2}.
Operand ini bisa register dengan register , register dengan isi memori, atau register dengan angka. CMP tidak bisa membandingkan isi memori dengan isi memori.


Lompat-lompat

JMP: jump. Lompat tanpa syarat. Lompat begitu saja.
sintaks: JMP {label tujuan}

Lompat bersyarat
sintaksnya sama dengan JMP, yaitu perintah jump diikuti label tujuan.

Operasi stack

PUSH : push. Menambahkan sesuatu ke stack.
Sesuatu ini harus register berukuran 16 bit (pada 386+ harus 32 bit), tidak boleh angka, tidak boleh alamat memori. Maka Anda tidak bisa mem-push register 8-bit seperti AH, AL, BH, BL, dan kawan-kawannya.
sintaks: push {register 16-bit sumber}
contoh:
push DX
push AX
Setelah operasi push, register SP (stack pointer) otomatis dikurangi 2 (karena datanya 2 byte). Makanya, "top" dari stack seakan-akan "tumbuh turun".

POP : pop. Mengambil sesuatu dari stack.
Sesuatu ini akan disimpan di register tujuan dan harus 16-bit. Maka Anda tidak bisa mem-pop menuju AH, AL, dkk.
sintaks: POP {register 16-bit tujuan}
contoh: POP BX
Setelah operasi pop, register SP otomatis ditambah 2 (karena 2 byte), sehingga "top" dari stack "naik" lagi.

Tip: karena register segmen tidak bisa diisi langsung nilainya, Anda bisa menggunakan stack sebagai perantaranya. Contoh kodenya:
mov AX, seg teks1
push AX
pop DS

PUSHF : push flags. Mem-push semua isi register flag ke dalam stack. Biasa dipakai untuk membackup data di register flag sebelum operasi matematika. Sintaks: PUSHF ;(saja).

POPF : pop flags. Lawan dari pushf. Sintaks: POPF ;(saja).

POPA : pop all general-purpose registers. Adalah ringkasan dari sejumlah perintah dengan urutan:

pop DI
pop SI
pop BP
pop SP
pop BX
pop DX
pop CX
pop AX

Urutan sudah ditetapkan seperti itu.
sintaks: POPA ;(saja).
Jauh lebih cepat mengetikkan POPA daripada mengetik POP-POP-POP yang banyak itu, bukan?

PUSHA : push all general-purpose registers. Lawan dari POPA, dimana PUSHA adalah singkatan dari sejumlah perintah dengan urutan yang sudah ditetapkan:

push AX
push CX
push DX
push BX
push SP
push BP
push SI
push DI

Jangan tanyakan kenapa setelah urutannya AX langsung CX serta DX dan bukannya BX dulu. Bukan saya yang ngatur urutannya seperti itu.

Operasi pada register flag

CLC : clear carry flag. Menjadikan CF = 0. Sintaks: CLC ;(saja).

STC : set carry flag. Menjadikan CF = 1. Sintaks: STC ;(saja).

CMC : complement carry flag. Melakukan operasi NOT pada CF. Yang tadinya 0 menjadi 1, dan sebaliknya.

CLD : clear direction flag. Menjadikan DF = 0. Sintaks: CLD ;(saja).

STD : set direction flag. Menjadikan DF = 1.

CLI : clear interrupt flag. Menjadikan IF = 0, sehingga interrupt ke CPU akan di-disable. Biasanya perintah CLI diberikan sebelum menjalankan sebuah proses penting yang riskan gagal bila diganggu.

STI : set interrupt flag. Menjadikan IF = 1.

Perintah lainnya

ORG : origin. Mengatur awal dari program (bagian static data). Analoginya seperti mengatur dimana letak titik (0, 0) pada koordinat Cartesius.
sintaks: ORG {alamat awal}

Pada program COM (program yang berekstensi .com), harus ditulis "ORG 100h" untuk mengatur alamat mulai dari progam pada 0100(hex), karena dari alamat 0000(hex) sampai 00FF(hex) sudah dipesan oleh sistem operasi (DOS).

INT : interrupt. Menginterupsi prosesor. Prosesor akan:
1. Membackup data registernya saat itu,
2. Menghentikan apa yang sedang dikerjakannya,
3. Melompat ke bagian interrupt-handler (entah dimana kita tidak tahu, sudah ditentukan BIOS dan DOS),
4. Melakukan interupsi,
5. Mengembalikan data registernya,
6. Meneruskan pekerjaan yang tadi ditunda.
sintaks: INT {nomor interupsi}

IRET : interrupt-handler return. Kita bisa membuat interrupt-handler sendiri lho! Ada caranya. Perintah IRET adalah perintah yang menandakan bahwa interrupt-handler kita selesai, dan prosesor boleh melanjutkan pekerjaan yang tadi tertunda.

CALL : call procedure. Memanggil sebuah prosedur. Soal ini saya belum mengerti benar, jadi penjelasannya sementara tidak ada dulu.
sintaks: CALL {label nama prosedur}

RET : return. Tanda selesai prosedur. Setiap prosedur harus memiliki RET di ujungnya. Soal ini saya belum mengerti benar, jadi penjelasannya sementara tidak ada dulu.
sintaks: RET ;(saja)

HLT : halt. Membuat prosesor menjadi tidak aktif. Prosesor harus mendapat interupsi dari luar atau di-reset supaya aktif kembali. Jadi, jangan gunakan perintah HLT untuk mengakhiri program!!
Sintaks: HLT ;(saja).

NOP : no operation. Perintah ini memakan 1 byte di memori tetapi tidak menyuruh prosesor melakukan apa-apa selama 3 clock prosesor. Berikut contoh potongan program untuk melakukan delay selama 0,1 detik pada prosesor Intel 80386 yang berkecepatan 16 MHz.

mov ECX, 533333334d  ;ini adalah bilangan desimal
idle:
  nop
loop idle

Category: Code pRoGram | Views: 1191 | Added by: Nazk | Rating: 0.0/0
Total comments: 0
Name *:
Email *:
Code *:
Category
tiPz & tRikz [4]
KoMpuTer [3]
neTwoRk [2]
Code pRoGram [5]
OuTdooR [0]
Live sTyLe [0]
mY VoiCe [3]
AdvErTiseMenT [0]
cORd muSic [1]
tuGas camPuz [2]
yOur pooL
Rate my site
Total of answers: 3
seArcH
Geographic Photo
LoGin
CaLenDer
«  September 2010  »
SuMoTuWeThFrSa
   1234
567891011
12131415161718
19202122232425
2627282930
CLocK
mp3
GoogLe SerViCe
Classic aRt