LAPORAN PEMROGRAMAN ASSEMBLER KONSEP ARI

LAPORAN PEMROGRAMAN ASSEMBLER
KONSEP ARITMATIK DAN LOGIKA

Oleh :
Meyla Yan Sari
3.34.13.1.10
IK-2B

PROGRAM STUDI TEKNIK INFORMATIKA
JURUSAN TEKNIK ELEKTRO
POLITEKNIK NEGERI SEMARANG
2014

I.

Tujuan
Dalam praktikum ini mahasiswa mampu menggunakan instruksi logic dan aritmetik.

II.

Dasar Teori

Kebanyakan Aritmatika dan Logika Instruksi mempengaruhi prosesor status register
(atau Flags).

Seperti yang Anda lihat ada 16 bit dalam register ini, setiap bit disebut bendera dan
dapat mengambil nilai 1 atau 0.
-

Carry Flag (CF) - bendera ini diatur ke 1 ketika ada melimpah unsigned.
Misalnya ketika Anda menambahkan byte 255 + 1 (hasil tidak dalam kisaran 0

-

... 255). Ketika tidak ada melimpah bendera ini diatur ke 0.
Nol Flag (ZF) - set ke 1 ketika hasilnya adalah nol. untuk tidak nol hasil

-

bendera ini diatur ke 0.
Sign Flag (SF) - set ke 1 ketika hasilnya negatif. Kapan Hasil positif itu diatur


-

ke 0. Sebenarnya bendera ini mengambil nilai bit yang paling signifikan.
Overflow Flag (OF) - set ke 1 ketika ada yang ditandatangani overflow.
Sebagai contoh, ketika Anda menambahkan byte 100 + 50 (hasil tidak dalam

-

kisaran -128 ... 127).
Parity Flag (PF) - bendera ini diatur ke 1 ketika ada bahkan jumlah satu bit
dalam hasil, dan 0 bila ada yang aneh jumlah satu bit. Bahkan jika hasilnya
adalah sebuah kata hanya 8 bit rendah dianalisis!

-

Auxiliary Flag (AF) - set ke 1 bila ada unsigned melimpah untuk menggigit

-

rendah (4 bit).

Interrupt mengaktifkan Flag (IF) - ketika bendera ini diatur ke 1 CPU bereaksi

-

untuk menyela dari perangkat eksternal.
Direction Flag (DF) - bendera ini digunakan oleh beberapainstruksi untuk
memproses rantai data, ketika bendera ini diatur ke 0 - pengolahan dilakukan
ke depan, ketika bendera ini diatur ke 1 pengolahan dilakukan mundur.

Terdapat 3 grup :
1. ADD, SUB,CMP, AND, TEST, OR, XOR
Jenis operan yang didukung:
REG, memory
memory, REG
REG, REG
memory, immediate
REG, immediate
REG: AX, BX, CX, DX, AH, AL, BL, BH, CH, CL, DH, DL, DI, SI, BP, SP.
Memori: [BX], [BX + SI + 7], variabel, dll ...
langsung: 5, -24, 3Fh, 10001101b, dll ...

Setelah operasi antara operan, hasilnya selalu disimpan dalam pertama
operan. CMP dan instruksi UJI mempengaruhi bendera saja dan tidak
menyimpan hasil (instruksi ini digunakan untuk membuat keputusan
selama eksekusi program).
Instruksi ini mempengaruhi bendera ini hanya:
CF, ZF, SF, OF, PF, AF.
ADD – menambahkan operan kedua terlebih dahulu.
SUB – Kurangi operan kedua terlebih dahulu.
CMP – Kurangi operan kedua dari pertama bendera saja.
AND – Logika AND antara semua bit dari dua operan. ini
aturan berlaku :
1 AND 1 = 1
1 AND 0 = 0
0 AND 1 = 0
0 AND 0 = 0
Seperti yang Anda lihat kita mendapatkan 1 hanya jika kedua bit adalah 1.
TEST – Sama seperti AND tetapi untuk bendera saja.

OR – Logical OR antara semua bit dari dua operan. ini
aturan berlaku :

1 OR 1 = 1
1 OR 0 = 1
0 OR 1 = 1
0 OR 0 = 0
Seperti yang Anda lihat kita mendapatkan 1 setiap saat setidaknya satu dari bit
adalah 1.
XOR – XOR Logical (eksklusif OR) antara semua bit dari dua operan.
Aturan-aturan ini berlaku :
1 XOR 1 = 0
1 XOR 0 = 1
0 XOR 1 = 1
0 XOR 0 = 0
Seperti yang Anda lihat kita mendapatkan 1 setiap kali ketika bit yang berbeda
satu sama lain.
2. MUL, IMUL, DIV, IDIV
Tipe operand yang mendukung :
REG
Memory
REG: AX, BX, CX, DX, AH, AL, BL, BH, CH, CL, DH, DL, DI, SI, BP, SP.
memory: [BX], [BX+SI+7], variable, etc

MUL dan instruksi imul mempengaruhi bendera ini hanya : CF, OF
Ketika hasil lebih ukuran operan bendera ini diatur ke 1, ketika hasil cocok
dalam ukuran operan bendera ini diatur ke 0.
Untuk DIV dan IDIV bendera tidak terdefinisi.
MUL - kalikan Unsigned:
ketika operan adalah byte:
AX = AL * operan.
ketika operan adalah kata:
(DX AX) = AX * operan.
imul - Signed multiply:
ketika operan adalah byte:
AX = AL * operan.
ketika operan adalah kata:
(DX AX) = AX * operan.
DIV - membagi Unsigned:
ketika operan adalah byte:
AL = AX / operan
AH = sisa (modulus)
ketika operan adalah kata:


AX = (DX AX) / operan
DX = sisa (modulus)
IDIV - Menandatangani membagi:
ketika operan adalah byte:
AL = AX / operan
AH = sisa (modulus). .
ketika operan adalah kata:
AX = (DX AX) / operan
DX = sisa (modulus)
3. INC, DEC, NOT, NEG
Operan yang mendukung :
REG
Memory
REG: AX, BX, CX, DX, AH, AL, BL, BH, CH, CL, DH, DL, DI, SI, BP, SP.
memory: [BX], [BX+SI+7], variable, dll
INC, instruksi Desember mempengaruhi bendera ini hanya:
ZF, SF, OF, PF, AF.
TIDAK instruksi tidak mempengaruhi bendera!
Instruksi NEG mempengaruhi bendera ini hanya:
CF, ZF, SF, OF, PF, AF.

TIDAK - Reverse setiap bit operan.
NEG - Membuat operan negatif (melengkapi dua itu).
Sebenarnya membalikkan setiap bit operan dan kemudian menambahkan 1
sampai itu. Misalnya 5 akan menjadi -5, dan -2 akan menjadi 2.
III.

Alat dan Bahan
1. Software Emu8086
2. Ms.Word

IV.

Langkah Kerja
1. Hidupkan komputer
2. Buka emulator 8086 yang telah dinstal pada laptop anda
3. Setelah terbuka, klik new untuk lembar kerja baru

4. Akan muncul form seperti berikut, klik COM Template > OK

5. Lembar kerja yang sudah siap untuk digunakan seperti pada gambar

berikut

6. Mulai ketikan code berikut untuk membuat aritmatika untuk rundom >
klik emulate

7. Muncul form seperti berikut. Kemudian klik run.

8. Rundom diamond berhasil anda buat

V.

Analisis
Membuat karakter muncul secara random

org 100h
JMP Mulai
BibitRandom dw 0
bernilai word
PosX db ?
PosY db ?


;mengambil dari waktu

dw=bibit random

Mulai:
MOV CX,100
Ulang:
CALL GenRandom
CALL SetCursor

;?menunjukkan nilai random

;call generatorRandom

MOV AH,02H
MOV DL,4
INT 21H

;menggambar


MOV AH,02H
MOV DL,7
INT 21H

;suara

ret

LOOP Ulang
INT 20H

InitRandom:
PUSH AX
PUSH CX
PUSH DX

;mengambil tic dalam

MOV AH,00H
INT 1AH
MOV BibitRandom,DX ;data diambil dari DX disimpan di bibit
random
POP DX
POP CX
POP AX
ret
GenRandom:
PUSH AX
PUSH BX
PUSH DX
Call InitRandom
MOV AX,BibitRandom

MOV BX,25
DIV BX
MOV PosX,DL

;25=set kursor posisi baris

CALL InitRandom
MOV
MOV
DIV
MOV

AX,BibitRandom
BX,80
BX
PosY,DL

;DL karena menggunakan 16bit

POP DX
POP BX
POP AX

ret

SetCursor:
PUSH AX
PUSH DX
MOV
MOV
MOV
INT

ret

AH,2
DH,PosX
DL,PosY
10H

POP DX
POP AX

END

VI.

Tugas
Membuat karakter pacman muncul secara random

org 100h
JMP Mulai
BibitRandom dw 0
bernilai word
PosX db ?
PosY db ?
Mulai:
MOV CX,100
Ulang:
CALL GenRandom
CALL Pacman

;mengambil dari waktu
;?menunjukkan nilai random

;call generatorRandom
;memanggil pacman

dw=bibit random

CALL SetCursor

MOV AH,02H
MOV DL,7
INT 21H

;suara

LOOP Ulang
INT 21H
ret
InitRandom:
PUSH AX
PUSH CX
PUSH DX

;mengambil tic dalam

MOV AH,00H
INT 1AH
MOV BibitRandom,DX ;data diambil dari DX disimpan di bibit
random

ret

POP DX
POP CX
POP AX

GenRandom:
PUSH AX
PUSH BX
PUSH DX
Call InitRandom
MOV
MOV
DIV
MOV

AX,BibitRandom
BX,25
BX
PosX,DL

;25=set kursor posisi baris

CALL InitRandom
MOV
MOV
DIV
MOV

AX,BibitRandom
BX,80
BX
PosY,DL

POP DX
POP BX
POP AX

;DL karena menggunakan 16bit

ret
SetCursor:
PUSH AX
PUSH DX
MOV
MOV
MOV
INT

AH,2
DH,PosX
DL,PosY
10H

POP DX
POP AX
ret

Pacman:
PUSH
PUSH
PUSH
PUSH

AX
BX
CX
DX

;register yang di save

MOV AH,02H
;memposisikan kursor
MOV BH,00H
MOV DH,PosY
MOV DL,PosX
INT 10H
;penggambaran karakter
MOV AH,09H
MOV BH,00H
MOV BL,44H
MOV
MOV
INT
;gotoXY
MOV
MOV
MOV
INC
MOV
INT

CX, 3
AL, 179
10H
ke2
AH,02H
BH,00H
DH,PosY
DH
DL,PosX
10H

MOV AH,09H
MOV BH,00H
MOV BL,44H
MOV CX, 1
MOV AL, 179
INT 10H

;gotoXY
MOV
MOV
MOV
ADD
MOV
INT

ke3
AH,02H
BH,00H
DH,PosY
DH,2
DL,PosX
10H

MOV AH,09H
MOV BH,00H
MOV BL,44H
MOV CX, 3
MOV AL, 179
INT 10H
;harus urut
POP DX
POP CX
POP BX
POP AX
END

ret

Hasil :

VII.

Kesimpulan
Instrusi logika dan aritmatik di bagi menjadi tiga kelompok instruksi yaitu kelompok
pertama : ADD, SUB, CMP, AND, TEST, OR, XOR. Untuk kelompok kedua
diantaranya MUL, IMUL, DIV, IDIV. Dan untuk kelompok yang ketiga ada INC,
DEC, NOT, dan NEG. Dimana masing masing kelompok digunakan pada saat-saat
tertentu dengan fungsi masing-masing yang dimiliki oleh ketiga kelompok instruksi
aritmatika dan logika tersebut.