BAB 3
BAB 3
Pemrograman Zilog
Pemrograman Zilog
Z80
Z80
Lanjutan
Lanjutan
Oleh Oleh ::
Setiawardhana Setiawardhana
Buku
Buku:: BahasaBahasa Assembly (Buku KomputerAssembly (Buku Komputer 3)3) oleholeh : Son: Son KuswadiKuswadi
Politeknik Elektronika Negeri
Pokok Bahasan
Pokok Bahasan
Addressing Mode Addressing Mode ??
FLAGFLAG ??
Instruksi AritmatikaInstruksi Aritmatika??
BranchBranch ??
Addressing mode
Addressing mode
RegisterRegister DirectDirect ImmediateImmediateRegister IndirectRegister Indirect
Addressing mode
Addressing mode
-
-
Register
Register
Perpindahan dariPerpindahan dari source operand internal source operand internal
register
register keke destination operand internal registerdestination operand internal register ContohContoh : : LD A,B LD A,B LD B,C LD B,C
Addressing mode
Addressing mode
-
-
Direct
Direct
Menyebut langsung alamat memori pada Menyebut langsung alamat memori pada
bagian instruksi bagian instruksi
ContohContoh : (: (InstruksiInstruksi 33--byte)byte)
LD A,(800Ah) LD A,(800Ah) LD (8050h),A LD (8050h),A
Addressing mode
Addressing mode
-
-
Immediate
Immediate
Data yangData yang diolah merupakan bagian dari diolah merupakan bagian dari
instruksi instruksi
ContohContoh : (: (InstruksiInstruksi 22 atauatau 3 byte)3 byte)
LD A,4Eh LD A,4Eh LD H, LD H,FFhFFh LD HL,8003h LD HL,8003h
Addressing mode
Addressing mode
–
–
Register Indirect
Register Indirect
MenggunakanMenggunakan register internal (16 bit)register internal (16 bit) atau atau
pasangan
pasangan registerregister sebagai sumber dari alamat sebagai sumber dari alamat memori memori Contoh Contoh :: LD (HL),A LD (HL),A LD A,(DE) LD A,(DE) LD (BC),A LD (BC),A
Addressing mode
Addressing mode
-
-
Indexed
Indexed
Register IXRegister IX dandan IYIY
Bisa diisiBisa diisi datadata sembarangsembarang
Sebagai penunjuk alamatSebagai penunjuk alamat sourcesource atauatau
destination destination ContohContoh :: LD A,(IY+3) LD A,(IY+3) LD (IX+2),B LD (IX+2),B
Addressing mode
Addressing mode
-
-
Indexed
Indexed
ContohContoh ::
Register IYRegister IY : 8060h: 8060h
InstruksiInstruksi : LD (IY+3),A: LD (IY+3),A
HasilHasil :: memindahkanmemindahkan datadata dari dari
register A
register A ke alamatke alamat 8060h+3 8060h+3 = 8063h
Konsep
Konsep
-
-
Indexed Addressing
Indexed Addressing
4A A IY 8060 8063 (8060)+3 XX SEBELUM INSTRUKSI 4A A IY 8060 8063 (8060)+3 4A SESUDAH INSTRUKSI
FLAG
FLAG
Menandai operasiMenandai operasi CPUCPU
Flag register Z80 :Flag register Z80 :
CY CY N N P/V P/V X X H H X X Z Z S S CY Carry Flag P/V Parity/Overflow Flag
H Half Carry Flag
Z Zero Flag
S Sign Flag
Flag
Flag
CY : Carry FlagCY : Carry Flag
“1” = true ,“1” = true , bila mikroprosessor membangkitkanbila mikroprosessor membangkitkan
carry internal
carry internal keke carry bitcarry bit
Operasi aritmatika dan logikaOperasi aritmatika dan logika
BitBit keke--9 ?9 ?
Flag
Flag
P/VP/V ParityParity ContohContoh :: 0101000 0101000 0001000 0001000 --- ++ 0110000 = parity0110000 = parity genapgenap
OverflowOverflow
ContohContoh :: penambahanpenambahan22 bilangan positifbilangan positif
0111 1110 = +126 0111 1110 = +126 0000 0010 = + 2 0000 0010 = + 2 --- ++ 1000 0000 =
1000 0000 = --128 (invalid = overflow)128 (invalid = overflow)
ContohContoh :: penambahanpenambahan22 bilangan negatifbilangan negatif
1000 0010 = 1000 0010 = --126126 1000 1000 = 1000 1000 = --120120 --- ++ 0000 1010 carry 1 (
Flag
Flag
Half CarryHalf Carry
Flag “true”Flag “true” bila adabila ada carrycarry daridari bit 3bit 3 dandan 44
InstruksiInstruksi DAA (DAA (desimaldesimal adjust accumulation)adjust accumulation)
DAADAA menanganimenangani 4 bit4 bit dandan carrycarry daridari bit 3bit 3 keke
bit 4 bit 4
Flag
Flag
ZeroZero
“true”“true” bila hasil dari operasi adalahbila hasil dari operasi adalah ““nolnol””
ContohContoh:: 0111 1000 0111 1000 0111 1000 0111 1000 - -0000 -0000 0000 0000
Flag
Flag
Sign FlagSign Flag
“true”“true” bilabila MSBMSB dari hasildari hasil “1”“1”
Operasi aritmatika bertandaOperasi aritmatika bertanda
Flag
Flag
N : flagN : flag
OperasiOperasi BCD, 4 bitBCD, 4 bit
InstruksiInstruksi DAADAA bergantung padabergantung pada bit Nbit N
NN didi set “1”set “1” setelah pengurangansetelah pengurangan
Praktek
Praktek
Addressing mode
Addressing mode
RegisterRegister LD A,3Ah LD A,3Ah LD B,A LD B,A LD C,B LD C,B LD D,C LD D,C LD E,D LD E,D HALT HALT
Praktek
Praktek
Addressing mode
Addressing mode
DirectDirect LD A,(8040h) LD A,(8040h) OUT (0FEh),A OUT (0FEh),A OUT (0FDh),A OUT (0FDh),A HALT HALT
Praktek
Praktek
Addressing mode
Addressing mode
Immediate / Register IndirectImmediate / Register Indirect
LD A,36h LD A,36h LD H,80h LD H,80h LD L,40h LD L,40h LD (HL),A LD (HL),A HALT HALT
Praktek
Praktek
Addressing mode
Addressing mode
IndexedIndexed LD IX,8040h LD IX,8040h LD A,(IX+3) LD A,(IX+3) OUT (0FDh),A OUT (0FDh),A LD A,(IX+4) LD A,(IX+4) OUT (0FEh),A OUT (0FEh),A HALT HALT
Instruksi Aritmatika
Instruksi Aritmatika
PenambahanPenambahan PenguranganPenguranganPenambahan
Penambahan
IsiIsi registerregister ke akumulatorke akumulator
ADD
ADD A,BA,B ADD A,C ADD A,C
Isi memori ke akumulatorIsi memori ke akumulator
ADD A,(HL) ADD A,(HL)
Penambahan segeraPenambahan segera (immediate)(immediate)
ADD A,25h ADD A,25h So’al
So’al ::
Tambahkan angka
Tambahkan angka 01F3h01F3h dengandengan 03A6h ?03A6h ? Kurangkan angka
MenambahkanMenambahkan duadua data data padapada suatusuatu alamatalamat memorimemori
tertentu tertentu ORG 8020H ORG 8020H LD HL,8040H LD HL,8040H LD DE,8042H LD DE,8042H LD BC,8044H LD BC,8044H LD A,(HL) LD A,(HL) EX DE,HL EX DE,HL ADD A,(HL) ADD A,(HL) LD (BC),A LD (BC),A INC HL INC HL LD A,(HL) LD A,(HL) EX DE,HL EX DE,HL INC HL INC HL ADC A,(HL) ADC A,(HL) INC BC INC BC LD (BC),A LD (BC),A HALT HALT
Penambahan
MengurangkanMengurangkan duadua data data padapada suatusuatu alamatalamat
memori
memori tertentutertentu
ORG 8050H ORG 8050H LD DE,8052H LD DE,8052H LD BC,8054H LD BC,8054H LD A,(HL) LD A,(HL) EX DE,HL EX DE,HL SUB A,(HL) SUB A,(HL) LD (BC),A LD (BC),A EX DE,HL EX DE,HL INC HL INC HL LD A,(HL) LD A,(HL) EX DE,HL EX DE,HL INC HL INC HL SBC A,(HL) SBC A,(HL) INC BC INC BC LD (BC),A LD (BC),A HALT HALT
Pengurangan
Double Add
Double Add
pasangan
pasangan
register
register
Menambah bilanganMenambah bilangan 16 bit16 bit dari pasangandari pasangan register register
(BC,DE,HL,SP)
(BC,DE,HL,SP) ke pasanganke pasangan register HL.register HL.
Hasil disimpan diHasil disimpan di HLHL Mnemonic :Mnemonic : ADD HL,BC ADD HL,BC ADD HL,DE ADD HL,DE ADD HL,HL ADD HL,HL ADD HL,SP ADD HL,SP
Increment
Increment
8 bit increment8 bit increment
INC INC rr
INC
INC (HL)(HL)
16 bit increment16 bit increment
INC INC BCBC INC INC DEDE INC INC HLHL INC INC SPSP
Decrement
Decrement
8 bit decrement8 bit decrement
DEC DEC rr
DEC
DEC (HL)(HL)
16 bit decrement16 bit decrement
DEC DEC BCBC DEC DEC DEDE DEC DEC HLHL DEC DEC SPSP
Percabangan bersyarat
Percabangan bersyarat
B = 0
YA (Loncat)Percabangan bersyarat
Percabangan bersyarat
MnemonicMnemonic lengkaplengkap ::
JPJP Z,Z,addraddr JumpJump bilabila Zero trueZero true
JPJP NZ,NZ,addraddr JumpJump bilabila Zero falseZero false
JPJP C,C,addraddr JumpJump bilabila Carry trueCarry true
JPJP NC,addrNC,addr JumpJump bilabila Carry falseCarry false
JPJP PE,PE,addraddr JumpJump bilabila ParityParity genapgenap
JPJP PO,addrPO,addr JumpJump bilaParity ganjilbilaParity ganjil
JPJP M,M,addraddr JumpJump bilabila minusminus
Instruksi Logika
Instruksi Logika
ANDAND OROR ExORExORAND
AND
Contoh Contoh IN A,(0FCh)IN A,(0FCh)
AND 0BFh AND 0BFh 1 1 0 0 1 1 0 0 0 0 1 1 1 1 0 0 1 1 1 1 1 1 0 0 0 0 0 0 1 1 1 1 1 1 0 0 1 1 0 0 0 0 0 0 1 1 0 0 A B Hasil
OR
OR
Contoh Contoh :: IN A,(0FCh)IN A,(0FCh)
OR 0BFh OR 0BFh 1 1 0 0 1 1 0 0 0 0 1 1 1 1 0 0 1 1 1 1 1 1 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 0 0 0 0 1 1 1 1 1 1 A B Hasil
XOR
XOR
Contoh Contoh :: IN A,(0FCh)IN A,(0FCh)
XOR 0BFh XOR 0BFh 1 1 0 0 1 1 0 0 0 0 1 1 1 1 0 0 1 1 1 1 1 1 0 0 0 0 0 0 1 1 1 1 0 0 1 1 0 0 0 0 0 0 1 1 0 0 1 1 A B Hasil
Instruksi
Instruksi
Compare
Compare
BandingkaBandingka 2 operand2 operand
Set flagSet flag sesuai hasilsesuai hasil comparecompare Contoh Contoh LD A,44h LD A,44h LD B,45h LD B,45h CP B CP B Proses Proses : : 44h 44h –– 45h = 45h = --1 = 0FFh1 = 0FFh Zero Flag
Zero Flag = false= false Carry Flag
Instruksi
Instruksi
Rotate
Rotate
Rotate Rotate tanpa tanpa carrycarry
RLCA
RLCA rotate rotate kekirikekiri RRCA
RRCA rotate rotate kekanankekanan
1 1 0 0 1 1 0 0 0 0 1 1 0 0 1 1 1 1 1 1 0 0 1 1 0 0 0 0 1 1 0 0 0 0 1 1 0 0 0 0 1 1 0 0 1 1 1 1 Awal RLCA RRCA
Instruksi
Instruksi
Rotate
Rotate
Rotate Rotate dengandengan carrycarry
RLCA
RLCA rotate kekirirotate kekiri RRCA
RRCA rotate rotate kekanankekanan Data yang
Data yang digeser disimpan ke register CYdigeser disimpan ke register CY 1 1 0 0 1 1 0 0 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 0 0 1 1 0 0 0 0 1 1 0 0 0 0 1 1 0 0 1 1 0 0 Awal RLCA RRCA
Complement Accumulator, Carry
Complement Accumulator, Carry dan dan Set CarrySet Carry
Complement AccumulatorComplement Accumulator
Mnemonic
Mnemonic : CPL: CPL
Bit CPL
Bit CPL 1 1 jadijadi 0 0 dan dan 0 0 jadi jadi 11
Carry Carry dan dan Set CarrySet Carry
Mnemonic
Mnemonic : CCF (Complement Carry Flag): CCF (Complement Carry Flag) : SCF (Set Carry Flag)