SAP-2 adalah langkah berikut dalam evolusi ke computer modern. Disitu tercakup instruksi lompat. Intruksi baru ini memaksa computer untuk mengulang atau melewati bagian program. Seperti apa yang akan kita temukan, intruksi lompat (jump) membuka suatu dunia yang sama sekali baru pada kemampuan computer.
1.Register 2 arah
1. Arsitektur
Semua output register ke bus W berupa saklar tiga-keadaan (tri status), yang lainnya yang tidak dihubungkan dengan bus bersifat dua-keadaan (duo status). Unit kendali mengirimkan ksignal-signal kendali kepada setiap kenadali kepada setiap register, berupa
~ Mengisi
~ Mengaktifkan
~ Mempersiapkan register untuk tepi pulsa clock positif yang berikutnya.
Intruksi Jump
Intruksi beracuan memori adalah satu tekenis intruksi; SAP-2 mempunyai enam intuksi lompat.
JMP
JMP adalah mnemonic untuk “lompati pencacah program”. Setiap intruksi JMP mencakup suatu alamat yang akan dimuat ke PC dan bukan ke MAR. dengan kata lain. Intuksi JMP berbeda dengan MRI karena berbedanya register yg digunakan pada fasa kerja T3
JAM
Jam menyerupai JMP karena ia data mengubah isi PC. Namun, ia berbeda dengan JMP karena ia hanya menghasilkan lompatan program jika suatu syarat khusu dipenuhi.
Jam adalah mnemonik untuk "lompatan pencacah program jika isi akumulator minus" atau singkatnya," lompat jika akumulator minus". Setiap intruksi JAM mencakup alamat yang akan dimuat ke PC.JAZ
Jaz adalah mnemonik untuk "lompatan pencacah program jika isi akumulator 0, atau secara singkat , "lompat jika akumulator no". setiap intruksi JAZ mencakup alamat yang akan dimuat ke PC. JAZ 32 berarti "lompat ke alamat 32 jika akumulator nol, dan jika tidak, maka berlanjulah ke intruksi berikutnya",
JIM dan JIZ
JIM merupakan "Lompatan pencacah program jika isi register indeks minus" atau lompat jika indeks minus. JIZ adalah mnemonik untuk lompatan pencacah program jika isi register indeks nol.
setiap intruksi JIM dan JIZ mencakup alamat yang akan dimuat ke PC. Misalnya JIM 94 berarti "lompat ke alamat 94 jika indeks minus, JIZ 7F berarti lompat alamat 7F jika indeks nol.
JAM,JAZ,JIM,JIZ dinamakan lompatan bersyarat karena lompatan program hanya terjadi jika syarat tertentu dipenuhi. Sebaliknya JMP tidak bersyarat, sekali intruksi itu dijemput, maka putaran kerja selalu melompati ke alamat tertentu.
JMS
Suburutin merupakan program yg disimpan di memori agar mungkin dipakai oleh program lain. kebanyakan komputer mempunyai suburutin untuk mencari sinus, cosinus, tangen,log, akar dua, dan sebagainya.
JMS adalah mnemonik untuk lompat ke suburutin. setiap JMS mencakup alamat awal dari suburutin yabg dikehendaki. missalnya, jika suburutin akar dua dimulai pada alamat A2 serta suburutin log dimulai pada alamat C5, maka JMS A2 akan melompat ke suburutin akar 2 dan JMS C5 ke suburutin log. setelah suburutin itu rampung.
Intuksi OPERAT
NOP : Tidak mengerjakan apa-apa/tidk beroperasi
CLA : membersihkan akumulator. meriset ke "0"
XCH : Menukar isi akumulator dengan indeks.
DEX : Mencacah turun isi register indeks"
INX : Mencacah naik isi register indeks
CMS : memberikan pelengkap pada akumulator
CMB : mnemonik untuk memberi pelengkap pada register B
IOR : Inklusif OR, yakni meng-OR-kan bit setara pada akumulator dan register B.
AND : menghasilkan AND bit demi bit di antara akumulator dan register B dgn hasilnya terdapat pada akumulator
NOR : intruksi ini memg-NOR-kan isi akumulator dgn register B secara bit demmi bit
NAN : register B di NAND-kan
XOR : meng- eksklusif OR-kan isi akumulator dan register B bit demi bit.
BRB : bercabang Kembali
INP : Masukan
OUT : keluaran
HLT : memberhentikan program.
SAP 3
SAP-3 adalah sebuah mikro komputer 8-but yang kompatibel keatas dengan mikro prosesor 80-85. Dalam bab ini, penugasan diletakkan pada perangkat instruksi SAP-3.Perangkat instruksi ini mencakup seluruh instruksi SAP-2 dari bab sebelumnya, ditambah dengan instruksi-instruksi baru yang akan dibahas.
Pada lampiran 5 disajikan kode-operasi, keadaan T, bendera dan sebagainya, untuk instruksi SAP-3. Gunakan lampiran 5 sebagai acuan bilamana perlu dalam mengikuti uraian bab ini.12-2 MOV dan MVI
Insruksi MOV dan MVI mempunyai prinsip kerja yang sama seperti didalam SAP-2. Perbedaannya hanya terletak pada jumlah register yang lebih besar untuk dilibatkan dalam pemindahan data. Format dari suatu instruksi pemindahan dalam kasus ini berbentuk :
MOV reg 1, reg2.
Dengan reg1 = A,B,C,D,E,H atau L
reg2 = A,B,C,D,E,H atau L
Instruksi MOV mengirimkan data dari reg2 ke reg1. Secara simbolis hal ini diungkapkan oleh tanda :
Reg1 reg2
Tanda panah menyatakan bahwa data didalam register 2 disalin tanpa merusak kedalam register 1. Pada akhir eksekusi akan didapatkan
Reg1 = reg2
Sebagai contoh, instruksi
MOV L,A
Menyalinkan A kedalam L, sehingga
L = A
Demikian pula,
MOV E,H
Memberikan hasil
E = H
Instruksi pemindahan segera memiliki format :
MVI reg,byte
Dengan reg = A,B,C,D,E,H atau L. dengan ini eksekusi dari
MVI D,0EH
Akan menghasilkan
D = 0EH
Demikian pula instruksi
MVI L,FFH
Memberi hasil
L = FFH
Apa keuntungan dengan register CPU yang lebih banyak ? sebagaimana dapat kita ingat kembali, instruksi MOV dan MVI memerlukan keadaan T lebih sedikit daripada instruksi-instruksi acuan – memori (MRI ). Adanya regoister CPU ekstra berarti bahwa kita dapat menggunakan lebih banyak instruksi MOV dan MVI dan mengurangi jumlah MRI yang dipakai. Karena itu, program-program SAP-3 beroperasi lebih cepat daripada program-program SAP-2. Selian itu, mempunyai register CPU lebih banyak. Untuk penyimpanan sementara akan menyederhanakan penulisan program.
Instruksi Bendera Pindahan
Ada dua instruksi yang dapat kita gunakan untuk mengendalikan bendera pindahan. Instruksi STC akan mereset bendera CY jika belum diset sebelumnya. (STC berarti set Carry atau pasang pindahan). Dengan demikian jika
CY = 0
Eksekusi dari instruksi STC menghasilkan
CY = 1
Instruksi bendera pindahan yang lain adalah CMS, yang merupakan singkatan dari complement the Carry (komplemenkan pindahan). Apabila dilaksanakan, instruksi CMC akan mengkomplemenkan nilai CY. Jadi, jika CY = 1, CMC akan menghasilkan CY = 0; dipihak lain, jika CY = 0, CNC akan menghasilkan CY = 1.
Bila kita ingin mereset bendera pindahan tanpa mengetahui statusnya maka kita harus mensetnya dahulu dan kemudian mengambil komplemennya.
Dengan kata lain, pelaksanaan dari
STC
CMC
Akan menjamin bahwa nilai akhir CY akan menjadi nol jika nilai awalnya tidak diketahui.
Instruksi ADD
Format instruksi ADD adalah :
ADD reg
Dengan reg = A,B,C,D,E,H atau L. Instruksi ini menjumlahkan isi dari register yang ditunjuk, dengan isi akumulator. Hasil penjumlahan disimpan dalam akumulator dan keadaan bendera pindahan (set atau reset), bergantung pada ada atau tidaknya pindahan yang dihasilkan pada akhir operasi.
Sebagai contoh umpamakan
A=1111 0001 dan E = 0000 1000
Instruksi
ADD E
Menghasilkan penjumlahan biner :
1111 0001
+ 0000 1001
1111 1001
Dalam hal ini tidak dihasilkanpindahan akhir. Karena itu., pada akhir siklus instruksi akan diperoleh
CY = 0 dan A = 1111 1001
Sebagai contoh yang lain, misalkan
A = 1111 1111 dan L = 0000 0001
Eksekusi dari ADDL menghasilkan
1111 1111
+ 0000 0001
10000 0000
Pada akhir siklus instruksi akan didapatkan :
CY = 1 dan A = 0000 0000
Instruksi ADC
Instruksi ADC (ADD with carry, artinya jumlahkan dengan pindahan) diberi format sebagai berikut :
ADC reg
Dengan reg = A,B,C,D,E,H atau L. Instruksi ini menjumlahkan isi dari register yang ditunjuk beserta isi bendera pindahan dengan isi akumulator. Karena operasi ini melibatkan bendera CY, instruksi ADC memungkinkan penjumlahan bilangan-biolangan diluar batas bilangan tak bertanda dari 0 sampai 255 atau batas bnilangan bertanda – 128 sampai +127.
Sebagai contoh, andaikan
A = 1000 0011
E = 0001 0010
Dan
CY = 1
Eksekusi dari instruksi
ADC E
Menghasilkan penjumlahan sebagai berikut :
1000 0011
0001 0010
+ 1
1001 0110
karena itu, isi baru dari akumulator dan bendera pindahan adalah :
CY = 0 A = 1001 0110
Instruksi SUB
Instruksi SUB diberi format sebagai berikut,
SUB reg
Dengan reg = A,B,C,D,E.H atau L. Instruksi ini akan mengurangkan isi register yang ditunjuk dari isi akumulator. Jika terjadi pinjaman pada akhir oiperasi ini, bendera CY akan dipasang (diset). Jika tidak ada pinjaman, bendera CY akan direset. Dengan kata lain, selama berlangsung operasi pengurangan, bendera CY berfungsi sebagai bendera pinjaman.
Sebagai contoh , misalkan
A = 0000 1111 dan C = 0000 0001
Maka eksekusi dari instruksi
SUB C
menghasilkan
0000 1111
- 0000 0001
0000 1110
Perhatikan Bahwa hasil pengurangan ini tidak memerlukan pinjaman. Dalam bentuk penjumlahan dengan komplemen –2, pengurangan diatas akan terlihat sebagai berikut :
0000 1111
+ 1111 1111
1 0000 1110
CARRY yang terjadi adalah 1 tetapi nilai ini dikomplemenkan dalam operasi pengurangan untuk mendapatkan CY = 0 (Gambar 12-2a. Oleh sebab itu, eksekusi dari sub-C menghasilkan :
CY = 0 A = 0000 1110
Sebagai contoh lain , jika
A = 0000 1100 dan C = 0001 0010
Maka instruksi SUB C menghasilkan :
0000 1100
- 0001 0010
1 1111 1010
perhatikan bahwa pinjaman terakhir terjadi karena isi register C (desimal 18) lebih besar daripada isi akumulator (desimal 12). Dalam bentuk aritmetik komplemen-2, operasi diatas akan nampak seperti
0000 1100
+ 1110 1110
0 1111 1010
memberi hasil CARRY = 0 dan CY = 1. Isi akhir dari akumulator dan bendera adalah :
CY = 1 dan A = 1111 0000
Instruksi SBB
SBB merupakan singkatan dari substract with borrow (kurangkan dengan pinjaman) Instruksi ini menyangkut operasi yang selangkah lebih jauh daripada instruksi SUB; yaitu mengurangkan isi register yang ditunjuk beserta isi bendera CY, dari isi yang terdapat dalam akumulator. Jika
A = 1111 1111
E = 0000 0010
Dan
CY = 1
Maka instruksi SBB E akan memulai operasinya dengan menggabungkan E dan CY untuk mendapatkan 0000 0011, dan selanjutnya mengurangkannya dari isi akumulator sebagai berikut :
1111 1111
- 0000 0011
1111 1100
hasil terakhir dari operasi ini adalah :
CY = 0 dan A = 1111 1100
CONTOH 12-1
Dalam representasi bilangan biner tak bertanda, deretan biner 8-bit dapat mewakili bilangan desimal dari 0 sampai 255, sedangkan 16 bit dapat merepresentasikan angka dari 0 sampai 65.535. Tunjukkan suatu program SAP-3 yang menjumlahkan 700 dan 900, dengan jawaban akhirnya tersimpan dalam register H dan register L.
JAWABAN
Bentuk byte ganda dapat menyatakan bilangan desimal 700 dan 900 sebagai berikut :
70010 = 02BCH = 0000 0010 1011 11002
90010 = 0384H = 0000 0011 1000 01002
Program untuk Melaksanakan penjumlahan kedua bilangan tersebut adalah sebagai berikut :
Label Mnemonik Komentar
MVI A,00H ; kosongkan akumulator
MVI B,02H ; Simpan byte atas (UB) dari 700
MVI C,BCH ; Simpan byte bawah (LB) dari 700
MVI A,00H ; Kosongkan akumulator
ADC B ;Jumlahkan UB dari 700 dengan pindahan
ADD D ; Jumlahkan UB dari 900
MOV H,A ; Simpan jumlah parsial
HLT ; Berhenti.
CONTOH 12-2
Tunjukkan sebuah program yang mengurangkan 700 dari 900 dan menyimpan jawabannya dalam register H dan L.
JAWABAN
Kita membutuhkan byte ganda untuk meresentasikan 900 dan 700 sebagai berikut :
90010 = 0384H = 0000 0011 1000 01002
70010 = 02BCH = 0000 0010 1011 11002
Program pengurangn yang bersangkutan adalah :
Label Instruksi Komentar
MVI A,84H ; isikan LB dari 900
SUI BCH ; kurangkan LB dari 700
MOV L,A ; simpan LB dari jawaban parsial
MVI A,03H ; isikan UB dari 900
SBI 02H ; kurangkan UB dari 700 dengan pinjaman
MOV H, A ; simpan UB dari jawaban parsial
Dua instruksi pertama mengurangkan byte-byte bawah sebagai berikut :
1000 0100
- 1011 1100
1 1100 1000
pada tahap ini
CY = 1 A = C8H
Bendera CY yang tinggi menunjukkan adanya pinjaman
Setelah menyimpan C8H dalam register L, program akan mengisikan byte atas deri 900 kedalam akumulator. Instruksi SBI digunakan sebagai pengganti instruksi SUI oleh karena munculnya pinjaman ketika dilaksanakan operasi pengurangan byte diatas. Eksekusi SBI memberikan
0000 0011
- 0000 0010
0000 0000
bagian dari jawaban ini disimpan dalam register H, sehingga isi terakhirnya adalah :
A = 00H = 0000 00002
L = C8H = 1100 10002
12-7 INSTRUKSI LOMPATAN
Instruksi-instruksi lompatan SAP-2 yang menjadi bagian dari perangkat instruksi SAP-3 ialah :
JMP alamat (lompat tanpa syarat)
JM alamat (lompat bila minus)
JZ alamat (lompat bila sama dengan nol)
JNZ alamat (lompat bila tak sama dengan nol)
Instruksi-instruksi lompatan yang lain dari SAP-3 akan diuraikan dibawah ini.
JP
JM adalah singkatan dari Jump if minus (lompat bila minus). Apabila program menemui instruksi JM alamat maka lompatan akan terjadi menuju akamat yang ditentukan jika bendera tanda dalam keadaan set.
Instruksi JP mempunyai efek yang berlawanan. JP adalah singkatan dari Jump if positif (lompat bila positif, termasuk nol). Ini berarti bahwa
JP alamat
Menghasilkan suatu lompatan ke alamat yang ditentukan bilamana bendera tanda keadaan reset.
JC dan JNC
Instruksi JC alamat
Berarti melompat ke alamat yang ditentukan jika bendera pindahan dalam keadaan set. Sengkatnya, instruksi JC menyatakan lompat bila ada pindahan (jump if carry). Demikian pula,
JNC alamat
Berarti lompat ke alamat yang telah ditentukan jika bendera pindahan tidak dalam keadaan set; yang berarti lompat bila tak ada pindahan (jumpif no carry).
Berikut ini adalah sebuah segmen program yang memberikan instruksi tentang instruksi JC dan JNC.
Label Instruksi Komentar
MVI A,FEH
REPEAT: ADI 01H
JNC REPEAT
MVI A,C4H
JC ESCAPE
ESCAPE: MOV L,A
Instruksi MVI mengisi akumulator dengan FEH. Instruksi ADI menambah angka 1 pada isi akumulator sehingga isinya menjadi FFH. Karena tiddak ada pindahan yang terjadi, instruksi JNC mengarahkan program kembali ke instruksi yang berlabel REPEAT. Dengan ini ADI akan dilaksanakan untuk kedua kalinya. Kali ini, akumulator mengalami pelimpahan dari berisi 00H dengan sebuah pindahan. Karena bendera CY dalam keadaan set, program tidak mengalami lompatan dan diteruskan melalui JNC. Dalam langkah berikutnya akumulator diisi dengan CAH. Selanjutnya JC menghasilkan suatu lompatan ke instruksi berlabel ESCAPE, dan dengan instruksi ini C4H diisikan ke dalam register L.
JPE dan JPO
Di samping bendera tanda, bendera nol, dan bendera pindaha, SAP-3 memiliki bendera paritas
S Z 0 0 0 P 0 CY
Gambar 12-5 Register Flag
(parity flag) yang diberi simbol P. Selama eksekusi beberapa instruksi tertentu (seperti ADD, INR, dan sebagainya), hasil ALU diperiksa untuk menentukan paritasnya. Bila hasilnya mengandung angka 1 yang berjumlah genap, bendera paritas akan diset (dipasang); jika hasil mengandung angka 1 yang berjumlah ganjik, bendera paritas akan direset
Instruksi JPE alamat
Menghasilkan suatu lompatan ke alamat yang tercantum bilamana bendera paritas dipasang (paritas ganjil). Sebagai contoh, misalkan keadaan bendera-bendera adalah:
S = 1 Z = 0 CY = 0 P = 1
Maka program akan melompat bila menjumpai suatu instruksi JPE; akan tetapi program akan mengalir terus (tidak melompat) bila menghadapi instruksi JPO.
Hingga kini kita telah membahas semua bendera yang terdapat dalam komputer SAP-3.Guna menyediakan kompatibilitas ke atas dengan mikroprosesor 8085, bendera-bendera itu harus disimpan di dalam register F, seperti ditunjukkan dalam Gambar 12-5. Sebagai contoh, bila isi register F adalah:
F = 0100 0101
Maka kita ketahui bahwa keadaan bendera-bendera adalah:
S = 0 Z = 1 P = 1 CY = 1
CONTOH 12-1
Bagaimana operasi segmen (potongan) program di bawah ini?
JAWABAN
Label Instruksi Komentar
MVI E,00H ; Inisialisasikan pencacah
LOOP INR E ; Naikkan cacahan (dengan angka 1)
MOV A,E ; Isi A dengan E
CPI FFH ; Bandingkan dengan 255
JNZ LOOP ; kembali bila tidak sama dengan 255
Register E digunakan sebagai pencacah, yang dimulai dari 0. Pertama kali instruksi INR dan MOV dilaksanakan, kita akan mendapatkan.
A = 0IH
Setelah eksekusi CPI, bendera nol akan berharga nol akan berharga 0 sebab 01H tidak sama dengan FFH. Instruksi JNZ kemudian mendorong program kembali ke instruksi berlabel LOOP.
Loop akan berlangsung terus sampai instruksi INR dan MOV dilaksanakan sebanyak 255 kali untuk menghasilkan
A = FFH
Pada lintasan loop terakhir, instruksi CPI akan memasang bendera nol sebab byte akumulator bernilai sama dengan byte segera (yang tercantum segera di belakang kode operasi). Dengan bendera nol terpasang untuk pertama kali, program akan mengalir melalui instruksi JNZ LOOP tanpa terjadi lompatan.
Apakah pembaca memahami pokok persoalannya? Komputer akan melakukan loop 255 kali sebelum program keluar dari loop melalui JNZ. Salah satu kegunaan dari potongan program ini adalah untuk menyisipkan instruksi-instruksi tambahan di dalam loop tersebut sebagai berikut:
Label Instruksi Komentar
MVI E,00H
LOOP: .
.
.
INR E
MOV A,E
CPI FFH
JNZ LOOP
Instruksi-instruksi pada permulaan loop (ditandai dengan titik-titik) akan dilaksanakan 255 kali. Jika anda ingin mengubah jumlah lintasan loop, anda hanya perlu mengubah instruksi CPI sebagaimana yang dikehendaki.
12-8 INSTRUKSI REGISTER BERPASANGAN
Beberapa instruksi SAP-3 menggunakan pasangan register CPU untuk memproses data 16-bit. Dengan kata lain, selama eksekusi instruksi-instruksi tertentu, register-register CPU disusun dalam kaskade (susunan berderet), seperti diperlihatkan dalam Gambar 12-6.Pembentukan pasangan register selalu mengikuti ketentuan sebagai berikut: B berpasangan dengan C, D dengan E, dan H dengan L. Apa yang akan diuraikan dalam pasal ini adalah instruksi-instruksi SAP-3 yang menggunakan pasangan register (register pairs). Semua instruksi tersebut mengandung huruf X di dalamnya, yang merupakan tanda bagi “extended register” (register yang diperluas) yaitu pasangan register.
LXI
Karena ada tiga pasangan register (BC, DE, dan HL), maka instruksi LXI (load extended immediate); artinya isi pasangan register segera) akan mempunyai format:
LXI B, dble
LXI D, dble
LXI H, dble
Dengan B mewakili pasangan BC
D mewakili pasangan DE
H mewakili pasangan HL.
Dble menyatakan byte rangkap (double byte).
Instruksi LXI dipakai untuk mengisi pasangan register tertentu dengan byte rangkap. Misalnya dalam pelaksanaan instruksi.
LXI B,90FFH
Register B dan register C akan didisi dengan byte byte atas dan byte bawah sehingga terjadi
B = 90H
C = FFH
Dengan membayangkan pasangan B dan C tersusun seperti dalam Gambar 12-6, kita dapat menuliskan
BC = 90FFH
DAD
DAD adalah singkatan dari double-edd (penjumlahan rangkah). Instruksi ini mempunyai tiga format.
DAD B
DAD D
DAD H
Dengan B mewakili BC
D mewakili DE
H mewakili HL
Dengan B mewakili BC
D mewakili DE
H mewakili HL
Instruksi DAD menjumlahkan isi dari pasangan register tertentu dengan isi dari pasangan pasangan register HL. Hasil penjumlahannya disimpan dalam pasangan register HL. Misalnya
BC = F521H
HL = 0003H
Maka eksekusi instruksi DAD B menghasilkan
HL = f524H
Sebagaimana dapat anda diikuti; F521H dan 0003H dijumlahkan menjadi f524H. Hasil ini disimpan dalam pasangan register HL.
Instruksi DAD mempengaruhi bendera CY. Bila ada pindahan yang terdapat dalam pasangan register HL, maka bendera CY akan dipasang; bila tidakk ada pindahan, bendera CY akan tetap berada dalam keadaan reset. Sebagai contoh, misalkan
DE = 0001
HL = FFFFH
Eksekusi DAD D akan memberikan hasil:
HL = 0000H
CY = 1
Khususnya, instruksi DAD H menghasilkan penjumlahan data dalam pasangan register HL dengan dirinya sendiri. Dengan kata lain, DAD H menduakalikan nilai. Jika
HL = 1234H
Maka sebuah instruksi DAD H menghasilkan
HL = 2468H
INX dan DCX
INX berarti penambahan angka satu pada isi pasangan register (inclement the extended register). Dan DCX menyatakan penurunan angka satu dari isi pasangan register (descrement the extended register). Instruksi penambahan yang diperluas ini terdiri dari
INX B
INX D
INX H
Dengan B menyatakan BC
D menyatakan DE
H menyatakan HL
Instruksi-instruksi DCX mempunyai format yang sama : DCX B, DCX D, dan DCXH.
Instruksi INX dan DCX tidak mempengaruhi bendera. Sebagai contoh misalkan :
BC = FFFFH
S = 1
Z = 0
P = 1
CY = 0
Maka eksekusi INX B akan menghasilkan
BC = 0000H
S = 1
Z = 0
P = 1
CY = 0
Perhatikan bahwa semua bendera tidak terpengaruh.
Dapat dirangkumkan bahwa instruksi-instruksi register yang diperluas meliputi : LX1, DAD, INX dan DCX. Dari tiga pasangan register itu, pasangan register HL merupakan kombinasi yang bersifat khusus. Hal ini akan dijelaskan dalam pasal berikutnya.
12-9 INSTRUKSI-INSTRUKSI TAK LANGSUNG
Telah dibahas dalam bab 10, bahwa pencacah program berfungsi sebagai penunjuk instruksi (inctruction pointer), yang menunjukkan lokasi memori dari instruksi tersimpan yang berikutnya.
Berbeda dengan pasangan register HL ; isinya menunjukkan lokasi-lokasi memori dari data tersimpan. Dengan kata lain SAP-3 memiliki beberapa instruksi yang menggunakan pasangan register HL sebagai penunjuk data (data pointer)
]CONTOH 12-4
Misalkan ada 256 byte data yang tersimpan dalam memori pada alamat antara 2000H dan 20FFH. Tunjukkan sebuah program yang akan menyalin 256 byte data ini untuk ditempatkan pada alamat 3000H sampai 30FFH
JAWABAN
Label Instruksi Komentar
LXI H, 1FFFH ; Inisialisasi penunjuk
LOOP: INX H ; Naikkan isi penunjuk
MOV B,M ; Baca byte
MOV A,H ; Isikan 20H ke dalam akumulator
ADI 10H ; Tambahkan ofset 10H untuk mendapat-
Kan 30H
MOV H,A ; Pasang penunjuk H dengan ofset.
MOV M,B ; Tuliskan byte dalam lokasi baru
SUI 10H ; Kurangkan offset
MOV H,A ; Mengembalikan H pada kedudukan semula untuk pembacaan berikutnya
MOV A,L : Siapkan pembandingan
CPI FFH ; Periksa apakah sama dengan 255
JNZ LOOP ;Jika belum, ambil byte berikutnya
HLT ; Berhenti
12-10 INSTRUKSI PENUMPUKAN
SAP-2 mempunyai instruksi CALL yang dapat mengarahkan program kepada suatu subrutin. Coba anda ingat kembali, sebelum terjadi lompatan, isi pencacah program ditambah satu dan disimpan pada alamat FFFEH dan FFFH. Alamat FFFH dan FFFH disediakan untuk tujuan penyimpanan alamat-kembali (return address). Pada waktu berakhirnya operasi subrutin tersebut, instruksi RET mengisi pencacah program dengan alamat-kembali itu, yang mengembalikan komputer ke program utamanya.
Tumpukan (Stack)
Suatu tumpukan (stack) adalah bagian dari memori yang disediakan terutama bagi penyimpanan alamat-kembali. SAP-2 memiliki sebuah tumpukan sebab alamat FFFEH dan FFFH semata-mata hanya dipakai untuk menyimpan alamat-kembali dari suatu pemanggilan subrutin. Gambar 12-9a memperlihatkan cara visualisasi tumpukan SAP-2.
Pada SAP dijumpai struktur tumpukan yang berbeda. Pemrograman dapat memutuskan dari awal, dimana menempatkan lokasi tumpukan dan berapa besar tumpukan yang akan dipakainya. Sebagai contoh, Gambar 12-9b memperlihatkan suatu tumpukan yang beralamat anatara 20E0H dan 20FFH. Tumpukan ini mengandung 32 lokasi memori guna menyimpan alamat kembali. Para pemrogram dapat menempatkan lokasi tumpukan dimana saja dalam memori, akan tetapi sekali tumpukan telah ditentukan, mereka tidak dapat lagi menggunakan bagian memori itu untuk menempatkan program dan data. Sebaliknya, tumpukan menjadi suatu daerah khusus di dalam memori, yang digunakan sebagai tempat penyimpanan alamat kembali dari instruksi panggilan subrutin.
Penunjuk Penumpukan
Instruksi-instruksi yang melaksanakan pembacaan dan penulisan ke dalam tumpukan disebut instruksi tumpukan (stack instructions). Ini meliputi: PUSH, POP, CALL dan lain-lainnya yang akan dibicarakan. Instruksi tumpukan menggunakan pengalamatan tak langsung karena adanya register 16-bit dengan sebutan penunjuk tumpukan (stack pointer, disingkat SP), yang menahan (menyimpan sementara) alamat dari lokasi memori yang dikehendaki. Sebagaimana ditunjukkan dalam Gambar 12-9c, penunjuk tumpukan berfungsi serupa dengan penunjuk HL karena isi penunjuk tumpukan itu menunjukkan lokasi memori yang hendak diakses. Andaikan
SP = 20FFFH
Penunjuk tumpukan menunjuk ke lokasi memori M20FFH (lihat Gambar 12-9d). Bergantung pada instruksi tumpukan, sebuah byte akan dibaca dari, atau dituliskan ke dalam lokasi memori tersebut.
Untuk inisialisasi penunjuk tumpukan, kita dapat menggunakan instruksi “isi segera”
LXI SP, dble
Misalkan, jika kita menggunakan instruksi
LXI SP,20FFH
Maka penunjuk tumpukan akan diisi dengan 20FFH.
PUSH
Isi dari akumulator dan register bendera dikenal sebagai kata status program (program status word, disingkat PSW). Format untuk kata ini:
PSW = AF
Dengan A = Isi akumulator
F = isi register bendera
Isi akumulator merupakan byte tinggi, dan isi register bendera merupakan byte rendah. Dalam pemanggilan subrutin, biasanya kita harus menyimpan kata status program, sehingga program utama dapat berlanjut lagi setelah subrutin selesai dieksekusi. Kita juga diperbolehkan menyimpan isi register-register yang lain.
Instruksi PUSH (dorong) dipakai guna menyimpan data dalam suatu tumpukan. Berikut ini adalah empat instruksi PUSH yang tersedia.
PUSH B
PUSH D
PUSH H
PUSH PSW
Dengan B mewakili BC
D mewakili DE
H mewakili HL
PSW mewakili kata status program.
Bila instruksi OUSH dilaksanakan, maka akan terjadi hal-hal sebagai berikut:
1. Penunjuk tumpukan dikurangi satu untuk memperoleh harga baru yaitu SP-1
2. Byte tinggi dalam pasangan register tertentu disimpan di dalam MSP-1
3. Penunjuk tumpukan tumpukan diturunkan lagi menjadi SP-2
4. Byte rendah dari pasangan register tersebut disimpan di dalam MSP-2
Sebagai contoh, misalnya
BC = 5612H
SP = 2100H
Bila PUSH B dilaksanakan, maka
1. Penunjuk tumpukan diturunkan menjadi 20FFH.
2. Byte tinggi 56H disimpan pada lokasi 20FFH (Gambar 12-10a)
3. Penunjuk tumpukan diturunkan lagi menjadi 20FEH
4. Byte bawah 12H disimpan pada lokasi 20FEH (Gambar 12-10b)
Sebagai contoh yang lain, umpamakan
SP = 2100H
AF = 1234H
DE = 5678H
HL = 9A25H
Maka eksekusi dari
PUSH PSW
PUSH D
PUSH H
Akan mengisi tumpukan sebagaimana diperlihatkan dalam GAMBAR 12-10c. PUSH pertama menyimpan 12H pada lokasi 20FFH dan 34H pada lokasi 20FEH. PUSH berikutnya menyimpan 56H pada lokasi 20FDH dan 78H pada 20FCH. PUSH terakhir menyimpan 9AH pada lokasi 20FBH dan 25H pada lokasi 20FAH. Perhatikan bagaimana tumpukan itu disusun; setiap PUSH yang baru akan mendorong data ke dalam tumpukan.
POP
Terdapat empat instruksi POP (sembulan)
POP B
POP D
POP H
POP PSW.
Dengan B mewakili BC
D mewakili DE
H mewakili HL
PSW mewakili kata status program
Sebagai akibat pelaksanaan instruksi POP akan berlangsung hal-hal berikut :
1. Byte rendah dibaca dari lokasi memori yang dialamati oleh penunjuk tumpukan. Byte ini disimpan di bagian bawah dari pasangan register yang ditentukan
2. Penunjuk tumpukan ditambah dengan angka satu
3. Byte tinggi dibaca dan disimpan di bagian atas dari pasangan register yang ditentukan itu
4. Penunjuk tumpukan ditambah dengan angka satu.
Urutan operasi di atas akan diperjelas melalui contoh di bawah ini. Andaikan tumpukan terisi seperti dalam Gambar 12-10c dengan penunjuk tumpukan berada pada 20F AH. Maka eksekusi POP B akan menyebabkan hal-hal sebagai berikut :
1. Byte 25H dibaca dari lokasi 20 F AH (Gambar 12-10c)) dan disimpan di dalam register C
2. Penunjuk tumpukan ditambah dengan satu sehingga menjadi 20FBH byte 9AH dibaca dari lokasi 20FBH (Gambar 12-10d) dan disimpan di dalam register B. Pasangan register BC sekarang berisi
BC = 9A25H
3. Penunjuk tumpukan ditambah dengan satu menjadi 20FCH (Gambar 12-10e)
Setiap kali kita melaksanakan sebuah instruksi POP-2 byte data akan menyembul keluar dari tumpukan, Bila instruksi POP PSW dan POP H dilaksanakan dalam Gambar 12-10e, isi register terakhir akan menjadi
AF = 5678H
HL = 1234H
Dan penunjuk tumpukan akan berisi
SP = 2100H
CALL dan RET
Tujuan utama dari penyediaan tumpukan SAP-3 adalah untuk menyimpan alamat-kembali secara otomatik bilamana digunakan instruksi-instruksi CALL. Ketika suatu instruksi
CALL, alamat
Dilaksanakan, isi pencacah program didorong kedalam tumpukan. Kemudian alamat awal dari subrutin diisikan ke dalam pencacah program. Dengan cara ini, instruksi berikutnya yang diambil adalah instruksi pertama dari subrutin. Setelag subrutin selesai dilaksanakan, instruksi RET akan menyembulkan alamat-kembali dari tumpukan dan memasukkannya ke pencacah program.
Berikut ini merupakan contoh penggunaan instruksi tersebut.
Alamat Instruksi
2000H LXI SP,2100H
2001H
2002H
2003H CALL 8050H
2004H
2005H
2006H MVI A,OEH
- -
- -
- -
20FFH HLT
- -
- -
- -
8050H -
- -
- -
- -
8059H RET
CONTOH 12-5
SAP-3 mempunyai pendetak berprekuensi 1 MHz, sama seperti SAP-2. Tuliskan sebuah program yang menyediakan waktu tunda sekitar 80 ms
JAWABAN
Label Mnemonik Komentar
LXI SP,E000H ; inisialisasi penunjuk tumpukan
MVI E,08H ; inisialisasi pencacah
LOOP : CALL F020H ; penundaan 10 ms
DCR R ; turunkan cacahan
JNZ LOOP ; periksa untuk 8 lintasan loop
HLT
Tidak ada komentar:
Posting Komentar