Upload
polines
View
1
Download
0
Embed Size (px)
Citation preview
LAPORAN PEMROGRAMAN ASSEMBLERKONSEP ARITMATIK DAN LOGIKA
Oleh :Meyla Yan Sari
3.34.13.1.10IK-2B
PROGRAM STUDI TEKNIK INFORMATIKAJURUSAN TEKNIK ELEKTRO
POLITEKNIK NEGERI SEMARANG2014
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
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 ;mengambil dari waktu dw=bibit random bernilai wordPosX db ? ;?menunjukkan nilai randomPosY db ?
Mulai: MOV CX,100Ulang: CALL GenRandom ;call generatorRandom CALL SetCursor MOV AH,02H ;menggambar MOV DL,4 INT 21H MOV AH,02H ;suara MOV DL,7 INT 21H LOOP Ulang INT 20Hret
InitRandom: ;mengambil tic dalam PUSH AX PUSH CX PUSH DX MOV AH,00H INT 1AH MOV BibitRandom,DX ;data diambil dari DX disimpan di bibit random POP DX POP CX POP AXret
GenRandom: PUSH AX PUSH BX PUSH DX
Call InitRandom
MOV AX,BibitRandom MOV BX,25 ;25=set kursor posisi baris DIV BX MOV PosX,DL CALL InitRandom MOV AX,BibitRandom MOV BX,80 DIV BX MOV PosY,DL ;DL karena menggunakan 16bit POP DX POP BX POP AXret SetCursor: PUSH AX PUSH DX MOV AH,2 MOV DH,PosX MOV DL,PosY INT 10H POP DX POP AXret
END
VI. TugasMembuat karakter pacman muncul secara random
org 100h JMP Mulai BibitRandom dw 0 ;mengambil dari waktu dw=bibit random bernilai wordPosX db ? ;?menunjukkan nilai randomPosY db ?
Mulai: MOV CX,100
Ulang: CALL GenRandom ;call generatorRandom CALL Pacman ;memanggil pacman CALL SetCursor MOV AH,02H ;suara MOV DL,7 INT 21H LOOP Ulang INT 21Hret
InitRandom: ;mengambil tic dalam PUSH AX PUSH CX PUSH DX MOV AH,00H INT 1AH MOV BibitRandom,DX ;data diambil dari DX disimpan di bibit random POP DX POP CX POP AXret
GenRandom: PUSH AX PUSH BX PUSH DX
Call InitRandom MOV AX,BibitRandom MOV BX,25 ;25=set kursor posisi baris DIV BX MOV PosX,DL CALL InitRandom MOV AX,BibitRandom MOV BX,80 DIV BX MOV PosY,DL ;DL karena menggunakan 16bit
POP DX POP BX POP AXret SetCursor: PUSH AX PUSH DX MOV AH,2 MOV DH,PosX MOV DL,PosY INT 10H POP DX POP AXret
Pacman: PUSH AX ;register yang di save PUSH BX PUSH CX PUSH DX 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 CX, 3 MOV AL, 179 INT 10H ;gotoXY ke2 MOV AH,02H MOV BH,00H MOV DH,PosY INC DH MOV DL,PosX INT 10H MOV AH,09H MOV BH,00H
MOV BL,44H MOV CX, 1 MOV AL, 179 INT 10H ;gotoXY ke3 MOV AH,02H MOV BH,00H MOV DH,PosY ADD DH,2 MOV DL,PosX INT 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 retEND
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.