OPERASI ARITMATIKA

10
OPERASI ARITMATIKA Instruksi arithmetika meliputi: penambahan (addition), pengurangan (subtraction), pembandingan (comparison), perkalian (multiplication), pembagian (division). Aturan Penulisan Operasi Arithmetika (sintaks) Penjumlahan (Addition) a. Instruksi ADD -> ADD reg1, reg2 atau ADD reg, [alamat] Hasil penjumlahan disimpan di reg1. Contoh: ADD AX, BX ;hasilnya disimpan di AX b. Instruksi INC -> INC reg atau INC [alamat] Data pada reg atau [alamat] bertambah 1 Contoh: INC DX ;hasil DX = DX + 1 c. Instruksi ADC -> ADC reg1, reg2 atau ADC reg, [alamat] Penjumlahan biasa yang hasilnya ditambah dengan bit carry. Hasilnya disimpan di reg1. Contoh: ADC AH, AL ;AH=AH + AL + carry Pengurangan (Subtraction) a. Instruksi SUB -> SUB reg1, reg2 atau SUB reg, [alamat]

Transcript of OPERASI ARITMATIKA

Page 1: OPERASI ARITMATIKA

OPERASI ARITMATIKA Instruksi arithmetika meliputi: penambahan (addition), pengurangan (subtraction), pembandingan

(comparison), perkalian (multiplication), pembagian (division).

Aturan Penulisan Operasi Arithmetika (sintaks)

Penjumlahan (Addition)

a. Instruksi ADD -> ADD reg1, reg2 atau ADD reg, [alamat]

Hasil penjumlahan disimpan di reg1.

Contoh:

ADD AX, BX ;hasilnya disimpan di AX

b. Instruksi INC -> INC reg atau INC [alamat]

Data pada reg atau [alamat] bertambah 1

Contoh:

INC DX ;hasil DX = DX + 1

c. Instruksi ADC -> ADC reg1, reg2 atau ADC reg, [alamat]

Penjumlahan biasa yang hasilnya ditambah dengan bit carry. Hasilnya disimpan di

reg1.

Contoh:

ADC AH, AL ;AH=AH + AL + carry

Pengurangan (Subtraction)

a. Instruksi SUB -> SUB reg1, reg2 atau SUB reg, [alamat]

Hasil pengurangan disimpan di reg1.

Contoh:

SUB CX, BX ;hasilnya disimpan di CX

b. Instruksi DEC -> DEC reg atau DEC [alamat]

Data pada reg atau [alamat] akan bertambah 1

Contoh:

DEC CX ;hasil CX = CX + 1

c. Instruksi SBB -> SBB reg1, reg2 atau SUB [alamat], reg

Page 2: OPERASI ARITMATIKA

Pengurangan biasa yang hasilnya dikurangi dengan bit carry. Hasilnya disimpan di

reg1 atau [alamat].

Contoh:

SBB AH, AL ;hasil AH= AH – AL – carry

Pembandingan (CMP / Comparison)

Instruksi CMP -> CMP reg1, reg2 atau CMP reg, data

Membandingan isi reg1 dengan reg2 atau data.

Contoh:

CMP DL, BL ;bandingkan isi DL dengan BL

Perkalian (Multiplication)

Instruksi MUL -> MUL reg atau MUL [alamat]

Perkalian antara AL (8 bit) atau AX (16 bit) dengan isi reg atau [alamat], hasilnya

disimpan di AX (8 bit) atau DX-AX (16 bit).

Contoh: MUL DL ;isi AL (8 bit) dikali dengan DL, hasil di AX. MUL BX ;isi AX (16 bit) dikali dengan BX, hasil di DX-AX

Pembagian (Division)

a. Pembagian 8 bit -> DIV reg atau DIV [alamat]

Pembagian dividen (disimpan di AX) dengan divisor (reg 8 bit) atau data pada lokasi

memori, hasilnya disimpan di AL sisanya di AH.

Contoh:

DIV DL ;isi AX dibagi DL,hasil di AL sisanya di AH.

b. Pembagian 16 bit -> DIV reg (16 bit) atau DIV [alamat]

Pembagian dividen (disimpan di DX-AX) dengan divisor (reg 16 bit) atau data pada

lokasi memori, hasilnya disimpan di AX sisanya di DX.

OPERASI LOGIKA DAN PERGESERAN BITOperasi NOT dan NEG -> NOT/NEG reg atau NOT/NEG [alamat]Seluruh bit pada isi register atau [alamat] yang diberi NOT akan di-NOT-kan sedangkan jika diberi

NEG seluruh bit akan menjadi komplemen-2

Contoh:

NOT CL ;isi CL di-NOT-kan

Page 3: OPERASI ARITMATIKA

NOT [BP] ;isi di [alamat] BP akan di-NOT-kan

NEG CL ;isi CL di-NEG-kan (komplemen-2)

Operasi AND -> AND reg1, reg2/data atau AND reg, [alamat]

Register 1 akan di-AND-kan dengan register 2 atau data atau [alamat]Contoh:

AND CL, 45h ;isi CL di-AND-kan dengan 45h

AND AX, BX ;isi AX di-AND-kan dengan BX

AND BL,[250] ;isi BL di-AND-kan dengan isi di lokasi 250h

Operasi OR -> OR reg1, reg2/data atau OR reg, [alamat]Register 1 akan di-OR-kan dengan register 2 atau data/[alamat].

Contoh:

OR DH, 25h ;isi DH di-OR-kan dengan 25h

OR CX, BX ;isi CX di-OR-kan dengan BX

Operasi XOR -> XOR reg1, reg2/data atau XOR reg, [alamat]Register 1 akan di-XOR-kan dengan register2 atau data/[alamat]

Contoh:

XOR BL, 25h ;isi BL di-XOR-kan dengan 25h

XOR DX, BX ;isi DX di-XOR-kan dengan BX

Operasi TEST -> TEST reg1, reg2/data atau TEST reg, [alamat]Mirip dengan AND, hanya kedua register tidak berubah, yang berubah hanya bit-bit flag register.

Contoh:

TEST CL, 25h ;isi CL di-AND-kan dengan 25h tanpa mengubah isi CL.

Instruksi SHL (Shift Left) -> SHL reg, CLIsi register di geser ke kiri sebanyak nilai CL.

Contoh:

MOV CL, 2h

SHL AH, CL ;isi AH digeser ke kiri 2 langkah.

Instruksi SHR (Shift Right) -> SHR reg, CL

Page 4: OPERASI ARITMATIKA

Isi register di geser ke kanan sebanyak nilai CL. Contoh:

MOV CL, 2h SHR AH, CL ;isi AH digeser ke kanan 2 langkah

Rotasi (Rotate)Instruksi ini digunakan untuk memutar isi bit pada suatu register ke kiri atau ke kanan sesuai perintah yang diberikan.

Instruksi ROL (Rotate Left) -> ROL reg, CL

Isi register di rotasi ke kiri sebanyak CL

Contoh:

ROL AH, 2h ;isi AH dirotasi ke kiri 2 langkah

Instruksi ROR (Rotate Right) -> ROR reg, CL

Isi register di rotasi ke kanan sebanyak CL

Contoh:

ROR AH, 2h ;isi AH dirotasi ke kiri 2 langkah

OPERASI STRING

String adalah jenis data yang terdiri atas kumpulan karakter, angka maupun simbol. Pada operasi ini

register SI dan DI punya peranan khusus.

SI dipakai untuk mencatat alamat dari sumber string, sedangkan DI digunakan untuk mencatat

alamat atau tempat hasil manipulasi string.

Perintah yang dipakai:

CLD, STD, CMPS, CMPSB, LODS, LODSB, LODSW, MOVS, MOVSB, MOVSW, REP, REPE,

STOS, STOSB

OPERASI JUMP (Lompatan)

Pengertian Operasi JumpInstruksi lompatan pada suatu program akan menyebabkan program melompati bagian tertentu dan

mengeksekusi instruksi yang dikehendaki. Ada 2 jenis instruksi dalam operasi jump yaitu: lompat tak

bersyarat dan lompat bersyarat.

Lompatan tak bersyaratInstruksi lompatan ini langsung menuju ke alamat memori yang dituju tanpa syarat apapun, sehingga

program langsung dapat kita arahkan menuju lokasi memori atau label dengan perintah atau instruksi

JMP

Aturan penulisannya : JMP lokasi memori/label

Ada 3 jenis instruksi lompatan tak bersyarat yaitu:

Page 5: OPERASI ARITMATIKA

Lompatan pendek (short jump) -> JMP SHORT disp yaitu melakukan lompatan maksimal sejauh 127 byte.Contoh:

JMP SHORT 04h ;melakukan lompatan sejauh 4 byte

Lompatan dekat (near jump) -> JMP disp_low disp_high yaitu melakukan lompatan lebih

panjang maksimal 32 Kb.Contoh:

JMP 0200h ;melakukan lompatan ke lokasi memori 200h

Lompatan jauh (far jump) -> JMP FAR iplow Cslow Cshigh yaitu melakukan lompatan ke seluruh daerah memori.Contoh:

JMP FAR nH ;melakukan lompatan jauh ke lokasi tertentu

Lompatan bersyarat

Yaitu lompatan pendek yang dilakukan ke seluruh daerah memori dalam segmen memori yang sama

dan terjangkau oleh operasi ini. Instruksi ini menggunakan CMP untuk membandingkan kondisi yang

dicek, sehingga akan melompat ke alamat yang dituju sesuai instruksi lompatan bersyarat, dimana

instruksi lompatan bersyarat antara lain :

JA (Jump if Above) ; lompat bila operand 1 > operand2 (bilangan tak bertanda) JAE (Jump if Above or Equal); lompat bila operand 1 >= operand2 (bilangan tak bertanda) JB (Jump if Below) ; lompat bila operand 1 < operand2 (bilangan tak bertanda) JBE (Jump if Below or Equal); lompat bila operand 1 <= operand2 (bilangan tak bertanda) JG (Jump if Greater); lompat bila operand 1 > operand2 (bilangan bertanda) JGE (Jump if Greater or Equal) ; lompat bila operand 1 >= operand2 (bilangan bertanda) JL (Jump if Less) ; lompat bila operand 1 < operand2 (bilangan bertanda) JLE (Jump if Less or Equal) ; lompat bila operand 1 <= operand2 (bilangan bertanda) JC (Jump if Carry) ; lompat bila ada bawaan JNC (Jump if No Carry) ; lompat bila tidak ada bawaan JE atau JZ (Jump if Equal)/(Jump if Zerro) ; lompat bila operand 1 = operand 2 JNE atau JNZ (Jump if Not Equal)/(Jump if Not Zero); lompat bila operand 1 <> operand 2 JO (Jump on Overflow) ; lompat bila terjadi overflow JNO (Jump if No Overflow); lompat bila tidak terjadi overflow JS (Jump On Sign) ; lompat bila negatif JNS (Jump if No Sign) ; lompat bila positif JP atau JPE (Jump on Parity)/(Jump if ParityEven) ; lompat bila berparitas genap JNP atau JPO (Jump if No Parity)/(Jump if Parity Odd); lompat bila berparitas ganjil JCXZ (Jump if CX is Zero) ; lompat bila CX=0 JECXZ (Jump if Equal CX is Zero); lompat bila ECX=0 (khusus 80486 ke atas)

Penulisan instruksi lompat bersyarat yang diawali dengan instruksi CMP yang berguna untuk

membandingkan isi register untuk dilompati sesuai kondisi.

OPERASI STACK

Page 6: OPERASI ARITMATIKA

Pengertian Operasi Stack

Stack (tumpukan) adalah bagian memori yang digunakan untuk menyimpan nilai dari register hanya

sementara saja. Pada stack digunakan pasangan SS:SP untuk menunjukkan lokasi dari stack.

Perintah yang digunakan adalah PUSH (menaruh ke dalam stack), dan POP (mengambil data dari

stack).

Instruksi PUSH untuk operasi stack

Merupakan instruksi untuk memasukkan data ke dalam stack (tumpukan). Data berasal dari data

mentah, register atau isi lokasi memori

Sintaks: PUSH reg

PUSH [lokasi memori]

PUSH data

Instruksi POP

Merupakan instruksi untuk mengambil kembali data dari stack (kebalikan PUSH) ke dalam register

atau lokasi memori

Sintaks: POP reg

POP [alamat]

POPF ;mengambil isi stack dan ditempatkan di reg flag

Instruksi PUSHF

Merupakan instruksi untuk memasukkan isi register flag ke dalam stack

Sintaks: PUSHF

Perpindahan data selain MOVBeberapa instruksi perpindahan data selain memakai MOV meliputi: PUSH, POP, XCHG, LEA,

perpindahan data string (LODS, STOS dan MOVS)

Aturan penulisan operasi perpindahan data (sintaks)

Instruksi XCHG (exchange)

Berfungsi untuk menukarkan isi register dengan register lain atau isi register dengan isi lokasi

memori. Tidak berlaku untuk antar lokasi memori.

Sintaks: XCHG reg, reg

XCHG reg, [alamat]

Contoh:

XCHG AX, BX ;menukar isi AX dengan BX

Page 7: OPERASI ARITMATIKA

XCHG DX, [DI] ;menukar isi DX dengan isi lokasi memori DI

XCHG [SI], CH ;menukar isi lokasi memori dengan CH

Instruksi LEA (Load Effective Address)

Berfungsi untuk mengambil alamat suatu data pada lokasi memori dan meletakkannya di register 16

bit.

Sintaks: LEA reg, [alamat]

LEA reg, variable

Contoh:

LEA BX, [DI] ;isi alamat di reg DI diambil dan disimpan di BX LEA BX, VAR1 ;isi alamat offset data dengan label VAR1 diambil dan

disimpan di BX

LEA AX, [SI] ;isi data di lokasi memori SI diambil dan disimpan

di AX

Instruksi LODS (Load String)

Berfungsi untuk memindahkan data string pada segment data yang alamat offsetnya ditunjukkan oleh

isi register SI ke accumulator (AL, AX) akan di-increment (+1) atau decrement (-1). Instruksi ini

ditambah dengan B bila memindahkan byte, W (word) atau D (double word).

Contoh:

LODSB ; data byte di lokasi memori SI dipindah ke reg AL

LODSW ; data word di lokasi memori SI dipindah ke reg AX

LODSD ; data doubleword di lokasi SI dipindah ke reg EAX

LODS DAT1 ;data label DAT1 dipindah ke AL (byte)

LODS DAT2 ;data label DAT2 dipindah ke AX (word)

LODS DAT3 ;data label DAT3 dipindah ke EAX (doubleword)

Instruksi STOS (Store string)

Berfungsi memindahkan string pada AL, AX, EAX ke ekstra segment yang alamat offsetnya

ditunjukkan oleh isi DI (ES:DI)

Contoh:

STOSB ;isi AL dipindah ke lokasi memori DI

STOSW ;isi AX dipindah ke lokasi memori DI

STOS DAT1 ;isi AL dipindah ke label DAT1 di alamat DI

Page 8: OPERASI ARITMATIKA

Instruksi MOVS (Move string)

Memindahkan isi string dari suatu lokasi memori ke lokasi memori yang lain berupa byte,

word atau double word dari data segment beralamat offset SI ke ekstra segment beralamat

offset DI.

Contoh:

MOVSB ;isi lokasi memori berisi byte ke lokasi memori lain

MOVSW ;isi lokasi memori berisi word ke lokasi memori lain

MOVSD ;isi lokasi memori berisi double word ke lokasi lain