SAP-3
Pengantar SAP-3: sebuah mikrokomputer 8-bit yang kompatibel ke atas dengan mikroprosesor 8085 Perangkat instruksi: sama dengan SAP-2, ditambah dengan instruksi-instruksi baru
Model Pemrograman Register pada SAP-3
Model Pemrograman PC berupa register 16-bit yang melakukan pencacahan dari 0000H - FFFFH PC mengirimkan alamat instruksi berikutnya yang akan dilaksanakan dan kemudian ditahan dalam MAR Register CPU: Register A, B, C, D, E, H, L, masing-masing register berukuran 8-bit yang digunakan dalam operasi aritmetika dan logika
Model Pemrograman Register F (Flag) digunakan untuk menyimpan bit-bit bendera S, Z, CY, dan P Register SP (Stack Pointer): register SP berupa register 16-bit, yang digunakan untuk menunjukkan suatu bagian dari memori yang disebut stack
Instruksi Perpindahan Data
MOV dan MVI Instruksi MOV: digunakan untuk perpindahan data antar register Format: MOV reg1, reg2 dengan reg1 = reg A, B, C, D, E, H atau L reg2 = reg A, B, C , D, E, H atau L Secara mikrooperasi: reg1 reg2 Contoh: MOV L, A MOV E, H
MOV dan MVI Instruksi MVI: berupa instruksi perpindahan data segera (immediate) Format: MVI reg, byte dengan reg = register A, B, C, D, E, H atau L Contoh: MVI D,0EH MVI L, FFH Keuntungan CPU yang mempunyai jumlah register lebih banyak: MOV dan MVI memerlukan keadaan T lebih sedikit dibandingkan dengan instruksi MRI. Semakin banyak register semakin banyak MOV dan MVI yang dapat dipakai
Instruksi-instruksi Aritmetika
Bendera Carry Gambar di atas adalah rangkaian logika yang digunakan sebagai penjumlah-pengurang pada SAP-3. Jika SUB=0, rangkaian melakukan penjumlahan Jika SUB=1, rangkaian melakukan pengurangan
Bendera Carry Selama operasi penjumlahan, CY disebut carry. Pada operasi pengurangan, CY disebut borrow Hasil operasi penjumlahan disimpan dalam akumulator, dan carry/borrow yang terjadi disimpan pada bendera CY
Instruksi Bendera Pindahan (Carry/Borrow) STC (Set Carry) Membuat bit CY bernilai ‘1’ (set) CMC (Complement the Carry) Mengkomplemenkan nilai carry Jika sebelum eksekusi CY=0, setelah instruksi CMC dilaksanakan maka CY=1 Jika sebelum eksekusi CY=1, setelah instruksi CMC dilaksanakan maka CY=0 Bagaimana untuk mereset Carry?
Instruksi ADD Format instruksi: ADD reg dengan reg = register A, B, C, D, E, H dan L Instruksi ADD: menjumlahkan isi register yang ditunjuk dengan isi akumulator, hasil penjumlahan disimpan dalam akumulator. Contoh:
Instruksi ADD Sehingga pada akhir siklus instruksi dihasilkan: CY=0 dan A = 1111 1001
Instruksi ADC Instruksi ADC (Add With Carry): jumlahkan dengan carry Format: ADC reg dengan reg = register A, B, C, D, E, H dan L
Instruksi ADC Contoh:
Instruksi SUB Format: SUB reg Instruksi ini akan mengurangkan isi register yang ditunjuk dari isi akumulator Jika terjadi borrow, CY akan diset ‘1’ Jika tidak terjadi borrow, CY akan direset
Instruksi SUB Contoh: A=0000 1111 dan C=0000 0001 Maka eksekusi instruksi SUB C menghasilkan: Tidak terjadi borrow, sehingga CY=0 dan A=0000 1110
Instruksi SBB Instruksi SBB (Substract with Borrow) digunakan untuk mengurangkan isi register yang ditunjuk beserta isi bendera CY, dari isi yang terdapat dalam register akumulator Contoh: Jika A = 1111 1111 E = 0000 0010 dan CY =1, maka instruksi SBB E akan menghasilkan:
Instruksi SBB Hasil akhir dari operasi ini adalah: CY=0 dan A=1111 1100
Penambahan (Increment) Format instruksi: INR reg Contoh: Jika diberikan L=0000 1111 eksekusi dari INR L akan menghasilkan L = 0001 0000 Instruksi INR tidak berpengaruh pada bendera carry, tetapi instruksi ini mempengaruhi bendera tanda dan bendera nol
Penambahan (Increment) Contoh: Jika B = 1111 1111 dari keadaan semula bendera-bendera adalah S=1, Z=0, CY = 0 Maka setelah eksekusi INR B akan dihasilkan: B = 0000 0000 dengan S=0, Z=1, CY=0 Terlihat bahwa bendera carry tidak berubah walaupun terjadi carry
Pengurangan (Decrement) Format Instruksi: DCR reg Contoh: Jika E = 0111 0110 Eksekusi DCR E akan menghasilkan E = 0111 0101 Instruksi DCR mempengaruhi bendera tanda (Sign) dan bendera nol (Zero), tetapi tidak mempengaruhi bendera CY
Pengurangan (Decrement) Contoh: Kondisi awal: E = 0000 0000 S = 0, Z = 1, CY = 0 Setelah eksekusi DCR E akan diperoleh kondisi baru: E = 1111 1111 S = 1, Z = 0, CY = 0
Putar semua ke kiri Format: RAL reg Instruksi RAL: memutar semua bit termasuk bendera CY ke kiri
Putar semua ke kanan Format: RAR reg Instruksi RAR: memutar semua bit termasuk bendera CY ke kanan
RLC dan RRC Format: RLC reg Format: RRC reg
Instruksi Logika Instruksi yang ada: ANA reg ORA reg XRA reg Instruksi-instruksi ini menyebabkan terjadinya operasi-operasi AND, OR dan XOR antara register yang ditunjuk dengan akumulator
Instruksi Logika Instruksi yang lain CMP reg Instruksi ini membandingkan isi register yang ditunjuk dengan isi akumulator Bendera nol (Zero) menunjukkan hasil pembandingan:
Instruksi Logika Instruksi CMP tidak mempengaruhi isi akumulator, tetapi hanya mempengaruhi isi bendera Z Contoh: Jika: A=F8H D=F8H Z=0 setelah operasi CMP D akan menghasilkan A=F8H Z=1
Instruksi Aritmetika dan Logika Segera (Immediate) Format instruksi: ANI byte ORI byte XRI byte Byte data akan disegera di-’AND, OR atau XOR’-kan dengan isi akumulator
Instruksi Aritmetika dan Logika Segera (Immediate) Format instruksi ADI byte ADD immediate ACI byte ADC immediate SUI byte SUB immediate SBI byte SBB immediate CPI byte CMP immediate
Instruksi Lompatan Instruksi-instruksi SAP-2 yang digunakan pada SAP-3 adalah: JMP alamat JM alamat JZ alamat JNZ alamat
Instruksi Lompatan - JP JP = Jump if Positive Format instruksi: JP alamat menghasilkan suatu lompatan ke alamat yang ditentukan jika bendera tanda dalam keadaan reset
Instruksi Lompatan - JC JC = Jump if Carry Format instruksi: JC alamat menghasilkan suatu lompatan ke alamat yang ditentukan jika bendera carry dalam keadaan set
Instruksi Lompatan - JNC JNC = Jump if NoCarry Format instruksi: JNC alamat menghasilkan suatu lompatan ke alamat yang ditentukan jika bendera carry tidak dalam keadaan set
Instruksi Lompatan - Bendera Paritas Register F yang menyimpan bendera-bendera Untuk bit paritas: Jika angka 1 berjumlah genap maka bendera paritas diset Jika angka 1 berjumlah ganjil maka bendera paritas direset
Instruksi Lompatan - JPE JPE = Jump if Parity Even Format instruksi: JPE alamat menghasilkan suatu lompatan ke alamat yang ditentukan jika bendera paritas dalam keadaan set (paritas genap)
Instruksi Lompatan - JPO JPO = Jump if Parity Odd Format instruksi: JPO alamat menghasilkan suatu lompatan ke alamat yang ditentukan jika bendera paritas dalam keadaan reset (paritas ganjil)
Instruksi Lompatan - Contoh Misalkan keadaan bendera-bendera adalah S=1, Z=0, CY=0 dan P=1 maka program akan melompat jika menjumpai instruksi JPE
Instruksi Register Berpasangan
Pasangan Register Pasangan register
Instruksi LXI Format instruksi: dengan B mewakili pasangan BC LXI B, dble LXI D, dble LXI H, dble dengan B mewakili pasangan BC D mewakili pasangan DE H mewakili pasangan HL Contoh: LXI B, 90FFH
Instruksi DAD (Double ADD) Format instruksi: DAD B DAD D DAD H Instruksi DAD menjumlahkan isi dari pasangan register tertemtu dengan pasangan register HL. Hasil penjumlahan disimpan dalam pasangan register HL
Instruksi DAD (Double ADD) Contoh: BC = F521H HL = 0003H maka eksekusi DAD B menghasilkan HL = F524H Instruksi DAD mempengaruhi bendera CY
Instruksi INX (Increment the Extended Register) Format instruksi: INX B INX D INX H
Instruksi DCX (Decrement the Extended Register) Format instruksi: DCX B DCX D DCX H Instruksi INX dan DCX tidak mempengaruhi bendera
Instruksi-instruksi Taklangsung
Visualisasi Penunjuk HL SAP-3 memiliki instruksi yang menggunakan register HL sebagai penunjuk alamat data (data pointer)
Pengalamatan Taklangsung Pengalamatan langsung: LDA 5000H STA 6000H Pengalamatan taklangsung: digunakan penunjuk HL sebagai penunjuk alamat
Pembacaan Taklangsung Salah satu bentuk: MOV reg, M dengan reg = A, B, C, D, E, H, atau L M = MHL Instruksi ini mengisi register tertentu dengan data yang alamatnya ditunjukkan oleh isi register HL. Setelah eksekusi, register tersebut berisi MHL
Pembacaan Taklangsung Contoh: HL = 3000H dan M3000H = 87H maka eksekusi MOV C, M menghasilkan C = 87H
Penulisan Taklangsung Salah satu bentuk: MOV M, reg dengan reg = A, B, C, D, E, H, atau L M = MHL Instruksi ini mengisi lokasi memori tertentu yang alamatnya ditunjukkan oleh isi register HL. Setelah eksekusi, akan diperoleh MHL = reg
Penulisan Taklangsung Contoh: HL = E300H B = F2H eksekusi dari MOV M,B menghasilkan ME300H = F2H
Instruksi Segera Taklangsung Misal: MVI M,byte Jika dimisalkan HL = 3000H, maka eksekusi dari MVI M, 87H akan menghasilkan M3000H = 87H
Instruksi-instruksi Penunjuk yang lain ADD M ADC M SUB M SBB M INR M DCR M ANA M ORA M XRA M CMP M
Instruksi Penumpukan
SAP-2 mempunyai instruksi CALL yang dapat mengarahkan program kepada suatu subrutin Sebelum terjadi lompatan isi PC ditambah satu dan disimpan pada alamat FFFEH dan FFFFH Pada saat berakhirnya subrutin, instruksi RET mengisi PC dengan alamat kembali, yang mengakibatkan komputer kembali ke program utama
Tumpukan Merupakan bagian dari memori yang disediakan terutama bagi penyimpanan alamat kembali (return address) SAP-2: tumpukan pada alamat FFFEH dan FFFFH
Tumpukan SAP-3: struktur tumpukan berbeda pemrogram dapat memutuskan di mana lokasi tumpukan dan berapa besar tumpukan yang dipakai tumpukan Bagian memori yang telah digunakan sebagai tumpukan tidak dapat digunakan untuk menyimpan program/data
Penunjuk Tumpukan Instruksi yang digunakan: PUSH, POP, dan CALL Instruksi tumpukan menggunakan pengalamatan taklangsung, register SP digunakan sebagai penunjuk alamat
Penunjuk Tumpukan Misalkan SP = 20FFH, penunjuk tumpukan akan menunjuk ke M20FFH Inisialisasi penunjuk tumpukan: LXI SP, dble Contoh: LXI SP, 20FFH berarti penunjuk alamat tumpukan akan diinisialisasi ke alamat 20FFH
Instruksi PUSH Instruksi PUSH digunakan untuk menyimpan data dalam suatu tumpukan (stack) Instruksi yang ada: PUSH B PUSH D PUSH H PUSH PSW PSW (Program Status Word) merupakan rangkuman dari isi register Akumulator dan register bendera, jadi PSW=AF
Instruksi PUSH Pelaksanaan instruksi PUSH Penunjuk tumpukan dikurangi satu, sehingga diperoleh SP-1 Byte tinggi dalam pasangan register disimpan dalam MSP-1 Penunjuk tumpukan dikurangi lagi menjadi SP-2 Byte rendah dalam pasangan register disimpan dalam MSP-2
Instruksi PUSH Contoh: BC = 5612H SP = 2100H Bila PUSH B dieksekusi, maka Penunjuk tumpukan diturunkan menjadi 20FFH Byte tinggi pada pasangan register BC, yaitu 56H disimpan pada lokasi 20FFH
Instruksi PUSH Penunjuk tumpukan diturunkan lagi menjadi 20FEH byte rendah dari pasangan register BC, yaitu 12H disimpan pada lokasi 20FEH
Instruksi PUSH Contoh lain: Misal SP = 2100H AF = 1234H DE = 5678H HL = 9A25H Maka eksekusi dari PUSH PSW PUSH D PUSH HL
Instruksi POP Instruksi yang ada: Pelaksanaan instruksi POP POP B POP D POP H POP PSW Pelaksanaan instruksi POP Byte dibaca dari lokasi memori yang dialamati oleh penunjuk tumpukan. Byte ini kemudian ditempatkan ke byte rendah dari pasangan register yang ditentukan Penunjuk tumpukan di-increment Byte dibaca dari lokasi memori dan disimpan pada byte tinggi dari pasangan register yang ditentukan
Instruksi POP Misalkan dalam tumpukan sudah terdapat data: maka penunjuk tumpukan berada pada alamat 20FAH Maka Eksekusi POP B: Byte 25 H dibaca dari lokasi 20FAH dan disimpan pada register C
Instruksi POP Penunjuk tumpukan diincrement menjadi 20FCH Penunjuk tumpukan diincrement menjadi 20FB. Byte 9AH dibaca dari lokasi 20FB dan disimpan pada register B. Pasangan regsiter BC sekarang berisi BC = 9A25H Penunjuk tumpukan diincrement menjadi 20FCH
Instruksi POP Setiap kali melaksanakan instruksi POP, 2 byte data akan keluar dari tumpukan. Jika instruksi POP PSW dan POP H dilaksanakan, maka isi register menjadi: AF = 5678 HL = 1234H dan SP = 2100H
Instruksi CALL dan RET Digunakan untuk pemanggilan subrutin Format instruksi CALL alamat Urutan pelaksanaan Pada saat dilaksanakan, isi PC di-PUSH ke tumpukan Kemudian alamat awal subrutin dimuat ke PC Setelah subrutin selesai dilaksanakan, instruksi RET akan mem-POP isi PC yang disimpan dalam tumpukan eksekusi program utama lagi
Instruksi CALL dan RET Contoh penggunaan:
Instruksi CALL dan RET Pada saat eksekusi CALL 8050H, alamat instruksi berikutnya (2006H) di-PUSH ke tumpukan. Pada saat eksekusi RET, alamat instruksi berikutnya akan di-POP ke PC
Pemanggilan dan Pengembalian Bersyarat Instruksi Pemanggilan yang ada CNZ alamat CZ alamat CNC alamat CC alamat CPO alamat CPE alamat CP alamat CM alamat Instruksi Pengembalian yang ada RNZ alamat RZ alamat RNC alamat RC alamat RPO alamat RPE alamat RP alamat RM alamat