BAB
BAB
4
4
STACK AREA, SUBROUTINE dan
STACK AREA, SUBROUTINE dan
INSTRUKSI BLOK
INSTRUKSI BLOK
Oleh Oleh :: Setiawardhana Setiawardhana BukuBuku:: BahasaBahasa Assembly (Buku KomputerAssembly (Buku Komputer 3)3) oleholeh : Son: Son KuswadiKuswadi
Politeknik Elektronika Negeri
STACK AREA
STACK AREA
Menyelamatkan register dalam operasi Menyelamatkan register dalam operasi
yang meloncat
yang meloncat--loncat dari program utama loncat dari program utama ke program lain
ke program lain
Pada daerah ini register dapat disimpan Pada daerah ini register dapat disimpan
sementara dan dipanggil lagi dengan satu sementara dan dipanggil lagi dengan satu
instruksi saja instruksi saja
STACK AREA
STACK AREA
STACK AREA RAM ROM FFFF 0FFF 0E00 07FF 0000STACK AREA
STACK AREA
Stack Pointer = SP Stack Pointer = SP
Internal register 16 bit khusus yang Internal register 16 bit khusus yang
menjaga alamat dalam daerah ini menjaga alamat dalam daerah ini
SP selalu menunjuk TOS SP selalu menunjuk TOS
TOS = Top Of Stack TOS = Top Of Stack
STACK AREA
STACK AREA
Gambar TOS Gambar TOS DATA 3 DATA 2DATA 1 TOS LAMA
TOS BARU
0FFF
STACK
STACK
-
-
TOS
TOS
TOS harus di inisialisasi TOS harus di inisialisasi
SP diset sembarang saat start up SP diset sembarang saat start up
Instruksi set SP: Instruksi set SP:
LD SP,data 16 bit LD SP,data 16 bit
STACK
STACK
Instruksi utama Instruksi utama
PUSH
PUSH MenyimpanMenyimpan POP
STACK
STACK
-
-
PUSH
PUSH
PUSH yang berlaku PUSH yang berlaku
PUSHPUSH BCBC PUSH DEPUSH DE PUSH HLPUSH HL PUSHPUSH AFAF
STACK
STACK
–
–
Contoh Program PUSH
Contoh Program PUSH
Listing : Listing : LD SP,3FFFh LD SP,3FFFh LD LD B,45hB,45h LD LD C,2AhC,2Ah PUSH BC PUSH BC LD LD D,89hD,89h LD LD E,1EhE,1Eh PUSH DE PUSH DESTACK
STACK
–
–
Contoh Program PUSH
Contoh Program PUSH
Tidak Diketahui 45 2A 89 1E TOS lama Register B 3FFF 3FFE 3FFD 3FFC 3FFB Register C Register D Register E (TOS baru)
STACK
STACK
–
–
Flowchart PUSH
Flowchart PUSH
START PUSH
SP=SP-1
Tulis register orde tinggi ke stack
SP=SP-1
Tulis register orde rendah ke stack
STACK
STACK
–
–
POP
POP
POP yang berlaku POP yang berlaku
POPPOP BCBC POPPOP DEDE POPPOP HLHL POPPOP AFAF
STACK
STACK
–
–
Contoh Program POP
Contoh Program POP
Listing : Listing : LD LD BC,000hBC,000h LD LD DE,000hDE,000h POP POP DEDE POP POP BCBC
STACK
STACK
–
–
Contoh Program POP
Contoh Program POP
Tidak Diketahui 45 2A 89 1E TOS lama Register B 3FFF 3FFE 3FFD 3FFC 3FFB Register C Register D Register E (TOS baru) PROSES SEBELUM
STACK
STACK
–
–
Contoh Program POP
Contoh Program POP
Tidak Diketahui 45
2A 89 1E
TOS setelah POP BC
3FFF
3FFE 3FFD 3FFC 3FFB
TOS setelah POP DE
TOS awal
SUBROUTINE
SUBROUTINE
Bila kita sering memanggil fungsi yang Bila kita sering memanggil fungsi yang
sama sama
Instruksi :
Instruksi : CALL subroutineCALL subroutine
Kembali ke program utama dengan : Kembali ke program utama dengan :
RET RET
SUBROUTINE
SUBROUTINE
Object Code
Object Code MnemonicMnemonic 8000
8000 C3C3 CALL TESTCALL TEST 8001 8001 4040 8002 8002 8080 8003 8003
Setelah CALL, PC berisi 8003, dan Setelah CALL, PC berisi 8003, dan
disimpan di SP disimpan di SP
SUBROUTINE
SUBROUTINE
XX 03 80 TOS lama TOS baruSUBROUTINE
SUBROUTINE
Mnemonic CALL
Mnemonic CALL
CALLCALL addraddr
CALLCALL Z,addrZ,addr
CALLCALL NZ,addrNZ,addr
CALLCALL C,addrC,addr
CALLCALL NC,addrNC,addr
CALLCALL PE,addrPE,addr
CALLCALL PO,addrPO,addr
CALLCALL P,addrP,addr
SUBROUTINE
SUBROUTINE
Mnemonic RET Mnemonic RET RETRET RETRET ZZ RETRET NZNZ RETRET CC RETRET NCNC RETRET PEPE RETRET POPO RETRET PP RETRET MMAlternate Register
Alternate Register
Instruksi yang digunakan Instruksi yang digunakan
EX
EX AF,AF’AF,AF’ EXX
EXX
Instruksi tersebut untuk menyelamatkan Instruksi tersebut untuk menyelamatkan
data secar cepat, bila terjadi interupsi, data secar cepat, bila terjadi interupsi,
karena prosesnya lebih cepat dibanding karena prosesnya lebih cepat dibanding
PUSH PUSH
Index Register IX,IY
Index Register IX,IY
Lebih mudah untuk mengakses sub kelompok data dari Lebih mudah untuk mengakses sub kelompok data dari
sekelompok data sekelompok data
Contoh : Contoh :
Alamat
Alamat Data blokData blok 8500
8500 | Nama| Nama sub blok 1sub blok 1 | Umur | Umur | Tinggi | Tinggi | Berat | Berat | Telepon | Telepon 8580
8580 | Nama| Nama sub blok 2sub blok 2 | Umur | Umur | Tinggi | Tinggi | Berat | Berat | Telepon | Telepon
Index Register IX,IY
Index Register IX,IY
Mnemonic yang digunakan : Mnemonic yang digunakan :
LD
LD IX,8500HIX,8500H LD
Index Register IX,IY
Index Register IX,IY
8500
8500 LDLD DE,0080hDE,0080h 8051
8051 LDLD IX,8500hIX,8500h Subblok1
Subblok1 80528052 LDLD A,(IX+2)A,(IX+2) |
| ADD IX,DEADD IX,DE 875F 875F 8580 8580 LDLD A,(IX+2)A,(IX+2) 8581 8581 Subblok1 Subblok1 85828582 | | 85FF 85FF
Instruksi Blok
Instruksi Blok
Instruksi yang bisa beroperasi dalam blok Instruksi yang bisa beroperasi dalam blok
Bisa ditentukan batas alamat yang dicari Bisa ditentukan batas alamat yang dicari Bisa memberikan informasi tentang ada Bisa memberikan informasi tentang ada
atau tidaknya data atau tidaknya data
Instruksi Blok
Instruksi Blok
–
–
Konsep Operasi
Konsep Operasi
START B=8040 DATA di B=FF B=AFFF B=B+1 Exit Keterangan :
Zero flag = True bila ketemu
Zero flag = False bila tidak ketemu
AFFF Alamat Kumpulan data Cari FFh Yang pertama
Instruksi Blok
Instruksi Blok
-
-
Mnemonic
Mnemonic
LDI
LDI Load and IncLoad and Inc LDD
LDD Load and DecLoad and Dec LDIR
LDIR Load Inc and RepeatLoad Inc and Repeat LDDR
LDDR Load Dec and RepeatLoad Dec and Repeat CPI
CPI Compare and IncCompare and Inc CPD
CPD Compare and DecCompare and Dec CPIR
CPIR Compare Inc and RepeatCompare Inc and Repeat CPDR
Instruksi Blok
Instruksi Blok
–
–
Pasangan Register
Pasangan Register
BCBC Untuk Counter 16 bitUntuk Counter 16 bit HL
HL Memori pointer untuk source Memori pointer untuk source operand
operand DE
DE Memori pointer untuk destination Memori pointer untuk destination operand
Instruksi LDI
Instruksi LDI
Memindahkan data 1 byte setiap kali Memindahkan data 1 byte setiap kali
dieksekusi. dieksekusi.
Data yang ditunjukkan HL(source) Data yang ditunjukkan HL(source)
dipindah ke alamat yang ada pada DE dipindah ke alamat yang ada pada DE
(destination) (destination)
Setelah instruksi maka: Setelah instruksi maka:
HL = HL HL = HL --11 DE = DE DE = DE--11 BC = BC BC = BC--11
Instruksi LDI
Instruksi LDI
Memindahkan data dari alamat 8050h ke alamat
Memindahkan data dari alamat 8050h ke alamat
8100h sebanyak 20 bytes 8100h sebanyak 20 bytes LD LD HL,8050hHL,8050h LD LD DE,8100hDE,8100h LD LD BC,20BC,20 LOOP:
LOOP: LDILDI
JP
JP PE,LOOPPE,LOOP
HALT
Instruksi
Instruksi
-
-
LDD
LDD
Komsep Sama dengan LDI Komsep Sama dengan LDI
Perbedaannya : Perbedaannya : HL = HL HL = HL –– 11 DE = DE DE = DE –– 11 BC = BC BC = BC –– 11
Instruksi
Instruksi
-
-
LDD
LDD
Memindahkan data dari alamat 8000
Memindahkan data dari alamat 8000--83FF 83FF ke alamat 7400
ke alamat 7400--77FF ( 1024 bytes data )77FF ( 1024 bytes data ) LD LD BC,1024BC,1024 LD LD HL,83FFhHL,83FFh LD LD DE,77FFhDE,77FFh LOOP: LOOP: LDDLDD JP JP PE,LOOPPE,LOOP
Instruksi LDIR dan LDDR
Instruksi LDIR dan LDDR
Memindahkan 512 data dari alamat 8000 Memindahkan 512 data dari alamat 8000-
-81FFFh ke alamat 9000 81FFFh ke alamat 9000--91FFFh91FFFh LD LD BC,512BC,512 LD LD HL,8000hHL,8000h LD LD DE,9000hDE,9000h LDIR LDIR
Instruksi LDIR dan LDDR
Instruksi LDIR dan LDDR
Memindahkan 512 data dari alamat 8000 Memindahkan 512 data dari alamat 8000-
-81FFFh ke alamat 9000 81FFFh ke alamat 9000--91FFFh91FFFh LD LD BC,512BC,512 LD LD HL,81FFhHL,81FFh LD LD DE,91FFhDE,91FFh LDDR LDDR
Instruksi LDIR dan LDDR
Instruksi LDIR dan LDDR
Perbedaan LDIR dan LDDR Perbedaan LDIR dan LDDR
Waktu tanggapan terhadap InterupsiWaktu tanggapan terhadap Interupsi
Output dari Refresh AddressOutput dari Refresh Address
“Tidak menjadi bahasan sub materi disini”
Blok Compare Instruction
Blok Compare Instruction
Mnemonic Mnemonic
CPICPI Compare with IncCompare with Inc
CPDCPD Compare with DecCompare with Dec
CPIRCPIR Compare Inc and RepeatCompare Inc and Repeat
CPDRCPDR Compare Dec and RepeatCompare Dec and Repeat
Pasangan register yang dipakai :
Pasangan register yang dipakai :
HLHL Memori pointer yang di compareMemori pointer yang di compare
CPI dan CPD
CPI dan CPD
Isi dari data di memori yang alamatnya Isi dari data di memori yang alamatnya
ditunjuk oleh register HL di compare ditunjuk oleh register HL di compare
dengan data di register A. dengan data di register A.
Setelah di eksekusi : Setelah di eksekusi :
Flag menunjukkan hasil compareFlag menunjukkan hasil compare
HL=HLHL=HL++11
CPI
CPI
Memindahkan data sebanyak 20 bytes dari
Memindahkan data sebanyak 20 bytes dari
alamat 8040h ke 8054h, bilangan yang di
alamat 8040h ke 8054h, bilangan yang di
compare 55h compare 55h LD LD BC,20BC,20 LD LD HL,8040hHL,8040h LD LD A,55hA,55h LOOP:
LOOP: CPICPI
JP
JP Z,COCOKZ,COCOK
JP
CPD
CPD
Memindahkan data sebanyak 20 bytes dari
Memindahkan data sebanyak 20 bytes dari
alamat 8040h ke 8054h, bilangan yang di
alamat 8040h ke 8054h, bilangan yang di
compare 55h compare 55h LD LD BC,20BC,20 LD LD HL,8054hHL,8054h LD LD A,55hA,55h LOOP:
LOOP: CPICPI
JP
JP Z,COCOKZ,COCOK
JP
Instruksi CPIR dan CPDR
Instruksi CPIR dan CPDR
Kemiripan operasi Kemiripan operasi
CPIRCPIR IncrementIncrement
CPDRCPDR DecrementDecrement
Proses berhenti apabila Proses berhenti apabila
Register BC = 0Register BC = 0