68k utm complete
Upcoming SlideShare
Loading in...5
×
 

Like this? Share it with your network

Share

68k utm complete

on

  • 1,298 views

 

Statistics

Views

Total Views
1,298
Views on SlideShare
1,298
Embed Views
0

Actions

Likes
0
Downloads
20
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

68k utm complete Document Transcript

  • 1. Sistem Terbenam Berasaskan Mikropemproses 68000 Muhammad Mun’im Ahmad Zabidi Universiti Teknologi Malaysia January 29, 2009If you found this book useful, donate to the Gaza fund
  • 2. Kandungan 1 Sistem Berasaskan Mikropemproses 1 1.1 Sistem Berasaskan Mikropemproses . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1.2 Perkakasan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 1.3 Perisian . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 1.4 Evolusi Mikropemproses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 1.5 Pemilihan Mikropemproses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 2 Ciri Perisian 68000 11 2.1 Famili 68k . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 2.2 Model Pengaturcaraan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 2.3 Organisasi Ingatan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 2.4 Pengenalan kepada Set Suruhan 68000 . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 2.5 Beberapa Suruhan Asas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 2.6 Pengenalan kepada Mod Alamat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 2.7 Format Suruhan Mesin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 2.8 Latihan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 3 Bahasa Himpunan 29 3.1 Pembangunan Perisian . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 3.2 Perlaksanaan Aturcara . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 3.3 Format Penyata . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 3.4 Ungkapan dalam Medan Kendalian . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 3.5 Perintah Penghimpun . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 3.6 Penggunaan Simulator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 4 Mod Alamat 47 4.1 Mod Daftar Data Langsung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 4.2 Mod Daftar Alamat Langsung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 4.3 Alamat dan Daftar Alamat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 4.4 Mod Mutlak Panjang . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 4.5 Mod Mutlak Pendek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 4.6 Mod Terdekat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 4.7 Mod Tersirat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 4.8 Mod Daftar Alamat Tak Langsung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 4.9 Mod Pascatokok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 4.10 Mod Prasusut . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 4.11 Mod Daftar Alamat Tak Langsung dengan Ofset . . . . . . . . . . . . . . . . . . . . . . 56 4.12 Mod Daftar Alamat Tak Langsung dengan Indeks . . . . . . . . . . . . . . . . . . . . . 57 4.13 Mod PC Relatif dengan Ofset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 4.14 Mod PC Relatif dengan Indeks dan Ofset . . . . . . . . . . . . . . . . . . . . . . . . . 59 iIf you found this book useful, donate to the Gaza fund
  • 3. ii Kandungan 5 Suruhan Olahan Data 61 5.1 Suruhan ADD dan SUB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 5.2 Kesan ADD dan SUB Terhadap Bendera . . . . . . . . . . . . . . . . . . . . . . . . . . 62 5.3 Suruhan Darab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 5.4 Suruhan Bahagi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 5.5 Mengolah Kendalian Berlainan Saiz . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 5.6 Suruhan Logik . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 5.7 Mengubah Bendera CCR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 5.8 Suruhan Anjak dan Putar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 5.9 Suruhan Olahan Bit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 5.10 Suruhan BCD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76 6 Kawalan Aturcara 81 6.1 Suruhan Lompat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81 6.2 Suruhan Cabang Tanpa Syarat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82 6.3 Suruhan Cabang Bersyarat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 6.4 Suruhan CMP, TST dan BTST . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86 6.5 Pemilihan Dua Turutan Suruhan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90 6.6 Mengulang Turutan Suruhan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91 6.7 Bentuk Gelung Alternatif . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92 7 Olahan Tatasusunan dan Rentetan 97 7.1 Prinsip Tatasusunan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97 7.2 Isu-Isu Dalam Olahan Tatasusunan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101 7.3 Kajian Kes Olahan Tatasusunan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103 7.4 Rentetan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106 7.5 Operasi Output Aksara . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108 7.6 Rutin TRAP dalam Easy68k . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110 7.7 Penggunaan Tatusunan Lanjutan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112 8 Tindanan dan Subrutin 115 8.1 Tindanan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115 8.2 Prinsip Asas Subrutin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116 8.3 Subrutin Bersarang . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119 8.4 Melindungi Isi Daftar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120 8.5 Pengiriman Parameter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122 8.6 Penggunaan Subrutin Yang Berkesan . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126 8.7 Kajian Kes Subrutin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127 9 Ciri Perkakasan MC68000 131 9.1 Pin dan Isyarat 68000 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131 9.2 Isyarat Kawalan Bas Tak Segerak . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133 9.3 Isyarat Kawalan Sistem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134 9.4 Kawalan Sampukan dan Status Pemproses . . . . . . . . . . . . . . . . . . . . . . . . . 135 9.5 Kawalan Periferal 6800 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138 9.6 Isyarat Kawalan DMA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138 9.7 Kitar Suruhan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140If you found this book useful, donate to the Gaza fund
  • 4. Kandungan iii 10 Sistem Ingatan 149 10.1 Organisasi Ingatan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149 10.2 Ingatan Baca Sahaja . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150 10.3 Ingatan Capaian Rawak . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151 10.4 Serpihan Ingatan Piawaian Industri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152 10.5 Logik gam . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155 10.6 Logik Kawalan Ingatan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156 10.7 Penyahkodan Alamat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158 10.8 Litar Penjana DTACK* . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161 10.9 Penyahkodan Separa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163 11 Pengantaramukaan Input/Output Asas 167 11.1 Prinsip Input/Output . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167 11.2 Pengantaramukaan LED . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171 11.3 Pengantaramukaan Pamer 7 segmen . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172 11.4 Pengantaramukaan Suis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175 11.5 Pengantaramukaan Papan Kekunci . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179 11.6 Input/Output Mudah dengan EASy68K . . . . . . . . . . . . . . . . . . . . . . . . . . 180 12 Pengantaramukaan Selari - WIP 185 12.1 Peranti PIA MC6821 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185 12.2 Input/Output dengan PIA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190 13 Pengantaramukaan Selari - WIP 195 13.1 Penghantaran Data Bersiri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195 13.2 Peranti ACIA MC6850 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198 13.3 Memulakan ACIA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201 13.4 Menggunakan ACIA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203 13.5 Serpihan Sokongan bagi Perhubungan Bersiri . . . . . . . . . . . . . . . . . . . . . . . 205 14 Kekecualian & Sampukan 209 14.1 Mod Penyelia dan Pengguna . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209 14.2 Suruhan Kawalan Sistem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210 14.3 Pemprosesan Kekecualian . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212 14.4 Kekecualian yang Disebabkan Perlaksanaan Aturcara . . . . . . . . . . . . . . . . . . . 214 14.5 Keadaan Ralat yang Menyebabkan Perangkap . . . . . . . . . . . . . . . . . . . . . . . 218 14.6 Reset dan Pememulaan Sistem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220 14.7 Sampukan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222 14.8 Kitar Akuan Sampukan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223 14.9 Sampukan Tervektor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223If you found this book useful, donate to the Gaza fund
  • 5. Bab 1 Sistem Berasaskan Mikropemproses Objektif • Membandingkan ciri-ciri sistem terbenam dan sistem guna am • Menyenaraikan komponen utama sistem berasaskan mikropemproses • Menerangkan operasi dalaman mikropemproses • Menjelaskan evolusi mikropemproses Pengenalan Bab ini merupakan latar belakang kepada sistem berasaskan mikropemproses. Anda akan melihat aplikasi mikropemproses dan komponen-komponen dalamannya secara am. Anda akan melihat susunan dalaman komputer dan bagai-mana ia melaksanakan aturcara dalam ingatan. Anda akan juga melihat faktor-faktor yang perlu diketahui semasa memilih mikropemproses untuk sesuatu aplikasi. Akhir sekali, kita akan melihat evolusi mikropemproses hingga ke hari ini. 1.1 Sistem Berasaskan Mikropemproses Teknologi mikropemproses telah membolehkan banyak peranti elektronik mempunyai kecerdikan dan memudahkan kehidupan manusia. Peralatan yang mengandungi mikropemproses boleh dikategorikan kepada komputer guna am dan sistem terbenam. Komputer Guna Am Apabila perkataan komputer disebut, selalunya kita akan memikirkan komputer guna am. Terdapat beberapa kategori utama komputer guna am: Komputer peribadi (PC1 ) — Apabila disebut perkataan “komputer”, bentuk yang paling pantas terlintas di fikiran mempunyai dua bentuk utama iaitu desktop dan laptop. Ia merupakan komputer guna am yang paling murah dan lazimnya menggunakan peranti papan kekunci dan tetikus untuk input, serta paparan dan pencetak untuk output. Pelayan — Pelayan2 merupakan sebarang komputer yang dipasang sepanjang masa untuk melayan permohonan dari pengguna. Pelayan adalah penggerak utama Internet, dengan menghidangkan apa saja maklumat yang diperlukan pengguna. Disebabkan pelayan perlu beroperasi tanpa henti 1 personal computer 2 server 1If you found this book useful, donate to the Gaza fund
  • 6. 2 Bab 1. Sistem Berasaskan Mikropemproses berta-hun-tahun lamanya, ia dibina menggunakan perkakasan yang lebih berkualiti ber-banding komputer peribadi. Kerangka utama — Komputer kerangka utama3 adalah sejenis pelayan yang dibuat oleh syarikat IBM. Namanya merujuk kepada saiznya yang besar serta memerlukan bilik dengan penyejukan khusus. Dengan adanya Internet, fungsi kerangka utama tidak lagi sepenting dahulu kerana fungsinya boleh dilakukan oleh pelayan yang lebih murah. Superkomputer — Superkomputer ditakrifkan sebagai komputer yang terpantas semasa ia mula-mula diperkenalkan. Disebabkan teknologi komputer bergerak pantas, superkomputer hari ini akan menjadi komputer biasa pada hari esok. Superkomputer digunakan bagi pengiraan intensif seperti fizik kuantum, ramalan cuaca, permodelan molekul, simulasi (seperti simulasi pesawat dalam terowong udara dan simulasi senjata nuklear), dan sebagainya. Ia selalunya dijumpai di universiti-universiti utama, agensi ketenteraan dan makmal penyelidikan saintifik. Kebanyakan superkomputer hari ini dibina dengan beribu-ribu mikropemproses biasa yang digabungkan dengan penyambungan khusus. Versi kecil boleh dibina dengan empat pemproses ke atas dan ini dikenali sebagai gugusan komputer4 . Komputer guna am boleh melakukan pelbagai tugas menurut aturcara yang diisikan ke dalamnya dan peralatan yang disambungkan kepadanya. Untuk menggunakannya dengan efisien, komputer guna am memerlukan sistem pengoperasian. Dalam komputer peribadi, sistem pengoperasian yang kerap digunakan adalah Windows dan Mac OS X, manakala banyak pelayan menggunakan Linux atau Unix. Sistem Terbenam Sistem terbenam5 merupakan sistem komputer yang terkandung dalam satu peralatan. Umumnya, ia tidak kelihatan seperti komputer. Aplikasi sistem terbenam menggunakan lebih 98% daripada pengelu- aran mikropemproses baru sedangkan pengeluaran selebihnya barulah digunakan dalam komputer guna am. Berikut disenaraikan hanya segelintir sistem terbenam yang biasa kita temui: Telefon bimbit Permainan video Kamera digital Kad pintar Pencetak Mesin tekanan darah Modem Walkie-talkie Ketuhar gelombang mikro Pendingin hawa Sistem brek kereta Radio kereta Laser perangkap laju TV litar tertutup Sistem terbenam direka untuk melakukan hanya satu fungsi berbanding komputer guna am yang boleh melakukan pelbagai fungsi. Jumlah sistem terbenam yang dikilang mencapai angka beberapa bilion setiap tahun. Sebagai jurutera, anda mungkin dikehendaki merekabentuk sistem terbenam, sedangkan anda hanya perlu membeli sebuah komputer peribadi. Jadual 1.1 meringkaskan perbezaan sistem terbenam dengan komputer kegunaan am. 1.2 Perkakasan Sebarang sistem berasaskan mikropemproses terbahagi kepada dua aspek utama iaitu perkakasan6 dan perisian7 . Perkakasan adalah komponen-komponen yang boleh dilihat seperti papan litar, cip dan 3 mainframe 4 computer cluster 5 embedded systems 6 hardware 7 softwareIf you found this book useful, donate to the Gaza fund
  • 7. 1.2. Perkakasan 3 Jadual 1.1: Perbandingan komputer kegunaan am dan sistem terbenam Kategori Komputer Guna Am Sistem Terbenam Aplikasi Boleh diubah oleh peng- Tidak boleh, aplikasi telah dite- guna tapkan semasa rekabentuk Antaramuka Amnya mesti ada papan Tidak tetap, ada kalanya mudah pengguna kekunci dan skrin dengan beberapa butang dan LED, ada kalanya sama kompleks dengan komputer guna am Ciri penentu Kelajuan dan Lesapan kuasa, harga dan saiz keserasian perisian pendawaian. Perisian pula ialah aturcara yang terkandung dalam ingatan yang memboleh komputer berfungsi seperti yang dikehendaki. Perkakasan perlu dibina manakala perisian perlu ditulis. Perkakasan terdiri beberapa unsur standard iaitu pemproses, ingatan, dan peranti input/output (I/O). Spesifikasi pemproses paling penting adalah jenis dan kelajuannya seperti Freescale 68000 beroperasi pada 10 MHz. Spesifikasi ingatan terpenting ialah saiznya sama ada 32 kilobyte, 1 megabyte atau 2 gigabyte. Peranti I/O merupakan komponen perkakasan yang dipilih bergantung aplikasi termasuk penukar analog/digital, penukar digital/analog, pengawal pemacu cakera, pemacu paparan video, dan sebagainya. Sistem Bas Struktur asas bagi sebuah sistem komputer asas ditunjukkan dalam Rajah 1.1. Kesemua komponen disambungkan melalui bas sistem iaitu sekelompok pengalir yang dikongsi oleh komponen-komponen dalam sistem. Bas sistem terbahagi kepada bas alamat, bas data dan bas kawalan. Fungsi terperinci ketiga-tiga bas ini akan diliputi kemudian. Pemproses atau unit pemprosesan pusat (CPU8 ) ialah jantung keseluruhan sistem. Ia mengawal keseluruhan operasi yang dilakukan oleh sistem. Pemproses melaksanakan aturcara yang tersimpan dalam ingatan. Ingatan berfungsi menyimpan aturcara dan data yang diperlukan oleh mikropemproses. Ingatan terbahagi kepada dua jenis: ingatan baca-sahaja (ROM9 ) dan ingatan capaian rawak (RAM10 ). ROM dikenali juga sebagai ingatan tidak meruap yang bermakna kandungannya kekal walaupun tanpa bekalan kuasa. RAM pula dikenali juga sebaga ingatan meruap yang mana kandungannya lenyap apabila bekalan kuasa diputuskan. Fungsi ROM dan RAM berbeza dalam komputer guna am dan sistem terbenam. Dalam komputer guna am, ROM mengandungi dua fungsi. Fungsi pertama ialah pengujian komponen-komponen kritikal semasa sistem mula-mula dihidupkan. Setelah lulus peringkat ini, ROM melaksanakan fungsi keduanya iaitu mengisikan sistem pengoperasian (seperti Windows atau Linux) ke dalam RAM. Setelah RAM diisikan dengan sistem pengoperasian, ROM sudah tidak diperlukan lagi sepanjang operasi normal sistem. Saiz RAM amat besar kerana ia perlu menempatkan sistem pengoperasian dan aplikasi. Pengguna boleh mengisikan sebarang aplikasi daripada cakera keras ke dalam RAM. Disebabkan maklumat dalam RAM lenyap apabila komputer ditutup, kesemua perisian ini perlu diisikan semula dari cakera keras setiap kali komputer mula-mula dipasang. Dalam sistem terbenam, fungsi ROM lebih penting kerana mengandungi keseluruhan aplikasi yang 8 central processing unit 9 read-onlymemory 10 random access memoryIf you found this book useful, donate to the Gaza fund
  • 8. 4 Bab 1. Sistem Berasaskan Mikropemproses Bas Alamat Bas Data Bas Kawalan CPU Ingatan Ingatan Program Antaramuka Antaramuka Data (ROM) Selari Bersiri (RAM) Rajah 1.1: Rajah blok suatu sistem berasaskan mikropemproses. menentukan fungsi peralatan. Disebabkan kandungan ROM tidak berubah, fungsi sistem akan kekal sepanjang hayat. RAM hanya diperlukan untuk menyimpan data yang perlu semasa operasi sistem. Segelintir sistem kecil boleh beroperasi tanpa RAM langsung. Peranti input/output (I/O) diperlukan bagi membolehkan komputer ber-hubung dengan dunia luar. Peranti I/O selari melibatkan operasi membaca suis, mengawal lampu dan memindahkan data dengan peranti selari seperti penukar D/A, penukar A/D atau pemacu cakera. Peranti I/O bersiri membolehkan perhubungan dengan komputer yang lebih besar atau dengan terminal operator. I/O bersiri agak lambat tetapi ia amat mudah: cuma dua dawai (untuk menghantar dan menerima data) dan dawai bumi diperlukan. Ada lagi komponen-komponen yang tidak ditunjukkan dalam Rajah 1.1 seperti litar pemasaan dan litar sampukan. Litar pemasaan mengawal kelajuan keseluruhan sistem dan biasanya terdiri daripada litar berasaskan pengayun hablur. Litar sampukan pula, jika ada, membolehkan pemproses mengawal banyak peranti input/output pada suatu masa. Dalam pembinaan sistem terbenam yang mudah, kesemua komponen uta-ma iaitu pemproses, ingatan dan peranti I/O boleh dikecilkan sehingga dapat dimuatkan dalam satu cip. Peranti ini dikenali sebagai mikropengawal11 atau komputer dalam satu cip. Bagi sesuatu famili mikropengawal, terdapat berbagai versi yang berbeza saiz ingatan dan jumlah peranti I/O walaupun menggunakan pemproses yang sama. Walaupun ia tidak berkeupayaan tinggi, ia banyak digunakan dalam sistem kecil kerana ia kecil, murah dan boleh beroperasi dengan kuasa bateri. Lazimnya ingatan dalam mikropengawal adalah terhad dan tidak boleh ditambah jadi jurutera pereka mesti mahir mengoptimumkan penggunaan ingatan. Konfigurasi peranti I/O juga tidak boleh dipinda maka sebelum membina sistem, jurutera pereka perlu memilih versi yang benar-benar sepadan dengan sistem yang hendak dikawal. Selain mikropemproses dan mikropengawal, sistem terbenam terdapat juga dalam bentuk sistem dalam cip (SoC12 ). Jika mikropengawal boleh dibeli di pasaran dengan mudah dan digunakan dalam pelbagai sistem, SoC direka khusus untuk sesuatu produk seperti telefon bimbit dan pemain MP3. Berbanding mikropengawal, ia jauh lebih kompleks kerana mempunyai peranti I/O maju seperti pengawal LCD grafik, antaramuka USB, pengawal kad SD, penyahkod audio MP3 dan seumpamanya. Kos untuk mereka SoC amat tinggi tetapi menjimatkan kos keseluruhan pembuatan sesuatu produk kerana dapat mengurangkan jumlah komponen dan saiz produk. Operasi Ingatan Ingatan boleh dianggap menyimpan maklumat berbentuk satu senarai panjang. Setiap unsur dalam senarai ini mempunyai alamat (lokasi) dan data (isi). Peranti ingatan mempunyai penyambungan kepada bas alamat, bas data dan input kawalan. Bas alamat, bersifat input, menentukan lokasi mana yang sedang dicapai. Jumlah talian alamat menentukan jumlah kedudukan yang terdapat dalam ingatan. Bagi bas 11 microcontroller 12 System-on-ChipIf you found this book useful, donate to the Gaza fund
  • 9. 1.2. Perkakasan 5 Alamat Data Alamat Data Isyarat Baca kawalan Tulis Rajah 1.2: Ingatan. alamat n bit, terdapat 2n alamat. Bas data, bersifat input dan output, memindahkan data masuk dan keluar ingatan. Jumlah bit yang boleh dicapai pada sesuatu masa ditentukan oleh jumlah talian data. Bas kawalan menentukan operasi yang akan dilakukan terhadap ingatan. Sebagai contoh, mikro-pemproses 6800 mempunyai bas alamat 16 bit dan bas data 8 bit. Oleh itu, saiz ingatannya ialah 216 = 65536 alamat dan setiap alamat mengandungi 8 bit (atau 1 byte). Bagi mikropemproses 68k, bas alamatnya bersaiz 24 bit jadi ia mempunyai 224 = 16777216 alamat. Setiap alamat menyimpan satu byte. Bagaimanapun, dua alamat bergandingan boleh dicapai serentak. Oleh itu bas datanya bersaiz 16 bit. Dua operasi boleh dilakukan terhadap ingatan: baca dan tulis. Operasi mana yang dilakukan ditentukan oleh isyarat BACA dan TULIS yang dihantar dari CPU ke ingatan sebagai sebahagian daripada bas kawalan. Dalam operasi baca, maklumat dipindahkan dari ingatan ke pemproses. Untuk operasi ini, alamat maklumat yang dikehendaki diberikan oleh pemproses kepada ingatan. Seterusnya, perintah BACA dikeluarkan. Apabila ingatan melihat kedua-dua maklumat ini, ia mengeluarkan data yang terletak di alamat yang dinyatakan ke bas data. Data ini akhirnya dibaca oleh CPU. Operasi tulis memindahkan data dari CPU ke dalam ingatan. Dalam operasi ini, bas data tidak menjadi output ingatan tetapi berfungsi sebagai input. Untuk menulis secebis data ke dalam ingatan, CPU memberikan alamat di mana data akan disimpan ke bas alamat. Seterusnya, data yang akan disimpan dikeluarkan ke bas data. Akhir sekali, perintah TULIS diberi. Apabila ingatan melihat kesemua maklumat ini, ia menyimpan data ke di alamat yang dinyatakan. (a) Membaca ingatan. (b) Menulis ingatan. Rajah 1.3: Dua operasi yang boleh dilakukan terhadap ingatan. Operasi Pemproses Bagi memahami operasi mikropemproses, kita akan melihat secara ringkas rekabentuk dalaman CPU. Setiap pemproses mengandungi tiga komponen asas:If you found this book useful, donate to the Gaza fund
  • 10. 6 Bab 1. Sistem Berasaskan Mikropemproses CPU Unit Kawalan Bas Alamat ALU Bas Data Bas Kawalan Daftar Rajah 1.4: Unit Pemprosesan Pusat. • Daftar13 • Unit kawalan14 • Unit aritmetik dan logik (ALU15 ) Daftar mikropemproses menyimpan maklumat yang sedang digunakan. Terdapat daftar yang kelihatan kepada pengaturcara dan ada juga yang terlindung. Unit kawalan mengawal operasi mikropemproses dan seterusnya keseluruhan sistem. ALU pula digunakan untuk memproses data. CPU boleh dikelaskan menurut jumlah bit yang diproses serentak, yang bergantung kepada saiz ALU, daftar dan bas data. Saiz yang lebih lebar membolehkan data bersaiz besar diproses lebih pantas. Sebagai contoh, data sebesar 32 bit dipindahkah dalam hanya satu langkah dengan bas data 32 bit tetapi memerlukan 4 langkah dengan bas data 8 bit. Mikropemproses 68000 mempunyai daftar 32 bit tetapi saiz ALU dan bas datanya hanya 16 bit. Oleh kerana kedua-dua saiz data digunakan, 68000 dirujuk sebagai pemproses 16/32 bit. Sebagai perbandingan, saiz bas data, ALU dan daftar pemproses 68HC11 kesemuanya 8 bit. Kesemua pemproses berfungsi dengan melaksanakan suruhan yang dipungut dari ingatan. Masa perlaksanaan setiap suruhan dinamai kitar suruhan atau kitar pungut-laksana. Kitar suruhan terdiri daripada dua fasa utama: • Pungut16 — ambil suruhan dari ingatan • Laksana17 — tafsir dan laksana suruhan Semasa fasa pungut, pemproses mengambil satu suruhan dari ingatan. Untuk mencapai ke suruhan ini, alamat suruhan diisikan dahulu ke daftar yang dinamai pembilang aturcara (PC18 ). Pemproses membaca suruhan yang terkandung di alamat yang dinyatakan dalam PC. Suruhan ini kemudiannya diisi ke daftar suruhan (IR 19 ). IR lazimnya tidak termasuk dalam senarai daftar-daftar pemproses yang boleh dicapai secara langsung oleh pengaturcara. Semasa fasa laksana, pemproses mentafsir atau menentukan jenis suruhan yang terkandung dalam IR. Suruhan adalah suatu nombor perduaan yang difahami oleh unit kawalan. Kombinasi bit dalam suruhan menentukan apakah operasi yang perlu dilakukan serta kedudukan data yang diproses oleh 13 register 14 control unit 15 Arithmetic and Logic Unit 16 fetch 17 execute 18 program counter 19 instruction registerIf you found this book useful, donate to the Gaza fund
  • 11. 1.3. Perisian 7 suruhan tersebut. Setelah suruhan ditafsirkan, barulah pemproses boleh melakukan tugas yang dikehendaki. Senarai semua jenis suruhan yang boleh dilakukan digelar set suruhan20 . Set suruhan sesuatu mikropemproses bergantung kepada keupayaan mikropemproses tersebut. Sebagai contoh, sebuah pemproses 32 bit lazimnya mempunyai suruhan darab dan ia boleh mendarab dengan pantas dan mudah. Sebaliknya, sistem 8 bit lazimnya tiada suruhan darab. Jika operasi darab diperlukan, ia terpaksa dilaksanakan dengan berpuluh-puluh suruhan dan memakan masa yang lebih lama. Setelah mikropemproses menamatkan satu kitar suruhan, ia akan memungut lalu melaksanakan suruhan seterusnya sehingga komputer dimatikan. 1.3 Perisian Perisian adalah istilah am yang merangkumi satu atau banyak aturcara atau program yang dilaksanakan dalam komputer. Sesuatu aturcara terdiri daripada banyak suruhan. Aturcara boleh dianggap suatu gubahan muzik sedangkan suruhan adalah satu not yang keluar dari satu alat muzik. Untuk memainkan lagu yang menarik, kita perlu tahu mengeluarkan bunyi dengan not yang betul pada masa yang tepat. Dengan cara yang sama, kita perlu tahu kesan setiap suruhan dan mengatur suruhan-suruhan di dalam suatu aturcara. Dalam penulisan aturcara, mula-mula kita perlu mendapatkan algoritma atau konsep penyelesaian masalah. Seterusnya, algoritma perlu diterjemah menjadi suatu aturcara yang boleh difahami komputer. Inilah proses penulisan aturcara atau pengekodan21 , yang boleh dilakukan dalam pelbagai bahasa pengaturcaraan. Dalam sistem berasaskan mikropemproses, terdapat beberapa bahasa pengaturcaraan utama iaitu bahasa mesin, bahasa himpunan dan bahasa tahap tinggi. Bahasa Mesin Bahasa mesin22 ialah bahasa tabii komputer berbentuk kod perduaan. Ia mengawal operasi tahap rendah yang paling mudah atau primitif. Setiap operasi primitif tidak lebih daripada operasi memindahkan kelompok-kelompok bit dari satu tempat ke tempat lain dalam komputer, operasi asas aritmetik seperti tambah dan tolak, dan sebagainya. Pengguna boleh mengaturcara komputer dengan bahasa mesin secara mendapatkan kod perduaan bagi setiap suruhan kemudian mengisikan suruhan ke dalam ingatan secara manual.. Ia boleh dilakukan untuk mikropemproses mudah tetapi agak remeh untuk 68000. Bahasa ini tidak cekap kerana pengaturcaraannya lambat dan kesilapan terlalu mudah berlaku. Bahasa Himpunan Untuk memudahkan penulisan bahasa mesin, aturcara ditulis dalam bahasa himpunan23 . Suruhan- suruhan dalam bahasa himpunan berbentuk kod senang ingat atau mnemonik. Aturcara punca diterjemah ke bahasa mesin dengan penghimpun24 . Bahasa himpunan, sama seperti bahasa mesin, adalah khusus kepada setiap mikropemproses. Ini bermakna aturcara himpunan untuk sesuatu mikropemproses tidak difahami oleh mikropemproses lain. Apabila penghimpun menghasilkan bahasa mesin yang akan dilaksanakan di sistem dengan mikropemproses yang lain, ia dinamai penghimpun silang25 . Contohnya, penghimpun ASM68K menghimpun bahasa himpunan 68000 tetapi dilaksanakan komputer peribadi. Aturcara yang dihasilkan 20 instruction set 21 coding 22 machine language 23 assembly language 24 assembler 25 cross assemblerIf you found this book useful, donate to the Gaza fund
  • 12. 8 Bab 1. Sistem Berasaskan Mikropemproses oleh penghimpun digelar juga kod objek26 . Selain menukar aturcara punca ke bentuk objek, penghimpun menghasilkan fail senarai27 . Fail senarai menunjukkan mnemonik, lokasi ingatan yang digunakan, dan nilai perenambelasan setara bagi setiap suruhan. Bahasa himpunan harus digunakan untuk membina sistem berasas mikropemproses yang optimum. Ini kerana aturcara bahasa himpunan padat, pantas dan berupaya mengawal setiap komponen perkakasan dalam sistem. Namun begitu, pereka tidak boleh mengabaikan bahasa mesin sama sekali jika ingin melakukan pengaturcaraan secara berkesan. Bahasa Tahap Tinggi Bahasa tahap tinggi membolehkan aturcara lebih mudah ditulis dan mudah dialihkan ke sebarang mikropemproses lain jika perlu. Bagaimanapun, kod objek yang dihasilkan oleh pengkompil bahasa tahap tinggi selalunya beroperasi dengan lebih perlahan dan saiz kod objek yang terhasil lebih besar berbanding kod objek yang dikeluarkan oleh penghimpun. Dua bahasa tahap tinggi yang popular dalam pembinaan sistem terbenam ialah C dan BASIC. C ialah bahasa yang amat popular kerana ia berupaya mengawal sumber-sumber perkakasan hampir sama seperti bahasa himpunan. Dengan penggunaan pengkompil, aturcara punca dalam C ditukar ke kod objek. Sesetengah pengkompil membolehkan suruhan bahasa himpunan diselitkan dalam aturcara C membolehkan kedua-dua bahasa digabungkan dalam satu aturcara. BASIC28 ialah bahasa tahap tinggi yang paling mudah dipelajari. Penyata-penyata aturcara punca diterjemah semasa perlaksanaan ke bahasa mesin menggunakan pentafsir. Ini menyebabkan aturcara BASIC beroperasi dengan amat perlahan. Terdapat juga pengkompil BASIC yang menghasilkan aturcara bahasa mesin terus daripada aturcara punca. Ini sedikit sebanyak mempercepatkan perlak- sanaannya. 1.4 Evolusi Mikropemproses Mikropemproses yang pertama ialah Intel 4004 yang diperkenalkan pada tahun 1971. Ia merupakan peranti 4 bit yang asalnya direka untuk membina alat kira. Pada tahun berikutnya, Intel memperkenalkan peranti 8008 iaitu mikropemproses 8 bit yang pertama. Cip ini diikuti oleh 8080 dan 8085. Produk mikropemproses pertama dari Motorola ialah MC6800 pada tahun 1974. Cip ini juga merupakan peranti 8 bit. Suatu cip yang rekabentuknya berasal daripada MC6800 ialah 6502 yang dibina oleh MOS Technology Corporation. Cip 6502 digunakan dalam Apple II, iaitu komputer peribadi yang pertama. Mikropemproses 16 bit pertama ialah 8086 yang dikeluarkan oleh Intel pada tahun 1978. Cip kedua dalam siri ini – 8088 – digunakan dalam IBM PC asal. Kedua-dua cip ini merupakan asas kepada peranti 80286, 80386, 80486, Pentium dan pemproses-pemproses lain yang berasaskan Pentium. Setiap cip merupakan pembaikan kepada cip sebelumnya dan membentuk siri yang dikenali sebagai x86. Siri x86 dikembangkan ke 32 bit bermula dengan pemproses 80386, dikenali sebagai siri IA-32 oleh Intel. Seterusnya siri x86 dikembangkan ke 64 bit bermula dengan AMD Opteron dan Intel Core sebagai siri AMD64 dan EM64T. Motorola memperkenalkan pemproses 68000 pada tahun 1979. Peranti ini mengasaskan mikropem- proses famili 68k yang termasuk 68000, 68008, 68010, 68020, 68030, 68040 dan 68060. Siri ini pada asalnya direka sebagai pemproses dalam komputer guna am terutamanya dalam komputer Apple, tetapi pada hari ini ia hanya dijumpai dalam sistem terbenam selepas tiada lagi perkembangan siri ini selepas tahun 1993. Dalam satu perkembangan berkaitan, bahagian firma Motorola yang mereka pemproses (Motorola Semiconductor Products Sector) dipisahkan dari syarikat induk pada 2004 membentuk firma Freescale. Pada hari ini, pemproses Motorola 68k lebih tepat lagi disebut Freescale 68k. 26 objectcode 27 listing file 28 Beginner’s All-purpose Symbolic Instruction CodeIf you found this book useful, donate to the Gaza fund
  • 13. 1.5. Pemilihan Mikropemproses 9 1.5 Pemilihan Mikropemproses Boleh dikatakan semua komputer peribadi pada hari ini menggunakan siri x86, sama ada dibuat oleh syarikat Intel, AMD dan lain-lain. Siri x86 ada juga digunakan dalam sistem terbenam prestasi tinggi yang agak besar seperti robot. Dalam pembinaan sistem terbenam, pemilihan pemproses tidak condong kepada siri x86 sahaja kerana terdapat pelbagai faktor lain seperti penggunaan kuasa, saiz dan kos. Terdapat pelbagai jenis mikropemproses yang digunakan dalam sistem terbenam. Ini berbeza dengan komputer guna am yang pilihan pemprosesnya terhad. Beberapa faktor perlu dipertimbangkan semasa membanding dan memilih mikropemproses untuk sesuatu tugas. Jurutera pereka boleh memilih peranti yang sesuai dengan aplikasi dari mikropengawal 4 atau 8 bit hinggalah ke pemproses penuh 32 dan 64 bit. Dari Freescale sahaja terdapat mikropengawal ColdFire, M*Core, PowerPC, 68HC11, 68HC05, 68HC08 dan beberapa lagi. Dari firma lain terdapat mikropengawal ARM, PIC, MSP430, Rabbit, AVR, TMS320, Nios, MicroBlaze dan berpuluh-puluh lagi. Satu kaedah yang paling mudah bagi membezakan kelajuan sistem ialah juta suruhan sesaat (MIPS29 ). Contohnya, mikropemproses 68000 boleh mencapai 0.6 MIPS pada kelajuan 8 MHz tetapi 68040 boleh mencecah 40 MIPS. Unit MIPS boleh digunakan untuk membandingkan pemproses dari siri yang sama seperti dalam siri 68k atau dalam siri x86. Bagaimanapun, unit ini tidak begitu tepat bagi membanding pemproses dari siri yang berbeza contohnya satu pemproses dari siri 68k dengan satu pemproses lain dari siri x86. Saiz dan kuantiti data yang perlu diproses menentukan saiz mikropemproses yang diperlukan. Contohnya, suatu sistem pemain video dengan grafik tiga dimensi perlu melukis imej di kaca TV dengan sangat pantas dan ingatannya pula perlu mempunyai ingatan yang besar untuk menyimpan maklumat bagi setiap bintik yang dipaparkan. Aplikasi ini tidak mungkin dapat diselesaikan dengan mikropemproses 8 bit. Sebaliknya, sebuah sistem penggera mungkin mendapat input sejam sekali dan maklumat yang di bawah kawalannya hanya memerlukan beberapa puluh byte untuk disimpan. Dalam aplikasi ini, pemproses 8 bit lebih daripada mencukupi. Integrasi sistem menggambarkan keupayaan pengembangan sesuatu cip mikropemproses atau mikropengawal. Jika peranti input/output banyak tersedia dalam cip asas, peralatan tambahan tidak lagi diperlukan. Ini dapat mengecilkan saiz papan litar dan mengurangkan penggunaan kuasa. Bagaimanapun, terlalu banyak peranti yang tidak digunakan akan menambahkan kos pembuatan. Jika komputer yang direka hendak dikeluarkan dengan banyak, dan keuntungan ingin dimaksi- mumkan, kita perlu memilih komputer terkecil yang mampu melakukan tugas dikehendaki. Mikropem- proses 4 bit, misalnya, masih banyak digunakan untuk kerana kosnya yang amat rendah. Satu lagi faktor yang perlu dipertimbangkan dalam pembuatan dalam sistem berasas mikropem- proses ialah lesapan kuasa. Sistem yang jimat kuasa boleh bergantung hanya kepada bateri sebaliknya sistem yang kurang cekap kuasa mungkin memerlukan unit bekalan kuasa yang disambungkan kepada soket arus ulang-alik. Sudah tentulah sistem yang bergantung kepada bateri amat mudah dibawa ke mana-mana. Mikropemproses yang kurang cekap kuasa juga mungkin memerlukan kipas penyejukan. Faktor ini menyebabkan rekabentuk cesi peralatan perlu diubah dan kerapkali menjadi lebih besar dan kurang mudah alih. Masa ke pasaran ialah masa yang diperlukan untuk menyiapkan sesuatu rekabentuk. Ia bergantung kepada kemahiran perekabentuk dan kewujudan kelengkapan dan komponen yang diperlukan. Sesuatu mikropemproses mempunyai kos dan lesapan kuasa yang rendah serta keupayaan yang tinggi tidak semestinya dipilih jika tiada jurutera dalam sesuatu organisasi tersebut pernah menggunakannya. Perlu diingat, masa untuk mereka sistem yang kedua jauh lebih singkat berbanding dengan rekabentuk pertama. Kehadiran komponen perkakasan dan perisian yang diperlukan juga penting untuk menyiapkan sesuatu projek dalam masa yang singkat. 29 million instructions per secondIf you found this book useful, donate to the Gaza fund
  • 14. 10 Bab 1. Sistem Berasaskan Mikropemproses Latihan 1. Komponen atau litar manakah yang bukan sebahagian daripada pemproses? (a) RAM (b) ALU (c) Daftar (d) Unit kawalan (e) Pembilang aturcara 2. Pilih pernyataan yang paling sesuai bagi menerangkan mikropemproses. (a) Cip yang mengandungi hanya pemproses (b) Cip yang mengandungi kesemua komponen komputer (c) Kurang luwes (fleksible) dalam rekabentuk sistem berbanding mikropengawal (d) Memerlukan hanya satu cip untuk membina sistem yang lengkap (e) Biasanya kurang menggunakan kuasa berbanding mikropengawal 3. Yang manakah antara yang berikut tidak mengandungi mikropemproses? (a) Pelayan (b) Ketuhar gelombang mikro (c) MyKad (d) PDA (e) Tukul 4. ROM bermakna (a) Run Once Memory (b) Residual Oxidation Memory (c) Reprogrammable Once Memory (d) Read-Only Memory (e) Random Oscillator Modulation 5. Berikut disenarakan beberapa saiz bas alamat. Untuk setiap satu, kira saiz ruang ingatan bagi komputer berkenaan. (a) 16 bit (b) 20 bit (c) 24 bit (d) 32 bitIf you found this book useful, donate to the Gaza fund
  • 15. Bab 2 Ciri Perisian 68000 Objektif • Menerangkan latar belakang famili 68k • Melakar model pengaturcaraan 68000 • Menjelaskan organisasi ingatan • Menerangkan format suruhan mesin 2.1 Famili 68k Bab ini merupakan pengenalan kepada senibina mikropemproses 68000 dan famili 68k. Peranti ini adalah pemproses pertama yang dikaji dengan mendalam. Berikut ialah sebab kenapa mikropemproses ini sesuai dikaji: • Ia popular. • Reka bentuknya kemas • Set suruhannya komprehensif Ia mempunyai ciri-ciri yang memudahkan rekabentuk sistem pengendalian dan pengaturcaraan bahasa tahap tinggi. Pemproses pada hari ini sememangnya kompleks dan akan terus menjadi semakin kompleks. Oleh itu mikropemproses pertama yang dipelajari sepatutnya lebih kompleks. Peranti MC68000 adalah pengasas siri 68k yang asalnya direka untuk menjadi unit pemprosesan pusat (CPU) dalam komputer guna am. Ia disusuli oleh beberapa komponen yang berbeza kelajuan dan keupayaan. Jadual 2.1 meringkaskan perbezaan CPU dalam famili 68k. Awalan MC menunjukkan bahawa peranti ini dibuat oleh Motorola atau Freescale. Sekiranya dibuat oleh rakan niaganya seperti SGS-Thomson atau Hitachi, awalan yang berbeza akan digunakan. Pada hari ini, famili 68k tidak lagi digunakan dalam komputer guna am tetapi meluas digunakan dalam sistem terbenam dalam bentuk yang berbeza-beza, antaranya: • Pemproses terbenam1 — merupakan pemproses asal dengan diubah nama untuk tujuan pemasaran seperti MC68EC000. • Mikropengawal — menggabungkan pemproses teras seperti CPU32 (yang paling mirip 68020) dengan ingatan dan peranti I/O asas seperti penukar analog ke digital (ADC), antaramuka bersiri, pembilang, pemasa dan litar-litar yang seumpamanya dalam satu cip. 1 embedded controller 11If you found this book useful, donate to the Gaza fund
  • 16. 12 Bab 2. Ciri Perisian 68000 Jadual 2.1: Unit pemprosesan pusat (CPU) dalam siri 68k Bas Bas Komponen Tahun Ciri Penting Data Alamat MC68000 1979 16 24 Asas siri 68k MC68008 1982 8 24 Asas siri 68k MC68008 MC68010 1983 16 24 MC68000 dengan ingatan maya MC68020 1984 32 24 Pemproses 32 bit pertama dalam famili 68k MC68030 1987 32 32 MC68020 diperbaiki dengan ditambah MMU MC68040 1990 32 32 MC68030 diperbaiki dengan ditambah FPU MC68060 1993 64 32 MC68040 dengan 2 ALU dengan 1 FPU dan kelajuan 1 suruhan/kitar • Sistem dalam cip (SoC) – merupakan mikropengawal yang amat kompleks. Jika mikropengawal boleh digunakan dalam pelbagai sistem, SoC direka khusus untuk satu produk dan mengandungi peranti I/O yang kompleks seperti LCD, grafik, USB dan wayarles. Contoh SoC dari siri 68k ialah peranti Dragonball yang pernah digunakan dalam PDA PalmPilot. Teknologi pembuatan semikonduktor juga telah berubah. Pada asalnya MC68000 dibuat dengan teknologi NMOS, tetapi kini peranti yang paling mirip iaitu MC68HC000 dibuat dengan teknologi CMOS. Penggunan teknologi CMOS mengurangkan lesapan kuasa dari 1 W ke 100 mW sahaja. Selain peranti-peranti yang menggunakan pemproses berasaskan 68000, terdapat siri mikropengawal Coldfire yang menggunakan pemproses lebih moden. Dengan menggunakan seni bina dalaman RISC, pemproses ini mempunyai prestasi yang tinggi pada kos yang rendah. Keserasian aturcara adalah ciri penting ahli-ahli famili 68k. Aturcara yang ditulis untuk peranti 68000 boleh dilaksanakan oleh ahli-ahli famili yang lebih maju seperti 68020 atau ColdFire. Setelah memahami suruhan-suruhan MC68000 asas, mudah untuk kita mengaturcara pemproses-pemproses lain dalam famili ini. 2.2 Model Pengaturcaraan Model pengaturcaraan menunjukkan daftar CPU yang boleh dicapai oleh pengaturcaraan dan peta ingatan. Komponen-komponen lain CPU seperti daftar suruhan, ALU, dan unit kawalan tidak ditunjukkan kerana tidak berada di bawah kawalan pengaturcara. Pemproses 68000 mengandungi daftar berikut: • Lapan daftar data2 32 bit (D0-D7) • Tujuh daftar alamat3 32 bit (A0-A6) • Dua penuding tindanan4 (USP dan SSP) • Satu pembilang aturcara5 32 bit (PC) • Satu daftar status6 16 bit (SR) 2 data register 3 address register 4 stack pointer 5 program counter 6 status registerIf you found this book useful, donate to the Gaza fund
  • 17. 2.2. Model Pengaturcaraan 13 
 Rajah 2.1: Set daftar 68000. Daftar Data Daftar data mempunyai pelbagai fungsi tetapi fungsi utamanya ialah menyimpan data yang akan dan telah diproses oleh ALU. Setiap daftar data bersaiz 32 bit. Setiap bit diberi nombor kedudukan dengan bit 0 terletak paling bawah dan bit 31 terletak teratas. Secebis data bersaiz 32 bit (kata panjang) menggunakan keseluruhan daftar. Data bersaiz 16 bit (kata) hanya menggunakan 16 bit bawah, iaitu bit 0 hingga 15. Data bersaiz 8 bit (byte) hanya menggunakan bit 0 hingga 7. Rujuk Rajah 2.1. Garisan- garisan kelabu menunjukkan sempadan untuk byte, kata dan kata panjang. Kesemua daftar ini bersifat umum yakni apa sahaja yang boleh dilakukan terhadap sesuatu daftar boleh dilakukan terhadap 7 daftar lain. Sesetengah mikropemproses lain mempunyai daftar data yang setiap satu mempunyai fungsi tertentu — tetapi tidak halnya dengan 68000. Daftar Alamat Daftar alamat, A0 hingga A7, digelar sedemikian kerana maklumat yang disimpan di dalamnya melambangkan lokasi suatu objek dalam ingatan. Setiap daftar alamat bertindak sebagai penuding. Kita tidak boleh melakukan operasi byte di dalam daftar alamat kerana alamat hanya bersaiz 16 bit atau 32 bit. Walaupun setiap daftar besarnya 32 bit, 68000 hanya menggunakan 24 bit terendah apabila mencapai ingatan menghasilkan julat alamat sebesar 224 (16M) byte. Terdapat suruhan-suruhan 68000 yang beroperasi hanya terhadap daftar alamat. Operasi byte terhadap daftar alamat tidak dibenarkan. Apabila nilai 16 bit diisikan, ia dipanjangkan ke 32 bit. Daftar alamat serbaguna, A0 hingga A6, berkelakuan sama. Apa sahaja yang boleh dilakukan kepada sesuatu daftar boleh juga dilakukan kepada enam daftar lain. Disebabkan bas alamat 68000 adalah 24 bit, hanya 24 daripada 32 bit yang terdapat dalam daftar alamat digunakan untuk mencapai ingatan.If you found this book useful, donate to the Gaza fund
  • 18. 14 Bab 2. Ciri Perisian 68000 Penuding Tindanan Penuding tindanan merupakan daftar alamat A7 atau SP. Dalam kebanyakan operasi, kelakuannya sama seperti daftar A0 hingga A6. Bagaimanapun, penuding tindanan mempunyai fungsi yang lebih khusus iaitu untuk melaksanakan tindanan dan subrutin. Pemproses 68k mempunyai dua mod pemprosesan iaitu mod penyelia atau mod pengguna. Untuk menyokong dua mod ini, terdapat dua penuding tindanan iaitu penuding tindanan penyelia (SSP7 ) dan penuding tindanan pengguna (USP8 ). Penuding tindanan semasa diset menurut mod pemprosesan, dan dirujuk sebagai SP atau A7. Kewujudan dua mod dan dua penuding tindanan membolehkan 68k melaksanakan sistem pengoperasian9 . Sistem pengoperasian membolehkan sistem terus beroperasi jika terdapat ralat dalam perisian. Bagi sistem mudah, hanya SSP digunakan. Pembilang Aturcara Pembilang aturcara (PC) menuding kepada suruhan yang akan dilaksanakan. Daripada 32 bit yang ada di sini, hanya 24 bit dapat dikeluarkan ke bas alamat kerana itulah saiz fizikal bas alamat. Pemproses lanjutan dalam famili 68k menggunakan kesemua 32 bit. Untuk melaksanakan sesuatu suruhan, daftar PC diisi dengan alamat suruhan tersebut. Semasa suruhan dinyahkod oleh unit kawalan, PC ditambah supaya menuding ke suruhan yang berikutnya. Dengan itu, setelah suruhan dilaksanakan, CPU telah mempunyai maklumat yang cukup untuk memungut suruhan berikutnya. Daftar Status Daftar status dibahagikan kepada dua seksyen: byte sistem dan byte pengguna. Apabila 68000 berada dalam mod penyelia, keseluruhan daftar boleh dibaca dan diubah. Dalam mod pengguna, kedua-dua byte boleh dibaca tetapi hanya byte rendah boleh diubah. Byte Pengguna Bit-bit dalam daftar status yang paling kerap digunakan oleh pengaturcara ialah yang terdapat dalam byte pengguna. Byte pengguna yang dikenali juga sebagai daftar kod syarat10 (CCR). Setiap bit dalam CCR dinamai bendera. CCR menyimpan analisis operasi CPU terakhir. Fungsi setiap bendera diterangkan secara ringkas di sini: • C (carry) — Bernilai 1 apabila terdapat bawa semasa operasi tambah atau pinjam semasa operasi tambah. Dalam operasi anjak, ia mengandungi bit yang dianjak keluar dari kendalian. • V (overflow) — Bernilai 1 apabila limpahan aritmetik berlaku. Limpahan aritmetik berlaku apabila operasi terhadap integer bertanda melebihi ruang yang yang disediakan. • Z (zero) — Bernilai 1 apabila hasil operasi sifar. • N (negative) — Bernilai 1 apabila hasil operasi negatif. • X (extend) — Menyalin nilai C untuk operasi aritmetik. Dalam kebanyakan suruhan lain nilainya tidak berubah. Kesan setiap suruhan terhadap nilai bendera tidak sama. Terdapat suruhan yang mengubah kesemua bendera, ada juga yang mengubah hanya beberapa bit dan ada suruhan yang langsung tidak mengubah sebarang bendera. Untuk mengetahui kesan sesuatu suruhan terhadap CCR, set suruhan perlu dirujuk. 7 supervisor stack pointer 8 user stack pointer 9 operating system 10 condition codes registerIf you found this book useful, donate to the Gaza fund
  • 19. 2.3. Organisasi Ingatan 15 
 Rajah 2.2: Daftar status. Byte Sistem Bit-bit dalam byte sistem digunakan bagi mengawal operasi keseluruhan sistem. Butir terperinci penggunaan bit-bit ini diliputi dalam Bab 13. • I2 –I0 — Tiga bit serangkai ini dikenali sebagai bit topeng sampukan11 . Bit-bit ini mengawal tahap sampukan yang disambut oleh CPU. Jika dibenarkan melalui bit-bit ini, sampukan menyebabkan pemproses meninggalkan sebentar kerja yang sedang dilakukan bagi membuat suatu operasi yang lebih penting. Ciri ini membolehkan masa CPU digunakan dengan lebih optimum. Nilai I2 -I0 semasa reset ialah 111. • S (supervisor) — Pemproses 68000 boleh berada sama ada dalam mod pengguna atau mod penyelia. Jika S=1, pemproses berada dalam mod penyelia. Ada tiga perbezaan mod-mod ini. Dalam mod penyelia penunjuk tindanan yang digunakan ialah SSP, keseluruhan daftar status boleh dicapai, dan kesemua suruhan boleh digunakan. Dalam mod pengguna, penunjuk tindanan yang aktif ialah USP, hanya byte rendah daftar status boleh dicapai dan beberapa suruhan tidak boleh dilaksanakan. Nilai bit S semasa reset ialah 1. • T (trace) — Jika T = 1, 68000 beroperasi dalam mod surih: selepas setiap suruhan, pemproses masuk ke rutin nyahpepijat12 bagi menyemak nilai daftar CPU dan isi ingatan. Nilai bit T semasa reset ialah 0 dan suruhan-suruhan dilaksanakan secara normal. Bit T hanya boleh diset ke 1 jika sistem telah disiapkan dengan rutin khas bagi mengendalikannya. 2.3 Organisasi Ingatan Set suruhan 68000 boleh menyokong pemprosesan secara langsung lima jenis data. Lima jenis data ini ialah: • Bit • Digit BCD13 (4 bit setiap satu, tetapi diproses berpasangan) • Byte (8 bit) • Kata14 (16 bit) 11 interruptmask bits 12 debug routine 13 binary coded decimal 14 wordIf you found this book useful, donate to the Gaza fund
  • 20. 16 Bab 2. Ciri Perisian 68000 • Kata panjang15 (32 bit) Suruhan-suruhan boleh memproses satu atau lebih daripada jenis-jenis ini, tetapi tidak semua suruhan boleh memproses kesemua jenis. Jika sesuatu suruhan boleh memproses lebih daripada satu jenis data, imbuhan .B (byte), .W (word) atau .L (longword) ditambah kepada mnemonik suruhan untuk memilih saiz data yang dikehendaki. Bagaimana dengan aksara, rentetan, titik-apung dan sebagainya? Data daripada jenis ini dijana melalui pengaturcaraan. Suruhan-suruhan individu tidak boleh mengendalikan data ini sebaliknya turutan suruhan atau subrutin mesti ditulis jenis-jenis data ini. Ingatan digunakan untuk menyimpan aturcara dan data. Ini berbeza dengan daftar yang hanya boleh menyimpan data. Ingatan lebih perlahan tetapi lebih besar berbanding daftar. Bas alamat peranti 68000 saiznya 24 bit menjadikan 68000 boleh mencapai 224 = 24 x 220 = 16 megabyte ingatan. Ia boleh dilihat sebagai satu senarai petak atau sel, yang setiap satu menyimpan satu nilai 8 bit atau byte. Sel ingatan dinombor dari sifar sehingga muatan maksimum ingatan. Satu megabyte bersamaan 220 atau 1048576. Oleh itu 16 megabyte mengandungi 167771216 kedudukan atau alamat. Rajah 2.3(a) menunjukkan peta ingatan yang menunjukkan satu byte bagi setiap alamat. Alamat ingatan biasanya dituliskan dalam perenambelasan. Dalam dokumentasi Motorola/Freescale, nombor perenambelasan dinyatakan dengan simbol $. Jadi julat alamat 68000 ialah dari $000000 (0) 15 longword (a) Satu byte sebaris. (b) Satu kata sebaris. Rajah 2.3: Dua kaedah mengatur ingatan. 
 Rajah 2.4: Menyimpan kata panjang dalam ingatanIf you found this book useful, donate to the Gaza fund
  • 21. 2.4. Pengenalan kepada Set Suruhan 68000 17 hingga $FFFFFF (16777121610 ). Bas data 68000 saiznya 16 bit. Ini menjadikan pemproses 68000 mampu mencapai sejumlah 16 bit data ingatan dalam satu langkah. Setiap kata hanya boleh disimpan bermula dari alamat genap. Oleh itu, kata pertama dalam ingatan mempunyai alamat $000000, kata kedua di $000002, kata ketiga di $000004 dan seterusnya. Jika kita menganggap ingatan hanya mengandungi kata, julat alamat ingatan ialah $0000000 hingga $FFFFFE. Peta ingatan boleh dilukis semula untuk memaparkan satu kata setiap baris. Alamat-alamat berbeza sebanyak dua dari satu baris ke baris berikutnya. Rajah 2.3(b) memaparkan peta ingatan yang standard dalam pengaturcaraan 68000. Sama seperti kata, kata panjang juga mesti bermula dari alamat genap. Alamat-alamat bagi kata-kata panjang bersebelahan berbeza sebanyak empat. Jika kata panjang pertama mempunyai alamat n, kata panjang akan berada di alamat n+4, dan seterusnya. Bagaimanapun, n ialah sebarang nilai genap. Rajah 2.4 menunjukkan pandangan ingatan semasa menyimpan kata-kata panjang. Kata dan kata panjang tidak boleh bermula dari alamat ganjil. Cip 68000 menghalang operasi baca atau tulis yang melanggar syarat ini (contohnya, cuba membaca kata dari alamat ganjil). Jika operasi seperti ini dicuba, suatu kekecualian terjadi kerana terdapat ralat alamat. Bab 13 akan menerangkan lebih lanjut mengenai konsep kekecualian. Maklumat yang disimpan dalam ingatan terdiri daripada data dan suruhan. Data berbentuk nombor yang boleh diproses dengan operasi aritmetik atau aksara yang boleh diolah sebagai rentetan. Suruhan memberitahu pemproses bagaimana data perlu diproses. Semua data dan aturcara berbentuk nombor perduaan dan pengaturcara perlu memastikan komputer tidak mengelirukan suruhan dengan data. 2.4 Pengenalan kepada Set Suruhan 68000 Set suruhan menentukan operasi yang boleh dipilih untuk fungsi-fungsi pemindahan data, aritmetik, kawalan aturcara dan sebagainya Mikropemproses 68000 mempunyai cuma 54 suruhan asas, tetapi bila dikira kesemua variasinya, jumlahnya melebihi 1000! Setiap suruhan mesti mengandungi: • Kod operasi • Saiz kendalian • Kedudukan kendalian Kod operasi atau opkod menentukan operasi yang perlu dilakukan. Saiz kendalian menentukan sama ada operasi bertindak kepada data byte, kata atau kata panjang. Kedudukan kendalian memberitahu CPU alamat berkesan kendalian iaitu bagaimana kendalian dicapai, sama ada dalam daftar atau ingatan. Jadual 2.2 menyenaraikan set suruhan 68000. Setiap mnemonik melambangkan satu kod operasi. Satu huruf menentukan panjang kendalian sama ada byte (B), kata (W) atau kata panjang (L). Contohnya, suruhan bagi memindahkan kendalian 16 bit dari kedudukan punca ke destinasi berupa: MOVE.W punca,destinasi yang mana punca dan destinasi menentukan kedudukan kendalian. Setiap suruhan yg boleh dilakukan oleh 68000 mempunyai opkod berlainan. Suruhan-suruhan boleh dikategorikan menurut jumlah kendalian iaitu dua kendalian, satu kendalian atau tiada kendalian langsung. Berikut adalah contoh tiga suruhan yang sah: MOVE.W D0,D1 ;suruhan dua kendalian CLR.W D1 ;suruhan satu kendalian NOP ;suruhan tanpa kendalian Suruhan-suruhan selalunya dikategorikan menurut operasi asas yang dilakukannya:If you found this book useful, donate to the Gaza fund
  • 22. 18 Bab 2. Ciri Perisian 68000 • pemindahan data • aritmetik • logik • putar dan anjak • olahan bit • BCD • kawalan aturcara • kawalan sistem Sesetengah suruhan mempunyai variasi yang beroperasi secara yang lebih khusus. Jadual 2.3 menunjukkan variasi suruhan asas. Suruhan-suruhan akan diliputi secara berperingkat-peringkat. Suruhan pemindahan data diliputi dalam Bab 3 (mod alamat). Suruhan aritmetik, logik, putar dan anjak, olahan bit dan BCD merupakan suruhan yang mengubah atau memproses data. Ini diliputi dalam Bab 5 (suruhan olahan data). Suruhan kawalan aturcara diliputi dalam Bab 6 dan Bab 7. Akhir sekali, disebabkan suruhan kawalan sistem lebih khusus, ia diliputi dalam Bab 13. 2.5 Beberapa Suruhan Asas Untuk memberi pengenalan kepada set suruhan 68000, tiga suruhan asas diterangkan di bawah iaitu CLR, MOVE dan ADD. Suruhan CLR Suruhan CLR (clear) ialah suruhan satu kendalian dengan format CLR.s <ea> yang mana s ialah B, L, atau W dan <ea> adalah alamat berkesan destinasi. Operasi ini memadam atau meletakkan sifar di destinasi yang ditetapkan. Operasi ini boleh ditakrifkan secara padat menggunakan RTL16 seperti berikut 0 → destinasi yang bermaksud gantikan destinasi dengan sifar. Keterangan lengkap mengenai suruhan CLR didapati dalam Users Manual. Keterangan mengenai suruhan menjelaskan destinasi yang dibenarkan, dalam bentuk mod alamat17 . Ciri-ciri lain yang diperincikan termasuk saiz data yang dibenarkan bagi sesuatu suruhan, kesan terhadap CCR, dan format bahasa mesin. 16 Register Transfer Language 17 addressing modeIf you found this book useful, donate to the Gaza fund
  • 23. 2.5. Beberapa Suruhan Asas 19 Jadual 2.2: Set suruhan 68000. Mnemonik Makna Fungsi ABCD Add decimal with extend Tambah BCD dengan bendera X ADD Add binary Tambah AND Logical AND AND logik ASL Arithmetic shift left Anjak aritmetik kiri ASR Arithmetic shift right Anjak aritmetik kanan Bcc Branch conditionally Cabang bersyarat BCHG Bit test and change Uji bit dan tukar BCLR Bit test and clear Uji bit dan padam BRA Branch always Cabang sentiasa BSET Bit test and set Uji bit dan set BSR Branch to subroutine Cabang ke subrutin BTST Bit test Uji bit CHK Check register with bounds Semak daftar dengan batasan CLR Clear operand Padam kendalian CMP Compare Banding DBcc Decrement and branch conditionally Susut dan cabang bersyarat DIVS Signed divide Bahagi bertanda DIVU Unsigned divide Bahagi tak bertanda EOR Exclusive OR ATAU eksklusif EXG Exchange registers Tukarganti daftar EXT Sign extend Panjangkan tanda JMP Jump to effective address Lompat JSR Jump to subroutine Lompat ke subrutin LEA Load effective address Isi alamat berkesan LINK Link stack Kait tindanan LSL Logical shift left Anjak logik kiri LSR Logical shift right Anjak logik kanan MOVE Move source to destination Alih punca ke destinasi MULS Sign multiply Darab bertanda MULU Unsigned multiply Darab tak bertanda NBCD Negate decimal with extend Nafi BCD dengan bendera X NEG Negate Nafi NOP No operation Tiada operasi NOT One’s complement Pelengkap satu OR Logical OR OR PEA Push effective address Letak alamat ke tindanan RESET Reset external devices Reset peranti luar ROL Rotate left Putar kiri ROR Rotate right Putar kanan ROXL Rotate left through extend Putar kiri menerusi X ROXR Rotate right through extend Putar kanan menerusi X RTE Return from exception Kembali daripada kekecualian RTR Return and restore Kembali dan perbetul RTS Return from subroutine Kembali daripada subrutin SBCD Subtract decimal with extend Tolak BCD dengan bendera X Scc Set conditionally Set bersyarat STOP Stop processor Henti pemproses SUB Subtract binary Tolak SWAP Swap data register halves Tukarganti atas/bawah daftar TAS Test and set operand Uji dan set kendalian TRAP Trap Perangkap TRAPV Trap on overflow Perangkap jika limpahan TST Test operand Uji kendalian UNLK Unlink stack Buang kaitan tindananIf you found this book useful, donate to the Gaza fund
  • 24. 20 Bab 2. Ciri Perisian 68000 Jadual 2.3: Variasi set suruhan 68000. Mnemonik Makna Fungsi ADDA Add address Tambah alamat ADDI Add immediate Tambah data terdekat ADDQ Add quick Tambah pantas ADDX Add with extend Tambah dengan bendera X ANDI Logical AND immediate AND data terdekat ANDI to CCR Logical AND immediate to CCR AND data terdekat dengan CCR ANDI to SR Logical AND immediate to SR AND data terdekat dengan SR CMPA Compare address Banding alamat CMPI Compare immediate Banding data terdekat CMPM Compare memory Banding ingatan EORI Logical exclusive OR immediate OR eksklusif data terdekat Logical exclusive OR immediate OR eksklusif data terdekat EORI to CCR to CCR dengan CCR Logical exclusive OR immediate OR eksklusif data terdekat EORI to CCR to SR dengan SR MOVE from SR Move from SR to destination Alih daripada SR ke destinasi MOVE to CCR Move from source to CCR Alih daripada punca ke CCR MOVE to SR Move from source to SR Alih daripada punca ke SR Alih penunjuk tindanan MOVE USP Move user stack pointer pengguna MOVEA Move address Alih ke daftar alamat MOVEM Move multiple registers Alih berbilang daftar MOVEP Move peripheral data Alih data periferal MOVEQ Move quick Alih pantas NEGX Negate with extend Nafi dengan bendera X ORI Logical OR immediate OR data terdekat ORI to CCR Logical OR immediate to CCR OR data terdekat dengan CCR ORI to SR Logical OR immediate to SR OR data terdekat dengan SR SUBA Subtract address Tolak daripada daftar alamat SUBI Subtract immediate Tolak data terdekat SUBQ Subtract quick Tolak pantas SUBX Subtract with extend Tolak dengan bendera X Contoh: Jika daftar D0 mengandungi $FA1234DE, apakah isinya selepas suruhan CLR.W D1? Penyelesaian: Suruhan CLR.W D1 memadam hanya kata rendah D1. Kata atas tidak terjejas. Oleh itu, D1 menjadi $FA120000. Suruhan MOVE Suruhan pemindahan data terpenting ialah MOVE (gerak). Suruhan ini mempunyai dua kendalian dengan format MOVE.s <sea>,<dea> yang mana s ialah B, L atau W. Kendalian <sea> ialah alamat berkesan punca dan kendalian <dea> ialah alamat berkesan destinasi. Suatu salinan data di kendalian punca disalin ke kendalian destinasi.If you found this book useful, donate to the Gaza fund
  • 25. 2.6. Pengenalan kepada Mod Alamat 21 Walaupun suruhan ini diberi nama gerak, operasi sebenarnya menyalin data kerana kendalian punca tidak berubah. Suruhan ini boleh memindahkan data antara daftar dengan ingatan. RTL untuk suruhan ini ialah punca → destinasi yang bermaksud data dari punca dipindahkan ke destinasi. Suruhan ADD Salah satu suruhan aritmetik ialah ADD (tambah). Suruhan ini mempunyai dua kendalian dengan format ADD.s <sea>,<dea> yang mana s ialah B, L atau W. RTL untuk suruhan ini ialah punca + destinasi → destinasi Kendalian punca ditambahkan kepada kendalian destinasi kemudian hasil tambah disimpan di kendalian destinasi. Oleh itu, nilai kendalian destinasi berubah selepas suruhan dilaksanakan. 2.6 Pengenalan kepada Mod Alamat Mod alamat ialah penentu bagi mendapatkan data yang terletak dalam daftar atau dalam ingatan. Mod alamat memberitahu pemproses bagaimana ia mendapatkan kedudukan kendalian sebenar. Kedudukan sebenar lebih dikenali sebagai alamat berkesan18 dan dijana semasa perlaksanaan suruhan. Peranti 68000 adalah pemproses berkuasa tinggi dengan mod-mod alamat yang canggih. Ini memudahkan pengaturcaraan bahasa himpunan kerana sesuatu kedudukan data boleh dicapai dengan menggunakan jumlah suruhan yang sedikit. Pemproses 68000 mempunyai 14 mod alamat kesemuanya yang boleh dikumpulkan kepada enam mod asas. • Daftar langsung19 — Alamat berkesan ialah daftar yang dinyatakan. • Mutlak20 — Alamat berkesan terkandung di dalam suruhan dan digunakan secara langsung (mutlak) tanpa perubahan. • Daftar tak langsung21 — Alamat berkesan terletak di dalam daftar. Kendalian terletak di alamat yang terdapat di dalam daftar. • Terdekat22 — Kendalian adalah sebahagian daripada suruhan dan tidak perlu dicari lagi. • Relatif pembilang aturcara23 — Alamat berkesan dikira dengan mengambil nilai PC dan menambah atau menolak nilai sesaran24 . Harus diingati PC sentiasa menuding ke suruhan berikutnya. • Tersirat25 — Kendalian ialah daftar yang dinyatakan oleh mnemonik dalam suruhan seperti SR, USP, SSP atau PC. 18 effective address atau ringkasnya ea 19 register direct 20 absolute 21 register indirect 22 immediate 23 program counter relative 24 offset 25 inherentIf you found this book useful, donate to the Gaza fund
  • 26. 22 Bab 2. Ciri Perisian 68000 Pengalamatan Daftar Langsung Dalam mod pengalamatan daftar langsung alamat atau lokasi kendalian dinyatakan secara langsung sebagai sebagai sebahagian daripada suruhan. Oleh itu, tiada sebarang pengiraan diperlukan bagi mendapatkan alamat berkesan. Dalam pengalamatan daftar langsung, kendalian terletak di dalam suatu daftar data atau alamat. Format am bagi suruhan CLR menggunakan pengalamatan daftar data langsung ialah CLR.s Dn yang mana kendalian dengan panjang s yang dipadam terletak dalam daftar Dn, yang bermakna salah satu daripada D0, D1, , D7. Oleh itu CLR.W D1 memadam kata rendah dalam daftar D1. Suruhan MOVE memerlukan dua kendalian dengan format MOVE.s Dm,Dn Oleh itu, suruhan MOVE.B D0,D1 menyalin D0[7:0] ke D1[7:0]. Pengalamatan Mutlak Dalam mod pengalamatan mutlak alamat atau lokasi kendalian dinyatakan secara langsung sebagai sebagai sebahagian daripada suruhan. Oleh itu, tiada sebarang pengiraan diperlukan bagi mendapatkan alamat berkesan. Dalam pengalamatan mutlak, kendalian terletak di dalam suatu lokasi ingatan. Kendalian kata dan kata panjang mesti diletakkan dalam lokasi genap. Format am bagi suruhan CLR menggunakan pengalamatan mutlak ialah CLR.s XXXX yang mana kendalian bersaiz s yang dipadam terletak dalam lokasi XXXX di ingatan. Oleh itu CLR.W $2000 memadam kata yang terletak di alamat 2000 perenambelasan. Nilai XXXX dianggap perpuluhan kecuali jika diawali oleh simbol $ untuk menandakan bahawa ini ialah nilai perenambelasan. Suruhan MOVE.W 2000,D2 bermakna salin 16 bit dari lokasi 2000 perpuluhan ke D2[15:0]. Pengalamatan Tak Langsung Dalam mod pengalamatan tak langsung, suatu daftar alamat digunakan sebagai punca alamat suatu kendalian dalam ingatan. Isi daftar alamat dianggap penuding ke lokasi tersebut. Kendalian kata dan kata panjang mesti diletakkan dalam lokasi genap. Mod ini dikenali dengan tanda kurungan yang mengelilingi nama satu daftar alamat seperti dalam suruhan berikut CLR.B (A0) Dalam suruhan ini, satu byte yang terletak di ingatan akan dipadam. Alamat byte ialah apa-apa nilai yang terdapat dalam daftar A0.If you found this book useful, donate to the Gaza fund
  • 27. 2.7. Format Suruhan Mesin 23 Pengalamatan Relatif Dalam mod pengalamatan relatif nilai alamat kendalian didapati dengan menambah suatu sesaran kepada nilai dalam pembilang aturcara. Alamat berkesan didapati dengan melalui ungkapan PC + sesaran → ea Nilai sesaran mempunyai tanda positif atau negatif. Simbol * merujuk kepada nilai semasa pembilang aturcara. Oleh itu BRA *+2 menyebabkan operasi cabang ke alamat dua byte ke hadapan. Pengalamatan Terdekat Dalam mod pengalamatan terdekat menyatakan suatu nilai malar. Nilai ini terletak di dalam suruhan. Contohnya MOVE.B #’m’,D2 Menyalin nilai ASCII untuk m ke dalam daftar D0. Simbol # difahami oleh penghimpun untuk menandakan pengalamatan terdekat. Mod terdekat tidak dibenarkan sebagai kendalian destinasi. 2.7 Format Suruhan Mesin Pemproses 68000 melaksanakan aturcara yang mengandungi suruhan bahasa mesin. Pengaturcara jarang-jarang menulis aturcara dalam bahasa mesin kerana adalah lebih produktif menulis aturcara bahasa himpunan kemudian menterjemahkannya ke bahasa mesin. Bagaimanapun, kefahaman men- genai format bahasa mesin membolehkan pengaturcara mempergunakan keupayaan mikropemproses sepenuhnya. Setiap suruhan mesin untuk 68000 terdiri daripada sekurang-kurangnya satu kata 16 bit. Ia boleh mengandungi sehingga empat kata lanjutan. Kata pertama dalam suruhan, iaitu kata operasi26 , mengandungi maklumat tentang operasi, saiz data dan mod alamat. Kata lanjutan ditambah kepada suruhan untuk kendalian terdekat, alamat berkesan punca dan alamat berkesan destinasi. Rujuk Rajah 2.5 untuk susun atur suatu suruhan. Bit-bit yang mentakrifkan suruhan bermula dari bit tertinggi (bit 15) kata operasi. Jumlah bit sebenar bagi takrifan suruhan bergantung kepada suruhan. Pemproses 68000 akan menyemak dahulu nibel tertinggi (bit 15:12) . Maksud nibel ini ditunjukkan di Jadual 2.4. Baki bit dalam kata operasi digunakan untuk menjelaskan lagi operasi yang perlu dilakukan. 26 control word 
 Rajah 2.5: Format suruhan mesinIf you found this book useful, donate to the Gaza fund
  • 28. 24 Bab 2. Ciri Perisian 68000 Jadual 2.4: Kod operasi pemproses 68000. Bit 15:12 Operasi Bit 15:12 Operasi 0000 Olahan bit/MOVEP/Terdekat 1000 OR/DIV/SBCD 0001 Gerak byte 1001 SUB/SUBX 0010 Gerak kata panjang 1010 Emulator A 0011 Gerak kata 101 CMP/EOR 0100 Pelbagai 1100 AND/MUL/ABCD/EXG 0101 ADDQ/SUBQ/Scc/DBcc 1101 ADD/ADDX 0110 Bcc/BSR 1110 Anjak/Putar 0111 MOVEQ 1111 Emulator F Rajah 2.6 menunjukkan format am untuk suruhan satu kendalian. Bit 15:6 mentakrifkan operasi yang akan dilakukan. Bit 5:0 ialah medan alamat berkesan yakni maklumat mengenai kedudukan kendalian. Ia terbahagi kepada medan mod dan medan daftar. Pemproses 68000 mempunyai 14 mod alamat. Salah satu mod asas ialah mod daftar langsung, yang mana maklumat yang diolah terletak dalam daftar data (D0-D7). Mod daftar langsung ditentukan oleh bit 000 dalam medan mod dan nombor daftar (0-7) dalam medan daftar. Rujuk Jadual 2.5 untuk mod-mod alamat yang dibenarkan. 
 Rajah 2.6: Format am suruhan mesin satu kendalian. Jadual 2.5: Mod alamat bagi MC68000 Mod Daftar Mod alamat Sintaks 000 rrr Daftar data langsung Dn 001 rrr Daftar alamat langsung An 010 rrr Daftar alamat tak langsung (ARI) (An) 011 rrr ARI dengan pascatokok (An)+ 100 rrr ARI dengan prasusut -(An) 101 rrr ARI dengan ofset N(An) 110 rrr ARI dengan ofset dan indeks N(An,Xm) 111 000 Mutlak pendek $XXXX 111 001 Mutlak panjang $XXXXXXXX 111 010 PC relatif dengan ofset N(PC) 111 011 PC relatif dengan ofset dan indeks N(PC,Xm) 111 100 Terdekat #$XXXX Untuk menunjukkan bagaimana pola bit suruhan mesin didapati, kita kaji semula suruhan CLR, MOVE dan ADD.If you found this book useful, donate to the Gaza fund
  • 29. 2.7. Format Suruhan Mesin 25 Suruhan Mesin untuk CLR Rajah 2.7a ialah format suruhan mesin untuk operasi CLR. Pola 0100 dalam bit 15:12 digunakan oleh berbagai-bagai suruhan. Oleh itu, pola 0010 dalam bit 11:8 digabungkan dengan pola 0100 dalam nibel teratas mentarifkan operasi CLR. Rajah 2.7(b) menunjukkan format mesin untuk suruhan CLR.B D0. 
 (a) Format am untuk CLR. 
 (b) Contoh bagi suruhan CLR.B D0. Rajah 2.7: Suruhan mesin untuk CLR. Suruhan Mesin untuk MOVE Suruhan MOVE merupakan suruhan dua kendalian dengan satu kendalian punca dan satu kendalian destinasi. Format am suruhan MOVE ditunjukkan dalam Rajah 2.8(a). Terdapat tiga format berbeza untuk setiap saiz data yang dibenarkan. Dalam suruhan MOVE, alamat berkesan untuk kendalian punca mempunyai format yang sama dengan alamat berkesan suruhan satu kendalian, iaitu medan mod di kiri (bit 5:3) dan medan daftar di kanan (bit 2:0). Untuk kendalian destinasi, kedudukan medan terbalik, iaitu medan mod di kanan (bit 8:6) dan medan daftar di kiri (11:9). Keadaan ini mudah mengelirukan jika kita bekerja dalam bahasa mesin sepenuhnya, tetapi itulah hasil kerja perekabentuk 68000 akibat ingin memudahkan mikrokodnya. 
 (a) Format am untuk MOVE. 
 (b) Contoh bagi suruhan MOVE.W D7,D0. Rajah 2.8: Suruhan mesin untuk MOVE.If you found this book useful, donate to the Gaza fund
  • 30. 26 Bab 2. Ciri Perisian 68000 Rajah 2.8(b) menunjukkan format mesin untuk suruhan MOVE.W D7,D0 iaitu 0011 0000 0000 0111. Suruhan ini memindahkan kata bawah D7 ke kata bawah D0. Kata bawah D0 akan berubah manakala kata atas D0 serta keseluruhan D7 tidak berubah. Suruhan Mesin untuk ADD Suruhan ADD adalah suruhan dua kendalian tetapi format mesinnya tidak serupa dengan suruhan MOVE. Untuk suruhan ADD, salah satu atau kedua-dua kendaliannya mestilah daftar data. Nibel teratas kata operasi ialah 1101. Bit 11:9 menentukan daftar data yang digunakan. Bit 8:6 ialah medan opmod yang menentukan mod operasi. Jika destinasi hasil tambah ialah daftar data, medan opmod bernilai 000, 001 atau 010 untuk kendalian byte, kata atau kata panjang. Jika destinasi hasil tambah bukan daftar data, medan opmod bernilai 100, 101 atau 110. 
 (a) Format am untuk ADD. 
 (b) Contoh bagi suruhan ADD.W D1,D0. Rajah 2.9: Suruhan mesin untuk ADD.If you found this book useful, donate to the Gaza fund
  • 31. 2.8. Latihan 27 2.8 Latihan 1. Apakah saiz bas data dan saiz bas alamat 68000? 2. Berapakah jumlah bit dalam daftar status 68000 yang digunakan? Berapa bitkah yang boleh digunakan dalam mod pengguna? 3. Apakah daftar yang mesti diberikan satu nilai awal sebelum melaksanakan suatu aturcara? 4. Apakah nilai bendera C dalam jika daftar status berisi nilai $2705? 5. Kata panjang $01020305 terletak di alamat $2020. Byte $03 terletak dalam alamat mana? 6. Berikan format mesin untuk suruhan CLR.B D7. 7. Berikan format mesin untuk suruhan MOVE.L D5,D3. 8. Berikan format mesin untuk suruhan ADD.W D2,D3. 9. D0 berisi $11223344 sebelum MOVE.W #$2211,D0 dilaksanakan. Apakah isinya selepas suruhan ini? 10. D0 berisi $49828934 dan D1 berisi $92385938 sebelum suruhan MOVE.B D0,D1 dilaksanakan. Apakah nilai kedua-dua daftar selepas suruhan ini? 11. Apakah yang salah dengan suruhan MOVE.W #200,$FFF? 12. Suatu nilai kata panjang terletak di alamat $2020. Apakah alamat kata panjang yang menuruti nilai ini? 13. D4 berisi $FFFFFFF sebelum suruhan MOVE #1,D4 dilaksanakan. Apakah isinya selepas suruhan ini? 14. Apakah perbezaan antara suruhan MOVE.W #$2000,D0 dengan MOVE.W $2000,D0? 15. Jika alamat $1000 berisi 1919 dan D1 berisi $20202020, apakah nilai D1 selepas suruhan ADD $1000,D1? 16. Tukar suruhan mesin $4241 ke bentuk bahasa himpunan setara. 17. Tukar suruhan mesin $3007 ke bentuk bahasa himpunan setara. 18. Dengan menggunakan nilai perenambelasan untuk kesemua jawapan anda, tentukan operasi dan lokasi yang terbabit dalam suruhan-suruhan berikut (a) CLR.L $8000 (b) MOVE.W 2000,3000 (c) MOVE.W $2000,D0 (d) MOVE.W 2000,D0If you found this book useful, donate to the Gaza fund
  • 32. 28 Bab 2. Ciri Perisian 68000If you found this book useful, donate to the Gaza fund
  • 33. Bab 3 Bahasa Himpunan Objektif • Menerangkan proses penulisan aturcara • Penggunaan penghimpun • Menulis aturcara asas Pengenalan Bab ini memperkenalkan anda kepada proses penulisan aturcara untuk pemproses 68k. Anda akan meli- hat langkah-langkah dalam penulisan aturcara bahasa himpunan. Seterusnya anda akan diperkenalkan kepada penyata-penyata bahasa himpunan. 3.1 Pembangunan Perisian Pembangunan perisian adalah proses bagi menyediakan aturaca yang boleh dilaksanakan dalam mikropemproses. Tugas yang perlu mikropemproses lakukan harus ditukarkan ke bentuk bahasa mesin yang difahami oleh pemproses. Terdapat beberapa fasa iaitu analisis masalah, pengekodan aturcara, dan perlaksanaan. Analisis Masalah Analisis masalah adalah fasa bagi menukarkan tugas yang perlu dilakukan kepada suatu bentuk abstrak yang tidak khusus kepada mana-mana mesin atau pemproses. Dalam fasa ini, pengaturcara akan menghasilkan sama ada carta alir (flowchart) atau pseudokod. Salah satu keadah ini boleh digunakan untuk tujuan rekod dan dokumentasi. Carta alir berbentuk grafik dan lebih mudah difahami. Walaupun boleh dihasilkan dengan tangan dengan cepat, carta alir dalam bentuk salinan lembut agak sukar dihasilkan tanpa perisian yang khusus. Pseudokod pula adalah program olok-olok yang biasanya ditulis dalam bahasa pengaturcaraan yang menyerupai C atau Pascal. Ia tidak boleh dilaksanakan terus kerana ia menggunakan sintaks C atau Pascal yang dipermudahkan. Kaedah pseudokod lebih mudah bagi penulisan dokumentasi menggunakan perisian pemprosesan perkataan. Pengekodan Fasa kedua dalam penulisan adalah pengekodan. Dalam fasa ini, pengaturcara menyediakan aturcara dalam bentuk fail punca1 menggunakan penyunting. Aturcara yang terkandung dalam fail ini boleh 1 source file 29If you found this book useful, donate to the Gaza fund
  • 34. 30 Bab 3. Bahasa Himpunan disebut kod punca2 kerana ia berbentuk kod yang tidak difahami oleh orang yang di dalam bidang ini. Penyunting adalah sebarang perisian PC yang boleh menyediakan fail teks ASCII seperti NotePad atau perisian khusus bagi pengatucara seperti SciTE atau Programmers Notepad. Penggunaan pemprosesan perkataan seperti Word boleh digunakan tetapi ia terlalu berat bagi tugas yang mudah ini dan langkah tambahan selalunya diperlukan untuk memastikan fail yang terhasil adalah dalam bentuk teks ASCII. Selepas fail punca disediakan, ia mesti dihimpun bagi menghasilkan aturcara yang difahami komputer. Rajah 3.1: Penghimpun dan fail-fail yang terlibat dengannya. Di dalam penulisan aturcara, kerapkali berlaku kesilapan atau nama teknikalnya, ralat. Terdapat dua jenis ralat iaitu ralat sintaks3 dan ralat semantik4 . Ralat sintaks adalah kesilapan dalam penulisan aturcara seperti terlebih atau terkurang koma. Ralat ini dikesan awal dan mudah diperbaiki. Ralat semantik adalah kesilapan logik seperti melakukan sesuatu operasi apabila ia tidak sepatutnya berlaku. Ralat ini hanya akan ketara apabila aturcara dilaksanakan. Setiap ralat perlu diperbetulkan menggunakan penyunting. Setelah fail punca dihasilkan, ia diproses dengan penghimpun. Rajah 3-1 menunjukkan fail-fail yang terlibat dalam penggunaan penghimpun. Fail punca dihimpun bagi menghasilkan dua fail: fail objek5 dan fail senarai6 . Fail objek mengandungi aturcara bahasa mesin yang boleh dilaksanakan. Fail senarai berbentuk rekod yang melaporkan dengan terperinci kaitan antara maklumat dalam fail punca dengan fail objek. Fail senarai tidak semestinya dijana setiap masa tetapi ia berguna untuk dokumentasi dan untuk mengesan ralat. Sekiranya terdapat ralat sintaks, fail objek tidak dihasilkan dan pengaturcara boleh merujuk fail senarai untuk mengetahui di mana kesilapan berlaku. Ralat semantik sebaliknya tidak boleh dikesan oleh penghimpun, dan pengaturcara perlu merujuk fail senarai semasa melaksanakan aturcara. Jika tidak terdapat ralat sintaks, pengaturcara boleh ke fasa terakhir iaitu fasa pengujian. Dalam fasa ini, aturcara dilaksanakan untuk mencari ralat semantik, jika ada, dan memantau prestasi aturcara. Contoh Fail Punca, Senarai dan Objek Berikut adalah contoh aturcara punca: *----------------------------------------------------------- * Program : SALAM * Written by : Muhammad Mun’im A. Zabidi * Date : 2009-01-04 * Description: Program yang memaparkan satu mesej ringkas *----------------------------------------------------------- START ORG $1000 LEA STRING,A1 2 object code 3 syntax error 4 semantic error 5 object file 6 listing fileIf you found this book useful, donate to the Gaza fund
  • 35. 3.1. Pembangunan Perisian 31 MOVE.W #13,D0 TRAP #15 MOVE.B #9,D0 TRAP #15 Halt Simulator STRING DC.B ’SALAM DARI DUNIA MIKRO’,0 END START Aturcara di bawah ialah aturcara punca yang telah dihimpun. 001000 Starting Address Assembler used: EASy68K Editor/Assembler v3.7.5 Jan-19-2008 Created On: 1/4/2009 7:33:41 AM 000000 1 *--------------------------------------------------------- 000000 2 * Program : SALAM 000000 3 * Written by : Muhammad Mun’im A. Zabidi 000000 4 * Date : 2009-01-04 000000 5 * Description: Program yang memaparkan satu mesej ringkas 000000 6 *--------------------------------------------------------- 001000 7 START ORG $1000 001000 8 001000 43F9 00001012 9 LEA STRING,A1 001006 303C 000D 10 MOVE.W #13,D0 00100A 4E4F 11 TRAP #15 Rajah 3.2: Langkah-langkah dalam pengekodan dan pengujian bahasa himpunan.If you found this book useful, donate to the Gaza fund
  • 36. 32 Bab 3. Bahasa Himpunan 00100C 12 00100C 103C 0009 13 MOVE.B #9,D0 001010 4E4F 14 TRAP #15 Halt Simulator 001012 15 001012= 53 41 4C 41 ... 16 STRING DC.B ’SALAM DARI DUNIA MIKRO’,0 001029 17 001029 18 END START No errors detected No warnings generated SYMBOL TABLE INFORMATION Symbol-name Value ------------------------- START 1000 STRING 1012 Kod mesin disimpan di dalam fail berbentuk ASCII perenambelasan. Bagi pemproses Motorola, fail ini dinamai fail S-record. Berikut adalah aturcara di atas dalam bentuk S-record. S021000036384B50524F47202020313143524541544544204259204541535936384B6D S125100043F900001012303C000D4E4F103C00094E4F53414C414D20444152492044554E494125 S10A1022204D494B524F0021 S804001000EB Jadual 3.1 menerangkan makna maklumat dalam setiap S-record. Jadual 3.1: Makna data dalam fail S-record. Medan Keterangan Jenis Rekod S0 = rekod pertama S1 = rekod data (dengan alamat 16 bit) S2 = rekod data (dengan alamat 24 bit) S8 = rekod terakhir (fail dengan rekod-rekod S2 S9 = rekod terakhir (fail dengan rekod-rekod S1) Kiraan byte Jumlah byte perenambelasan yang menuruti dalam rekod semasa Alamat Alamat ingatan pertama untuk byte data dalam rekod semasa Byte Data Data perenambelasan Jumlah Semak Nilai yang menghasilkan FF apabila ditambahkan kepada hasil tambah kesemua byte sebelumnya (mod 256, tidak termasuk Jenis Rekod) Pengujian Aturcara Fasa pengujian bertujuan mengesan kesilapan semantik. Dalam fasa ini, aturcara diberi pelbagai input untuk memastikan ia berfungsi seperti dijangka. Ambil contoh suatu aturcara mengambil dua input, menambah kedua-duanya kemudian mengeluarkan hasil tambah. Jika hasil tambah yang sepatutnya tidak dikeluarkan, aturcara sudah pasti mempunyai masalah dari logik aturcara. Aturcara ini perlu disunting semula, dihimpun dan dilaksanakan semula sehingga hasil yang sepatutnya diperolehi. Setelah aturcara melepasi fasa pengujian, bolehlah ia digunakan dalam keadaan muktamad. Jika aturcara disasarkan untuk suatu produk, kini ia boleh dikilangkan dalam kuantiti yang banyak.If you found this book useful, donate to the Gaza fund
  • 37. 3.2. Perlaksanaan Aturcara 33 3.2 Perlaksanaan Aturcara Terdapat tiga kaedah melaksanakan aturcara bahasa himpunan iaitu: • Komputer papan tunggal • Simulator • Sistem sebenar Kaedah pertama melaksanakan aturcara 68k ialah menggunakan komputer papan tunggal (SBC7 ). Contoh komputer begini ialah Flight68K. Kaedah ini amat sesuai bagi pembelajaran bahasa himpunan 68k tetapi kos SBC terbabit mengehadkan jumlah pelajar yang boleh menggunakannya pada sesuatu masa. Untuk melaksanakan kod objek, ia dipindahkan dari PC melalui liang bersiri ke dalam papan tersebut. SBC mengandungi aturcara monitor yang menerima aturcara kita lalu mengisikannya ke dalam RAM. Suruhan-suruhan dalam RAM boleh dilaksanakan satu persatu supaya kesan setiap suruhan boleh disemak. Sekiranya ada ralat semantik, kod punca perlu disunting dan dihimpun sekali lagi. Kaedah kedua adalah menggunakan simulator. Simulator meniru lagak mikropemproses 68k dalam PC secara perisian. Lajunya tidak sama dengan 68k sebenar dan ia tidak dapat meniru setiap perkakasan 68000. Oleh itu, ia selalunya tidak boleh melaksanakan aturcara yang melibatkan operasi input/output kecuali untuk beberapa peranti terpilih. Bagaimanapun, simulator serta PC mudah didapati dan penggunaannya memadai bagi mempelajari asas bahasa himpunan. Contoh simulator yang boleh didapati secara percuma ialah SIM68K dari University of Florida dan EASy68K dari SourceForge. Kaedah ketiga ialah melaksanakan aturcara dalam sistem sasaran atau sistem sebenar. Sistem sebenar tentunya mempunyai set komponen yang berbeza dengan SBC. Contohnya, papan litar untuk kawalan industri akan mempunyai peranti penukar analog-ke-digital tetapi tidak memerlukan liang perhubungan bersiri kerana ia beroperasi sendirian. Amnya, aturcara akan dibakar ke dalam ingatan kekal seperti EPROM8 dan beroperasi dari sana. Ini berbeza dengan SBC yang melaksanakan aturcara yang terletak dalam RAM yang dimuat turun dari PC. Apabila sistem dipasang, sistem sebenar akan terus melaksanakan aturcara ini sehinggalah sistem dipadamkan. Aturcara yang terletak dalam ingatan kekal boleh disebut perkukuhan9 Membangunkan perkukuhan lebih sukar kerana mengubah kandungan ingatan kekal tidak semudah RAM. Untuk membina sistem dengan bajet terhad, kod objek boleh dibakar ke dalam EPROM yang kemudiannya dimasukkan ke dalam soket dalam sistem. Sekiranya terdapat ralat atau penambahbaikan, EPROM boleh dipadam dan digunakan semula. Tanpa sebarang instrumentasi, proses mengesan ralat lebih kepada cuba-cuba yang membawa risiko kerosakan kepada komponen. Masalah yang ketara di sini ialah proses memadam EPROM yang lama menyebabkan jurutera kurang produktif. Untuk menjimatkan masa, EPROM boleh diganti dengan peranti EEPROM yang lebih mahal. Ia masih perlu dipadam tetapi lebih selama EPROM. Sekiranya ada peruntukan, terdapat pelbagai cara pembangunan perkukuhan yang lebih efisien. Dengan bajet lebih sedikit, jurutera boleh menggunakan emulator EPROM. Peralatan ini adalah RAM yang disambung ke soket EPROM dalam litar, dan jurutera tidak perlu menanggal dan memasukkan semula EPROM ke soket. Emulator amat menjimatkan masa kerana aturcara boleh diubah sertamerta dari PC. Bagi mereka yang mempunyai bajet besar, peralatan terbaik bagi pembangunan perkukuhan ialah emulator dalam litar (ICE10 ). ICE merupakan peralatan khusus mengandungi pemproses yang sama dengan yang terdapat di papan sasaran. ICE dikawal dari PC dan disambungkan ke papan sasaran melalui soket pemproses dan soket ingatan. Papan sasaran menggunakan pemproses dan ingatan yang terdapat dalam ICE. Sebarang perubahan aturcara dilakukan dengan memuat turun dari PC ke ICE. 7 single-board computer 8 erasable programmable read-only memory 9 firmware 10 in-circuit emulatorIf you found this book useful, donate to the Gaza fund
  • 38. 34 Bab 3. Bahasa Himpunan Kaedah kemaskini aturcara adalah sama dengan penggunaan emulator EPROM. Apa yang membezakan ICE ialah pemproses yang terdapat di dalamnya. Pemproses ini versi khas (dan mahal) yang boleh dikawal dari segala aspek dari PC. Dari PC, jurutera boleh melaksanakan aturcara dengan kelajuan sebenar, dan boleh melihat dan mengawal segala aktiviti yang berlaku dalam setiap daftar dan bas pada sistem sasaran. Setelah aturcara yang dibangunkan dengan emulator EPROM atau ICE diuji dan dianggap boleh digunakan, baharulah ia dianggap sedia untuk dibakar ke dalam EPROM dalam sistem. 3.3 Format Penyata Aturcara bahasa himpunan terdiri daripada baris-baris penyata. Dalam setiap baris, kod mesin ditulis dalam bentuk mnemonik, dan alamat dan pemalar ditulis dalam bentuk simbolik. Setiap baris mengandungi salah satu daripada yang berikut: • suruhan mesin • perintah penghimpun • komen Penyata punca mesti menurut format yang ditetapkan. Setiap penyata terdiri daripada beberapa medan: Medan Medan Medan Medan Label Opkod Kendalian Komen [label] opkod kendalian [[;]komen] Setiap medan dipisahkan oleh satu atau lebih ruang atau aksara tab. Baris yang dimulai oleh bintang * di lajur pertama ialah komen dan diabaikan sepenuhnya oleh penghimpun. Label Label tidak semestinya ada dan hanya perlu jika sesuatu baris dirujuk oleh sesuatu suruhan lain. Jika label wujud, ia mesti bermula dari lajur satu. Jika aksara di lajur pertama ialah koma bertitik ; atau bintang *, penghimpun menganggap keseluruhan baris sebagai komen. Aksara pertama dalam label mestilah aksara huruf (A-Z, a-z). Aksara seterusnya mestilah huruf atau nombor. Sebarang label tidak boleh digunakan lebih daripada sekali. Opkod Medan opkod mengandungi mnemonik suruhan bahasa mesin atau perintah penghimpun. Mnemonik suruhan mestilah salah satu mnemonik sah yang terdapat dalam set suruhan 68000. Mnemonik suruhan diterjemah menjadi kod mesin yang boleh dilaksanakan pemproses. Suruhan-suruhan boleh beroperasi terhadap byte, kata atau kata panjang. Saiz data dikenalpasti oleh imbuhan .B, .W atau .L yang diletakkan selepas mnemonik suruhan. Contohnya, jika suruhan ialah ADD, opkod boleh jadi ADD.B bermaksud tambah byte, tetapi ADD.W bermaksud tambah kata. Jika lanjutan tidak diberikan, penghimpun menganggapkannya .W untuk kebanyakan suruhan. Perintah penghimpun memberikan suruhan kepada penghimpun bagi mengawal proses penghim- punan. Ia juga mentakrifkan nilai-nilai malar dan memperuntukkan ruang untuk data dalam ingatan. Perintah penghimpun tidak boleh diterjemah kepada kod mesin.If you found this book useful, donate to the Gaza fund
  • 39. 3.4. Ungkapan dalam Medan Kendalian 35 Kendalian Medan kendalian mengandungi kendalian yang diperlukan oleh suruhan/perintah yang muncul di medan opkod. Jumlah kendalian bergantung sepenuhnya kepada jenis suruhan/perintah. Jika suruhan tidak mempunyai kendalian, medan ini mesti dikosongkan. Jika suruhan mempunyai satu kendalian, hanya satu kendalian boleh wujud melambangkan destinasi. Untuk suruhan dengan lebih daripada satu kendalian, kendalian-kendalian mesti dipisahkan dengan koma. Jangan gunakan ruang kosong untuk memisahkan kendalian kerana penghimpun menganggapkannya penamat medan kendalian. Komen Komen adalah catatan-catatan yang menjelaskan lagi operasi aturcara. Komen bagi keseluruhan aturcara atau subrutin diletakkan di awal aturcara atau subrutin dalam blok komen11 . Komen bagi penyata-penyata diletakkan diletakkan di hujung penyata. Blok komen terdiri daripada baris-baris yang dimulakan oleh aksara ”*”12 . Komen di hujung baris dimulakan oleh aksara ”;”13 . 3.4 Ungkapan dalam Medan Kendalian Kendalian sesuatu suruhan atau perintah ialah daftar, alamat ingatan atau ungkapan. Simbol Penggunaan simbol adalah salah satu kelebihan menggunakan bahasa himpunan berbanding bahasa mesin. Simbol berbentuk rentetan 1 hingga 8 aksara yang bermula dengan huruf (A-Z). Simbol PC, SP, D0 hingga D7, A0 hingga A7, CCR, SR, dan USP adalah nama daftar yang boleh muncul dalam medan kendalian tetapi tidak dalam medan label. Pemalar Pemalar boleh berbentuk angka atau ASCII. Suatu turutan digit (contohnya, 12345) dianggap nombor perpuluhan. Turutan digit dimulai dengan tanda dolar ($) ditafsir sebagai nombor perenambelasan. Angka-angka juga boleh ditafsir sebagai perlapanan dan perduaan. Aksara-aksara yang dikelilingi oleh aksara penyingkat14 “’” dianggap rentetan ASCII. Rujuk Jadual 3.2 untuk senarai imbuhan yang dibenarkan. Jadual 3.2: Imbuhan untuk pemalar berangka. Pemalar Contoh Integer perpuluhan 18 Integer perenambelasan $18 Integer perlapanan @18 Integer perduaan %0111111 Rentetan aksara ’WXY2’ 11 comment block 12 asterisk 13 semi-colon 14 apostropheIf you found this book useful, donate to the Gaza fund
  • 40. 36 Bab 3. Bahasa Himpunan Pengoperasi Aljabar Penghimpun membenarkan ungkapan yang terdiri daripada sebutan-sebutan yang digabungkan dengan pengoperasi aritmetik dan logik. Contohnya, suruhan berikut mengisikan 17 ke dalam D0: MOVE.W #3*4+7,D0 Pengoperasi aritmetik adalah + (tambah), – (tolak), * (darab), / (bahagi), dan % (modulo). Simbol – juga digunakan untuk operasi penafian apabila diletakkan di awal suatu sebutan; ia menyebabkan sebutan ditolak daripada sifar. Simbol-simbol +, –, * dan / melakukan operasi yang sama dengan aljabar biasa. Pengoperasi % mengambil baki selepas pembahagian dilakukan. Misalnya, 10%3 menghasilkan 1. Pengoperasi logik ialah ∼ (TAK), & (DAN), ! (ATAU), ˆ (ATAU eksklusif), << (anjak kiri), dan >> (anjak kanan). Pengoperasi ∼ merupakan pengoperasi yang beroperasi terhadap satu kendalian manakala pengoperasi-pengoperasi lain terhadap dua kendalian. Pengoperasi ∼ diletakkan di hadapan sebutan dan memberikan nilai pelengkap satu sebutan tersebut. Pengoperasi &, ! dan ˆ masing- masing melaksanakan operasi logik DAN, ATAU dan ATAU eksklusif terhadap kendalian-kendaliannya. Pengoperasi << dan >> menganjak sebutan kiri dengan jumlah kedudukan bit yang dinyatakan dalam sebutan kanan. Ruang bit yang dikosongkan diisi dengan nilai sifar. Jadual 3.3 menunjukkan keutamaan pengoperasi. Jika pengoperasi kurungan () dijumpai, kandun- gannya dinilai lebih dahulu. Kesemua hasil penilaian mempunyai saiz 32 bit kemudian bit-bit dibuang bergantung kepada destinasi operasi. Contohnya, pemalar $123 yang disimpan dalam destinasi byte akan direpang menjadi $23. Jadual 3.3: Keutamaan operator Keutamaan Operator 1 Penafian (–), NOT (∼) 2 Anjak kiri (<<), anjak kanan (>>) 3 AND (&), OR (!), XOR (ˆ) 4 Darab (*), bahagi (/), modulo (%) 5 Tambah (+), tolak (–) Pembilang Lokasi Simbol ”*” dalam medan kendalian merujuk kepada nilai semasa pembilang lokasi penghimpun. Contohnya, suruhan BRA *+4 bermakna cabang sentiasa (branch always) ke lokasi 4 byte selepas suruhan cabang. Suruhan cabang setempat ialah BRA * Contoh ini boleh ditulis juga seperti berikut: SINI BRA SINIIf you found this book useful, donate to the Gaza fund
  • 41. 3.5. Perintah Penghimpun 37 3.5 Perintah Penghimpun Perintah penghimpun atau pseudo-op adalah suruhan kepada penghimpun bukan kepada pemproses. Berikut adalah beberapa perintah penghimpun yang mustahak. ORG Perintah ORG (origin) menetapkan alamat bagi suruhan atau data yang menuruti. Kendalian ORG ialah nilai mutlak. Formatnya ialah: ORG alamat EQU Perintah EQU (equate) hanya memberikan nilai kepada suatu simbol. Formatnya ialah: simbol EQU nilai Dalam contoh berikut, SAIZ diberi nilai 20. SAIZ EQU 20 ORG $2000 MOVE.W #SAIZ,D0 Perintah EQU sangat berguna dan patut dibiasakan. Pertamanya, ia memudahkan aturcara dibaca. Kedua, ia memudahkan aturcara diubah. Sesuatu simbol boleh digunakan beberapa kali dalam aturcara. Jika nilai simbol perlu diubah, ia cuma perlu diubah di suatu tempat iaitu di dalam penyata yang menetapkan nilainya, dan kemudian aturcara dihimpun semula. Kesemua penggunaan simbol akan menggunakan nilai yang baru. Penghimpun membolehkan satu ungkapan digunakan dalam perintah ini. Contoh berikut adalah sah: ROW EQU 5 COLUMN EQU ROW+1 ARRAY EQU ROW*COLUMN Perintah EQU boleh digunakan untuk mengatasi had yang dikenakan terhadap perintah lain. Misalnya, perintah ORG tidak boleh mempunyai label. Turutan di bawah boleh digunakan untuk memberikan label kepada penyata pertama. ORG $1000 MULA EQU * DC Perintah DC (define constant) mengisikan nilai-nilai tertentu ke dalam ingatan. Ia mesti diberi imbuhan huruf .B, .W atau .L bergantung kepada saiz pemalar. Pemalar yang ditakrifkan oleh perintah ini diisi ke dalam ingatan ke kedudukan semasa. Perintah DC.W 5 mengisikan $0005 ke dalam ingatan, tetapi Perintah DC.L mengisikan $00000005 ke dalam ingatan. Pemalar boleh disimpan berturutan dengan mengasingkan setiap satu dengan koma. Formatnya ialah: [label] DC nombor[,nombor][...] Rajah 3.3 menunjukkan peta ingatan setelah turutan berikut:If you found this book useful, donate to the Gaza fund
  • 42. 38 Bab 3. Bahasa Himpunan ORG $2000 DC.W 3 DC.B $23,49 DC.L 10 DC.B ’Input:’ DC.W 1,4,9,16 Pastikan kata dan kata panjang bermula di alamat genap. 04 Rajah 3.3: Contoh penggunaan DC. DS Perintah DS (define storage) hampir sama dengan perintah DC tetapi ia tidak mengisikan sebarang maklumat ke dalam ingatan. Jika DC menetapkan pemalar sebelum aturcara dilaksanakan, DS mempe- runtukkan ruang untuk pembolehubah yang dihasilkan oleh aturcara semasa aturcara berlangsung. DS juga perlu ditambah dengan .B, .W atau .L. Label di kiri mengaitkan label dengan alamat pertama yang diperuntukkan. Formatnya ialah: [label] DS bilangan Contoh-contoh berikut adalah sah: ARRAY DS.W 1 Sediakan 1 kata STRING DS.B 8 Sediakan 8 byte PTR DS.L 1 Sediakan ruang utk 2 kata panjang Pastikan ruang yang disediakan oleh perintah DS diisi sebelum dibaca. Jika data dibaca sebelum diisi sebarang nilai, nilainya rawak. Ini boleh menyebabkan ralat yang mungkin sukar dicari. END Perintah END hanya memberitahu penghimpun bahawa aturcara telah tamat. Tiada suruhan atau perintah lain perlu dihimpun selepas perintah ini. Formatnya ialah: END [label]If you found this book useful, donate to the Gaza fund
  • 43. 3.6. Penggunaan Simulator 39 DS.L 1 Rajah 3.4: Contoh penggunaan DS. ¯ Kebanyakan penghimpun menggunakan perintah ini tanpa kendalian. Terdapat juga penghimpun yang memerlukan satu parameter. Parameter ini memberitahu penghimpun tempat aturcara bermula jika dilaksanakan. Jika aturcara bermula di alamat $1000, perintah ini berupa END $1000. 3.6 Penggunaan Simulator Untuk menulis aturcara bahasa himpunan, pengaturcara perlu mengetahui konfigurasi sistem. Maklumat pertama yang perlu diketahui ialah ruang ingatan yang boleh dimasukkan aturcara dan dimana letaknya peranti I/O. Pemproses 68k mempunyai ruang ingatan sebesar 16 megabyte sedangkan sistem sebenar jarang benar perlu lebih daripada beberapa kilobyte, apa lagi untuk memenuhi keseluruhan peta ingatan. Peta Ingatan Pengguna SBC Flight68k lazimnya memulakan aturcara di alamat $400400. Dalam Flight68k, RAM bermula dari alamat $400000. Satu kilobyte di awal blok ini digunakan oleh sistem. Maka sebarang aturcara haruslah dimulakan seawal-awalnya di alamat $400400. SBC ini selalunya diisi dengan dua unit RAM sebesar 8 atau 32 kilobyte setiap satu. Oleh itu aturcara pengguna yang boleh dimuat turun dari PC tidak mungkin melebihi 64 kilobyte. 
 
 Rajah 3.5: Peta ingatan SBC Flight68k (kiri) dan simulator EASy68K (kanan).If you found this book useful, donate to the Gaza fund
  • 44. 40 Bab 3. Bahasa Himpunan Bagi simulator pula, situasinya amat berbeza kerana simulator tiada had saiz ingatan. Secara teorinya, mana-mana simulator boleh menyediakan ingatan sebanyak 16 megabyte, ditolak sedikit untuk blok input/output. Rajah 3.5 menunjukkan peta ingatan bagi SBC Flight68k dan simulator EASy68K. Ternyata ruang “RAM” yang disediakan oleh EASy68K jauh lebih besar iaitu dari $001000 hingga $EFFFFE. Templat Aturcara Bagi menyeragamkan aturcara-aturcara yang kita tulis, sebaik-baiknya disediakan satu templat yang menyediakan kerangka yang sentiasa diperlukan bagi sebarang aturcara. Terdapat tiga blok utama dalam mana-mana aturcara: • Komen keseluruhan • Seksyen CODE • Seksyen DATA 
 Rajah 3.6: Templat bagi penulisan aturcara dalam EASy68K. Komen keseluruhan menerangkan fungsi aturcara. Ia juga menyatakan nama penulis aturcara, tarikh ia diubah (dan mungkin tarikh mula-mula ditulis) dan versi aturcara. Seksyen CODE ialah tempat menulis suruhan-suruhan bahasa himpunan yang boleh dilaksanakan oleh pemproses. Ia dimulakan oleh perintah ORG menandakan alamat suruhan pertama dalam aturcara. Seksyen ini ditamatkan oleh satu atau dua suruhan yang mengembalikan kawalan ke pengawas sistem atau simulator. Biasanya ia terdiri daripada satu suruhan TRAP didahului oleh satu suruhan lain. Ruju buku manual untuk turutan sebenar. Bagi sistem yang beroperasi berterusan, suruhan ini tidak perlu. Dalam kes ini, suruhan terakhir besar kemungkinan adalah suruhan cabang yang menyebabkan aturcara diulang dari mula. Seksyen DATA menyusul seksyen CODE. Kebiasaannya, seksyen ini dipenuhi oleh perintah DS dan DC bagi menetapkan data yang digunakan oleh kod. Sekiranya seksyen ini dimulakan sebaikIf you found this book useful, donate to the Gaza fund
  • 45. 3.6. Penggunaan Simulator 41 sahaja seksyen CODE tamat, perintah DS atau DC boleh terus digunakan. Sekiranya seksyen ini perlu diletakkan di lokasi tertentu, suruhan ORG kedua digunakan untuk menjauhkan seksyen ini dengan seksyen sebelumnya. Pastikan setiap perintah ORG serasi dengan platform tempat aturcara beroperasi, dan kedua-dua seksyen tidak bertindan. Contoh Larian EASy68K Seksyen ini menunjukkan demonstrasi penggunaan pakej EASy68K. Perisian ini terdiri daripada dua perisian berbeza iaitu penyunting/penghimpun EASy68K dan simulator SIM68K. Untuk tujuan perbincangan, EASy68K akan merujuk kedua-dua perisian. Rajah 3.7: Paparan awal apabila membuka EASy68K. Apabila mula-mula dilancarkan, EASy68K akan terus memberikan satu templat aturcara seperti dalam Rajah 3.7. Ia diulang di bawah sebagai rujukan. 1 *----------------------------------------------------------- 2 * Program : 3 * Written by : 4 * Date : 5 * Description: 6 *----------------------------------------------------------- 7 START ORG $1000 8 9 10 11 MOVE.B #9,D0 12 TRAP #15 Halt Simulator 13 14 END START • Baris 1 hingga 6 adalah komen keseluruhan. Maklumat ini memudahkan anda mengingat fungsi keseluruhan aturcara. Kkeenam-enam baris ini boleh dipadam tanpa memberi kesan terhadap larian aturcara. • Baris 7 adalah perintah START ORG $1000 yang menyatakan aturcara dimulakan di alamat $1000.If you found this book useful, donate to the Gaza fund
  • 46. 42 Bab 3. Bahasa Himpunan • Baris 8 hingga 10 adalah beberapa baris kosong tempat anda meletakkan aturcara. Tambahkan seberapa banyak baris yang perlu untuk melengkapkan aturcara anda. • Baris 11 dan 12 adalah turutan suruhan bagi menghentikan aturcara dan mengembalikan kawalan ke simulator. Anda boleh padam baris-baris ini jika aturcara beroperasi berterusan tanpa henti. • Baris 4 adalah suruhan END START yang memberitahu penghimpun bahawa nilai PC awal ialah label START (alamat $1000). Seterusnya masukkan aturcara sample di antara suruhan ORG dan MOVE.B #9,D0. Anda akan mendapat paparan seperti Rajah 3.8. Rajah 3.8: Memasukkan aturcara ke dalam EASy68K. Setelah siap memasukkan aturcara, tekan F9 untuk menghimpun. Kod punca dengan imbuhan X68 akan menjana kod objek dengan imbuhan S68 dan fail senarai dengan imbuhan L68, selaras dengan Rajah 3.1. Jika tiada ralat sintaks, anda akan mendapat kotak dialog seperti Rajah 3.9. Rajah 3.9: Kotak dialog menunjukkan operasi himpunan berjaya. Tekan kekunci Enter untuk melancarkan perisian simulator. Anda akan diberi skrin seperti dalam Rajah 3.10. Skrin simulator terbahagi kepada empat lapisan utama. Lapisan pertama ialah riben perintah yang mengandungi ikon bagi operasi-operasi yang kerap digunakan. Lapisan kedua ialah kandungan daftar pemproses. Lapisan ketiga ialah paparan fail senarai. Akhir sekali ialah lapisan yang memaparkan mesej dari simulator. Tekan kekunci F9 untuk melaksanakan aturcara. Dalam contoh ini, output akan dikeluarkan pada konsol. Konsol menggabungkan output teks ASCII dan input papan kekunci. Langkah-langkah di atas menunjukkan prosedur bagi aturcara yang mempunyai output di konsol. Aturcara anda boleh mengambil input dari konsol. Rujuk skrin bantuan EASy68K untuk mendapatkan tips penggunaan rutin-rutin TRAP #15.If you found this book useful, donate to the Gaza fund
  • 47. 3.6. Penggunaan Simulator 43 Rajah 3.10: Skrin utama simulator. Rajah 3.11: Sebahagian daripada output konsol. EASy68K juga menawarkan input/output mudah menggunakan beberapa jenis suis dan LED seperti dalam Rajah 3.12. Input paling mudah ialah melalui suis di alamat $E00012. Output paling mudah pula ialah LED di alamat $E00010. Aturcara termudah bagi menggunakan suis dan LED ditunjukkan di bawah. SUIS EQU $E00012 LED EQU $E00010 START ORG $1000 ULANG MOVE.B SWITCH,D0 ; Baca dari suis NOP ; Operasi terhadap data MOVE.B D0,LED ; Tulis ke LED BRA ULANG ; Ulang tanpa henti END START Dalam aturcara ini, suis dibaca ke D0 kemudian nilainya dihantar ke LED tanpa diubah. Anda bolehIf you found this book useful, donate to the Gaza fund
  • 48. 44 Bab 3. Bahasa Himpunan Rajah 3.12: Input/output melalui perkakasan mudah. Jadual 3.4: Kekunci bagi mengawal larian EASy68K. Kekunci Fungsi Operasi F9 Run Lari pada kelajuan maksimum Ctrl + F9 Run to Cursor Lari hingga kursor (lampu merah). Klik sekali di lampu hijau di kiri suruhan untuk menukarkannya ke merah. Klik sekali lagi untuk mengembalikannya ke hijau. F10 Auto Trace Laksanakan suruhan satu persatu dengan perlahan sambil mema- parkan nilai daftar semasa. F8 Step Over Laksanakan satu suruhan. Jika ada subrutin, laksana subrutin sepenuhnya dan anggapkannya satu suruhan. F7 Trace Into Laksanakan satu suruhan. Jika ada subrutin, masuk ke subrutin dan laksanakan suruhan dalam subrutin satu persatu. F6 Pause Rehat sebentar. Tekan F6 lagi untuk menyambung. Ctrl + F2 Reset Hentikan aturcara secara paksa. Ctrl + F3 Reload Isikan aturcara objek semula dari cakera. melakukan apa saja terhadap input ini sebelum output dikeluarkan. Perhatikan bahawa aturcara ini tidak diakhiri oleh turutan MOVE.B #9,D0 dan TRAP #15. Sebaliknya, suruhan terakhir ialah BRA ULANG kerana aturcara ini berjalan tanpa henti dan tidak akan kembali ke simulator. Untuk menghentikan aturcara secara paksa, tekan kekunci Ctrl + F2. Selain menjalankan aturcara secara normal, anda boleh melaksanakan suruhan-suruhan satu persatu. Kaedah ini amat berguna untuk memerhatikan perubahan dalam daftar-daftar dan mengesan ralat semantik. Jadual 3.4 menyenaraikan kekunci yang mengawal perlaksanaan aturcara. Ada banyak lagi operasi yang boleh dilakukan dengan EASy68K. Gunakan skrin bantuan atau cuba sendiri semua pilihan yang ada.If you found this book useful, donate to the Gaza fund
  • 49. 3.6. Penggunaan Simulator 45 Latihan 1. Laksanakan dengan tangan kemudian buktikan dengan EASy68K keratan aturcara berikut: MOVE.L #$13762,D0 MOVE.W D0,$400 MOVE.B $400,D0 MOVE.W %10101010,D0 2. Dapatkan jumlah ingatan yang digunakan oleh setiap perintah penghimpun berikut: DC.L $ABCDEF00,$FF,0 DC.W $20 DS.B %1010 DC.B %1010 DC.B ’SUBJEK MIKROPEMPROSES REKREASI MINDA’,$A,$D 3. Rekod kedua dalam aturcara berikut mengandungi ralat byte semak. Tentukan nilai yang betul. S0060000612E6FFB S10A80007200227C000090007404FF S9030000FCIf you found this book useful, donate to the Gaza fund
  • 50. 46 Bab 3. Bahasa HimpunanIf you found this book useful, donate to the Gaza fund
  • 51. Bab 4 Mod Alamat Objektif • Menunjukkan mod-mod alamat asas • Menggunakan mod alamat asas untuk suruhan pergerakan data Pengenalan Penentuan kendalian yakni data yang diperlukan oleh suruhan boleh dilakukan pelbagai cara. Kendalian boleh terletak dalam daftar dan ingatan. Amnya, terdapat enam mod alamat iaitu daftar langsung, mutlak, daftar tak langsung, terdekat, relatif PC dan tersirat. Enam mod ini boleh dikembangkan lagi menjadi 14 mod kesemuanya. Dalam pengaturcaraan bahasa himpunan, tatasusunan penting bagi menyusun sekelompok data berkaitan. Beberapa mod alamat disediakan khusus untuk olahan tatasusunan. Mod alamat menentukan bagaimana CPU mendapatkan alamat kendalian sebenar. Alamat sebenar yang terhasil digelar alamat berkesan. Jadual 4.1 menunjukkan mod alamat dan sintaks yang difahami oleh penghimpun. Merujuk kepada jadual ini, dua mod alamat pertama melibatkan kendalian yang terletak dalam pemproses. Hampir kesemua mod alamat yang selebihnya melibatkan kendalian yang terletak dalam ingatan. 4.1 Mod Daftar Data Langsung Mod daftar langsung antara mod alamat yang termudah. Dalam mod ini, lokasi kendalian adalah sebahagian daripada suruhan. Alamat berkesan atau kedudukan data sebenar dinyatakan oleh simbol Dn atau An iatu ialah salah satu daripada daftar data atau daftar alamat. Mod alamat ini adalah sangat pantas kerana daftar merupakan tempat menyimpan data yang terletak dalam pemproses. Mod daftar data langsung dinyatakan dengan simbol Dn. Dalam mod ini, saiz data yang dibenarkan ialah byte, kata atau kata panjang. Apabila hanya sebahagian daftar digunakan iaitu bagi saiz data byte atau kata, baki daftar tidak terkesan. Contoh 1: Jika D0 berisi $FEEDBEEF, apakah kesan suruhan CLR.B D0, CLR.W D0 dan CLR.L D0? Penyelesaian: Suruhan CLR.B D0 memadam hanya byte terendah tanpa mmengubah maklumat lain, jadi D0 menjadi $FEEDBE00. Suruhan CLR.W D0 memadam hanya kata rendah tanpa mengubah kata atas, jadi D0 47If you found this book useful, donate to the Gaza fund
  • 52. 48 Bab 4. Mod Alamat Jadual 4.1: Mod alamat pemproses 68000. Mod Alamat Sintaks Penjanaan Alamat Berkesan Bab Daftar data langsung Dn ea ← Dn 4 (Data register direct) Daftar alamat langsung An ea ← An 4,7 (Address register direct) Mutlak pendek XXXX ea ← (kata berikut) 4 (Absolute short) Mutlak panjang XXXXXXXX ea ← (dua kata berikut) 4 (Absolute long) Relatif dengan offset d16 (PC) ea ← (PC) + d16 4,6 (Relative with offset) Relatif dengan indeks dan ofset d8 (PC,Xn) ea ← (PC) + (Xn) + d8 4 (Relative with index and offset) Daftar alamat tak langsung (An) ea ← (An) 4,7 (Address register indirect) Pascatokok (An)+ ea ← (An), An ← An + N 4,7,8 (Post-increment) Prasusut -(An) An ← An – N, ea ← (An) 4,7,8 (Pre-decrement) Daftar alamat tak langsung dengan ofset d16 (An) ea ← (An) + d16 4,7 (Address register indirect with offset) Daftar alamat tak langsung dengan indeks dan ofset d8 (An,Xn) ea ← (An) + (Xn) + d8 4,7 (Address register indirect with index and offset) Terdekat #XXXX data ← kata berikut 4 (Immediate) Tersirat CCR, SR, ea ← CCR, SR, USP, SSP, PC 8,13 (Inherent) USP, SSP, PC menjadi $FEED0000. Suruhan CLR.L D0 memadam keseluruhan daftar jadi D0 menjadi $00000000. Contoh 2: Jika D0 berisi $00000001 dan D1 berisi $0000FFFF, apakah kesan suruhan ADD.B D0, D1? Penyelesaian: Operasi ADD.B D0,D1 menambah byte terendah D0 kepada D1. Jadi nilai $01 ditambah kepada $FF. Hasilnya ialah $100 tetapi tempat untuk menyimpan hasiltambah ialah byte terendah D1 sahaja jadi hanya nilai $00 disimpan. Oleh itu, D1 berubah menjadi $0000FF00. Suruhan SWAP dan EXG Selain suruhan CLR, MOVE dan ADD, dua suruhan mudah lain ialah SWAP dan EXG. Kedua-dua suruhan ini menggunakan mod daftar langsung. Suruhan SWAP mempunyai format SWAP Dn Suruhan ini menukarganti kata atas daftar data Dn dengan kata rendah daftar yang sama. Suruhan EXG mempunyai format EXG Rx,RyIf you found this book useful, donate to the Gaza fund
  • 53. 4.2. Mod Daftar Alamat Langsung 49 Ia menukarganti kandungan dua daftar. Daftar yang dibenarkan adalah sebarang kombinasi daftar alamat dan daftar data. Kedua-dua suruhan tidak mempunyai penentu saiz. Contoh 3: Jika D0 berisi $11223344 dan D1 berisi $0000FFFF, apakah kesan suruhan SWAP D0 dan EXG D0,D1? Penyelesaian: Suruhan SWAP D0 menjadikan D0 = $33441122. Suruhan EXG D0,D1 menjadikan D0 bernilai $0000FFFF dan D1 bernilai $11223344. 4.2 Mod Daftar Alamat Langsung Mod daftar data langsung dinyatakan dengan simbol An. Dalam mod ini, saiz data yang dibenarkan ialah kata atau kata panjang. Imbuhan yang dibenarkan ialah .W dan .L. Dalam penulisan bahasa himpunan, suruhan yang menggunakan daftar alamat dikenali dengan imbuhan huruf A. Contohnya, MOVE ke daftar alamat boleh ditulis sebagai MOVE sahaja atau MOVEA. Beberapa suruhan lain bagi olahan daftar alamat termasuk ADDA, SUBA, LEA dan PEA. Apabila mengisi daftar alamat dalam mod ini, keseluruhan daftar alamat akan terkesan. Jika data 16 bit ingin diisikan, ia dikembangkan ke 32 bit dahulu. Contoh 1: Jika A0 berisi $FF8002000 dan D0 berisi $00100100, apakah kesan suruhan MOVEA.L D0,A0 dan MOVE.W D0,A0? Penyelesaian: Suruhan MOVEA.L D0,A0 menyalin keseluruhan D0 ke A0 menjadikan A0 berisi $001000100. Suruhan MOVEA.W D0,A0 mengambil 16 bit terendah dalam A0 iaitu $0100, mengembangkannya ke 32 bit dan menyalin nilai ini ke A0 menjadikan A0 berisi $000000100. Contoh 2: Jika A0 berisi $FFFF0000, apakah kesan suruhan MOVEA.W #$2000,D0? Apa pula kesan MOVEA.W #$C000,D0? Penyelesaian: Suruhan MOVEA.W #$2000,D0 cuba mengisikan nilai $2000 bersaiz 16 bit ke dalam daftar alamat. Nilai $2000 dipanjangkan dahulu menjadi $00002000 sebelum disimpan di A0. Oleh A0 diubah kepada $00002000. Bagi suruhan MOVEA.W #$C000,D0, nilai $C000 dipanjangkan menjadi $FFFFC000 dahulu. Oleh A0 berubah menjadi $FFFFC0000. 4.3 Alamat dan Daftar Alamat Pemproses 68000 mempunyai daftar alamat 32 bit dan pembilang aturcara 32 bit. Oleh itu, alamat yang digunakan untuk memilih suruhan dan kendalian dalam ingatan adalah 32 bit, membolehkannya mencapai sehingga 232 byte. Bagaimanapun, untuk mengecilkan pakej cip pemproses, talian A24 hingga A31 tidak dikeluarkan dari dalam cip. Disebabkan nilai di talian A24 hingga A31 tidak memberi kesanIf you found this book useful, donate to the Gaza fund
  • 54. 50 Bab 4. Mod Alamat kepada alamat yang dikeluarkan dari cip, pemproses 68000 boleh mengakses ingatan sebesar 224 byte atau 16 megabyte sahaja. Kesan daripada tidak menyambungkan 8 talian alamat ke pin pemproses ialah nilai-nilai ini tidak memberik kesan terhadap operasi sistem. Misalnya, alamat $12345678 dan $00345678 sama sahaja kerana lokasi fizikal yang dirujuk adalah sama. Oleh itu, kita biasanya hanya menggunakan enam digit perenambelasan untuk merujuk peta ingatan. Bagaimanapun, apabila 68000 menyimpan dan mengolah alamat, ia menggunakan 32 bit. 
 Rajah 4.1: Daftar alamat dan talian alamat. Walaupun daripada segi logikalnya 68000 mempunyai 24 talian alamat, daripada segi fizikalnya ia hanya mempunyai 23 talian A1 hingga A23. Talian A0 dikeluarkan melalui pin strob data UDS* (upper data strobe) dan LDS* (lower data strobe). Talian A1 hingga A23 memilih kata di alamat genap, dan strob data memilih byte yang dicapai. Isyarat UDS* memilih byte atas (di alamat genap) dan LDS* memilih byte bawah (di alamat ganjil). Jika kedua-dua strob diaktifkan serentak, keseluruhan kata dicapai. 4.4 Mod Mutlak Panjang Mod mutlak digunakan untuk mencapai data dalam ingatan. Terdapat dua variasi iaitu mod mutlak panjang dan mod mutlak pendek. Dalam mod ini, alamat berkesan didapati dengan mencantumkan dua kata lanjutan yang menuruti kod operasi dalam suruhan. Alamat ini boleh digunakan untuk mencapai sebarang alamat. Suruhan CLR.W $10000 menggunakan mod mutlak panjang kerana nilai $10000 tidak mungkin disimpan dalam 16 bit jadi alamat ini disimpan dalam alamat panjang 32 bit yang terletak dalam suruhan. Contoh: Apakah kesan suruhan CLR.W $10000 jika alamat $10000 hingga $10003 mengandungi nilai $42, $51, $55 dan $13? Apakah format mesin untuk suruhan ini? Penyelesaian: Suruhan CLR.W $10000 memadam satu kata (nilai 16 bit) bermula dari alamat $10000. Oleh itu isi alamat $10000 dan $10001 dipadam, manakala isi alamat $10002 dan $10003 tidak berubah. Format mesin untuk CLR.W $10000 ditunjukkan dalam Rajah 4.3.If you found this book useful, donate to the Gaza fund
  • 55. 4.5. Mod Mutlak Pendek 51 
 Rajah 4.2: Pengiraan alamat berkesan pengalamatan mutlak panjang. 
 Rajah 4.3: Format mesin untuk suruhan CLR.W $10000. 4.5 Mod Mutlak Pendek Mod mutlak pendek adalah variasi mod alamat mutlak yang mana alamat kendalian terkandung dalam satu kata lanjutan selepas opkod untuk membentuk satu suruhan. Alamat ini diubah menjadi nilai 32 bit dengan memanjangkan bit tanda (bit 15) alamat tersebut. Oleh kerana bas alamat 68000 lebarnya hanya 24 bit, lapan bit teratas dibuang. Rajah 4.4 menunjukkan cara pengiraan alamat berkesan. 
 Rajah 4.4: Pengiraan alamat berkesan pengalamatan mutlak pendek. Mod ini dinamai mod mutlak pendek kerana alamat yang dinyatakan dalam suruhan hanya 16 bit berbanding mod mutlak panjang dengan 32 bit. Julat alamat ingatan yang boleh dicapai ialah $000000 hingga $007FFF (32k paling awal) dan $FF8000 hingga $FFFFFF (32k paling akhir). Rajah 4.5 menunjukkan kesan penggunaan mod mutlak pendek. Jika alamat pendek ialah antara 0 hingga $7FFFF, ruang 32K pertama dalam ingatan boleh digunakan. Alamat pendek $8000 hingga $FFFF dipanjangkan ke 24 bit menghasilkan nilai antara $FF8000 hingga $FFFFFF iaitu 32K terakhir dalam ruang ingatan. Biasanya alamat permulaan dikhaskan untuk kegunaan sistem dan alamat-alamat terakhir untuk antaramuka I/O. Penggunaan 32K pertama dan terakhir ini mempercepatkan capaian data. Pemilihan mod mutlak pendek atau panjang dibuat secara automatik oleh penghimpun. Misalnya, suruhan CLR.W $1000 menggunakan mod mutlak pendek kerana nilai $1000 boleh dimuatkan dalam 16 bit. Selain itu, suruhanIf you found this book useful, donate to the Gaza fund
  • 56. 52 Bab 4. Mod Alamat 
 Rajah 4.5: Mencapai ingatan dengan alamat mutlak pendek. CLR.W $FFF000 juga ditukar menjadi mod mutlak pendek kerana alamat $FFF000 boleh disimpan dengan lebih mampat dalam suruhan sebagai $F000 sekiranya mod mutlak pendek digunakan. Sebaliknya, suruhan CLR.W $10000 memerlukan mod mutlak panjang kerana nilai $10000 tidak mungkin dimuatkan dalam 16 bit. Contoh 1: Jika alamat $1000 hingga $1003 mengandungi $42, $51, $55 dan $13, berikan kesan suruhan CLR.B $1000. Apakah format suruhan mesinnya? Penyelesaian: Suruhan CLR.B $1000 memadam byte dialamat $1000. Jadi nilai dalam alamat $1000 dipadam, dan alamat $1001, $1002 dan $1003 tidak terkesan. Format suruhan mesin ditunjukkan dalam Rajah 4.6. 
 Rajah 4.6: Format suruhan mesin untuk CLR.W $1000. Contoh 2: Berikan nilai akhir yang digunakan oleh sistem jika mod alamat pendek menyatakan alamat $7FFF, $8000, $1234 dan $ABCD. Penyelesaian: Jadual berikut meringkaskan perubahan yang berlaku.If you found this book useful, donate to the Gaza fund
  • 57. 4.6. Mod Terdekat 53 Hex asal Perduaan asal Perduaan akhir Hex akhir 7FFF 0111 1111 1111 1111 → 0000 0000 0111 1111 1111 1111 007FFF 8000 1000 0000 0000 0000 → 1111 1111 1000 0000 0000 0000 FF8000 1234 0001 0010 0011 0100 → 0000 0000 0001 0010 0011 0100 001234 ABCD 1010 1011 1100 1101 → 1111 1111 1010 1011 1100 1101 FFABCD 4.6 Mod Terdekat Mod terdekat membolehkan nilai malar dinyatakan dalam suruhan. Pemalar ini adalah sebahagian daripada suruhan. Nilai 8 dan 16 bit memerlukan satu kata lanjutan, manakala nilai 32 bit memerlukan dua kata lanjutan. Penghimpun mengenali mod ini dengan aksara # seperti dalam MOVE.B #$100,D0 yang mengisikan nilai 20 perpuluhan ke dalam daftar D0. Ini berbeza dengan suruhan MOVE.B $100,D0 yang mengambil data dari alamat $100 di ingatan. Apabila suruhan dipungut ke dalam daftar suruhan pemproses, data telahpun dibaca ke dalam pemproses. Kendalian dikatakan terletak terdekat dengan kod operasi. Oleh sebab data telah sedia ada, ia boleh digunakan terus tanpa dengan pantas. Mod ini tidak dibenarkan sebagai kendalian destinasi kerana kendalian destinasi mestilah boleh menyimpan maklumat. Contoh: Jika D0 berisi $FFFFFFFF, apakah kesan suruhan MOVE.W #50,D0? Penyelesaian: Suruhan ini mengisikan kata rendah D0 dengan nilai 50 perpuluhan atau 32 perenambelasan. Oleh itu D0 menjadi $FFFF0032. Suruhan MOVEQ Suruhan MOVEQ ialah suruhan satu kata bagi mengisikan data ke dalam daftar data. Format simboliknya ialah: MOVEQ #data8,Dn yang mana data8 ialah pemalar 8 bit. Nilai 8 bit ini dipanjangkan tandanya kepada 32 bit dan dipindahkan ke Dn. Suruhan ini amat cekap untuk mengisi daftar data dengan nilai malar dalam julat perpuluhan -128 ke +127. Ia dilaksanakan dalam 4 kitar sahaja. Suruhan MOVE asas memerlukan lebih banyak masa kecuali jika kedua-dua kendalian punca dan destinasi adalah daftar. Suruhan berikut MOVEQ #0,D0 sama kesannya dengan suruhan CLR.L D0 iaitu memadam keseluruhan D0.If you found this book useful, donate to the Gaza fund
  • 58. 54 Bab 4. Mod Alamat 4.7 Mod Tersirat Beberapa suruhan 68000 tidak memerlukan sebarang kendalian dan ada pula suruhan yang merujuk daftar tanpa menyebut daftar yang digunakan. Contohnya, suruhan RTS menyebabkan kawalan dikembalikan dari subrutin ke aturcara pemanggil menggunakan daftar SP. Suruhan ini mempunyai mod alamat tersirat. Disebabkan tidak banyak suruhan dalam mod ini, operasi setiap suruhan amat berbeza dan perlu difahami sebelum digunakan. 4.8 Mod Daftar Alamat Tak Langsung Fungsi sebenar daftar alamat ialah sebagai penuding ke suatu alamat ingatan. Dalam mod daftar alamat tak langsung, isi daftar alamat menuding ke kendalian. Daftar alamat yang dipilih menyimpan alamat berkesan bagi data. Alamat berkesan didapati dengan rumus ea ← (An) Contohnya, suruhan MOVE.W (A0),D1 mengisikan kata bawah D1 dengan kata yang alamatnya terletak di dalam A0. 4.9 Mod Pascatokok Semasa mencapai data berturutan, daftar alamat ditokok selalunya selepas data dicapai bagi menuding ke data berikutnya. Operasi ini boleh dibuat secara manual menggunakan suruhan ADDA #m,An yang mana m ialah nilai yang ditokok kepada daftar alamat An. Nilai m bergantung kepada saiz data iaitu 1, 2, atau 4 untuk data byte, kata atau kata panjang. Mod pascatokok menjimatkan satu suruhan dengan menokok daftar alamat secara automatik selepas digunakan. Dalam mod ini, kendalian dicapai kemudian daftar alamat ditokok. Nilai yang ditokok ialah sebanyak 1 (untuk data byte), 2 (untuk data kata) atau 4 (untuk data kata panjang). Contohnya, suruhan berikut menambah 2 kepada A0 selepas data dipindah dari ingatan ke daftar D1: MOVE.W (A0)+,D1 Suruhan di atas sama dengan turutan dua suruhan berikut: MOVE.W (A0),D1 ADDQ.L #2,A0 
 Rajah 4.7: Pengalamatan Daftar Alamat Tak Langsung.If you found this book useful, donate to the Gaza fund
  • 59. 4.10. Mod Prasusut 55 
 Rajah 4.8: Perlaksanaan suruhan MOVE.W (A0),D1. Contoh: Jika D0 berisi $FFFFFFFF, A0 berisi $00001100 dan lokasi $1100 hingga $1103 berisi $20, $30, $40 dan $50, apakah nilai D0 dan A0 selepas suruhan MOVE.W (A0)+,D0? Penyelesaian: Mula-mula satu kata bermula dari alamat $1100 disalin ke D0. Oleh itu D0 bernilai $FFFF2030. Kemudian A0 ditokok 2 (kerana saiz data yang dipindahkan ialah satu kata). Akhirnya, A0 bernilai $00001102. 4.10 Mod Prasusut Mod prasusut hampir sama dengan mod pascatokok. Bersama-sama dengan mod pascatokok, mod prasusut penting dalam olahan satu struktur data lain iaitu tindanan. Mod ini mengurangkan daftar alamat sebelum digunakan. Nilai yang disusut bergantung saiz data: 1 untuk byte, 2 untuk kata, 4 untuk kata panjang. Sebagai contoh, suruhan berikut MOVE.W -(A0),D1 sama dengan turutan dua suruhan berikut: SUBQ.L #2,A0 MOVE.W (A0),D1 Contoh: Jika D0 berisi $FFFFFFFF, A0 berisi $00001104 dan lokasi $1100 hingga $1103 berisi $20, $30, $40 dan $50, apakah nilai D0 dan A0 selepas suruhan MOVE.L (A0),D0? 
 Rajah 4.9: Mod pascatokok.If you found this book useful, donate to the Gaza fund
  • 60. 56 Bab 4. Mod Alamat 
 Rajah 4.10: Mod prasusut. Penyelesaian: Mula-mula A0 dikurangkan 4 kerana saiz data yang terlibat ialah kata panjang. Jadi A0 bernilai $00001100. Kemudian satu kata panjang bermula dari alamat yang terletak dalam A0 iaitu $1100 disalin ke D0. Jadi D0 bernilai $20304050. 4.11 Mod Daftar Alamat Tak Langsung dengan Ofset Mod alamat tak langsung dengan indeks berguna untuk mengendalikan jadual data atau matriks dua dimensi dengan membolehkan ofset dan indeks ditambah kepada daftar alamat. Mod daftar alamat tak langsung dengan ofset menambah nilai 16 bit bertanda kepada isi daftar alamat. Hasil tambah digunakan bagi mencapai data di dalam ingatan. Oleh itu alamat berkesan didapati dengan rumus ea ← (An) + d16 Semasa mencapai tatasusunan atau jadual, daftar alamat mengandungi alamat permulaan jadual, dan ofset menentukan kedudukan relatif unsur tersebut dari atas. Untuk jadual mengandungi data bersaiz byte, ofset ialah nombor unsur (0, 1, 2, dsb). Untuk jadual mengandungi kata atau kata panjang, ofset ialah integer yang mewakili nombor unsur darab 2 atau 4. Oleh kerana ofset ialah integer 16 bit bertanda, mod ini boleh mencapai -32768 ke belakang hingga +32767 alamat ke depan. Jika data bersaiz kata atau kata panjang, ini bersamaan 16382 kata atau 8191 kata panjang ke depan, sehingga 16384 kata atau 8192 kata panjang ke belakang. Rajah 4.11 menunjukkan kaedah pengiraan alamat berkesan. Nilai ofset dipanjangkan ke 32 bit sebelum ditambahkan kepada An. 
 Rajah 4.11: Mod daftar alamat tak langsung dengan ofset. Sebagai contoh, jika daftar alamat A0 mengandungi alamat permulaan jadual yang berisi nilai-nilai 16 bit, suruhan MOVE.W 6(A0),D0 mengisikan kata dengan indeks 3 ke dalam D0. Perhatikan bahawa nilai A0 tidak berubah. Mod alamat ini boleh juga digunakan dengan ofset negatif. Dalam kes ini, data yang dicapai terletak sebelum alamat yang ditunjuk oleh daftar alamat. Dalam suruhanIf you found this book useful, donate to the Gaza fund
  • 61. 4.12. Mod Daftar Alamat Tak Langsung dengan Indeks 57 
 (a) Offset positif. 
 (b) Offset negatif. Rajah 4.12: Perbezaan ofset positif dan negatif. MOVE.W -2(A0),D0 alamat berkesan ialah kandungan A0 tolak 2. (Lihat Rajah 4-16). Contoh: Jika D0 berisi $FFFFFFFF, A0 berisi $00001100 dan kandungan ingatan ialah seperti yang tertera, apakah isi D0 dan A0 selepas suruhan MOVE.W 6(A0),D0 dan MOVE.W 2(A0),D0? Penyelesaian: Suruhan MOVE.W 6(A0),D0 mencapai alamat $1106. Jadi D0 berubah menjadi $FFFF5555. Suruhan MOVE.W 2(A0),D0 menbaca alamat $10FE. Jadi D0 berubah menjadi $FFFF1111. Dalam kedua-dua kes, daftar A0 tidak berubah. 4.12 Mod Daftar Alamat Tak Langsung dengan Indeks Mod daftar alamat tak langsung dengan indeks mendapat alamat berkesan dengan menambah integer bertanda 8 bit dan isi daftar indeks (daftar data atau daftar alamat) kepada daftar alamat. Alamat berkesan didapati dengan rumus ea ← (An) + (Xn.s) + d8 (s = W, L) yang mana An ialah sebarang daftar alamat, Xn ialah sebarang daftar data atau daftar alamat, dan d8 ialah ofset bertanda 8 bit. Daftar Xn dikenali sebagai daftar indeks. Kandungan daftar indeks boleh digunakan sepenuhnya atau separuh sahaja dengan menambah .L atau .W selepas nama daftar indeks. Nilai indeks dan ofset dipanjangkan ke 32 bit sebelum ditambah kepada An. 
 Rajah 4.13: Mod daftar alamat tak langsung dengan indeks. Disebabkan ia menambahkan dua nilai kepada daftar alamat, mod alamat ini berguna untuk men- golah tatasusunan dua dimensi (matriks). Daftar alamat mengandungi alamat permulaan tatasusunan,If you found this book useful, donate to the Gaza fund
  • 62. 58 Bab 4. Mod Alamat manakala nilai ofset dan indeks menentukan kedudukan baris dan lajur dalam matriks. Sebagai contoh, suruhan MOVE.W $4(A0,D4.W),D1 menambahkan kandungan A0, kandungan kata bawah D4 dan nilai malar 4 untuk mendapat alamat kendalian. Mod alamat ini boleh digunakan bagi kes apabila nilai daftar alamat perlu ditambahkan kepada suatu ofset dinamik. Dalam kes ini, ofset menjadi sifar. Suruhan berikut dianggap sah. MOVE.W (A0,D4.W),D1 Bentuk suruhan di atas kerap digunakan apabila mengadakan jadual penukaran1 . Contoh: Tunjukkan bagaiama nilai 4 bit terendah dalam D0 boleh ditukar kepada nilai ASCII setara. Penyelesaian: Cebisan aturcara berikut menunjukkan bagaimana operasi ini boleh dilakukan. MOVEA.L #ASCII,A0 MOVE.B (A0,D0.W),D1 .... ASCII DC.B ’0123456789ABCDEF’ Mula-mula nilai dalam daftar D0 haruslah dipastikan berada dalam julat $0 hingga $F sahaja. Kemudian daftar A0 diset supaya menunjuk ke senarai yang mengandungi nilai ASCII 0 hingga 9 diikuti terus oleh A hingga F. Menambah nilai A0 kepada daftar D0 mendapatkan alamat satu aksara ASCII dalam jadual ini. Misalnya, nilai 0000 dalam 4 bit terendah D0 menghasilkan nilai ASCII 0 atau $30. Nilai 1010 pula menghasilkan ASCII A atau $41. 4.13 Mod PC Relatif dengan Ofset Mod ini menggunakan ofset 16 bit yang ditambah kepada PC untuk mendapat alamat berkesan. Alamat berkesan didapati dengan rumus ea ← (PC) + d16 Sebagai contoh, suruhan berikut: MOVE.W $1020(PC),D5 yang dilaksanakan dengan keadaan awal berikut: Ingatan Daftar 001020 AB PC 00001000 001021 CD D5 12345678 akan menghasilkan jawapan: Ingatan Daftar 001020 AB PC 00001004 001021 CD D5 1234ABCD 1 lookup tableIf you found this book useful, donate to the Gaza fund
  • 63. 4.14. Mod PC Relatif dengan Indeks dan Ofset 59 4.14 Mod PC Relatif dengan Indeks dan Ofset Mod ini menggunakan ofset 8 bit yang ditambah kepada PC dan satu daftar indeks untuk mendapat alamat berkesan. Alamat berkesan didapati dengan rumus ea ← (PC) + (X.s) + d8 (s = W, L) Sebagai contoh, suruhan berikut: MOVE.W $1020(PC,D0.W),D5 yang dilaksanakan dengan keadaan awal berikut: Ingatan Daftar 001026 FE PC 00001000 001027 DC D0 ABCD0006 D5 12345678 akan menghasilkan jawapan: Ingatan Daftar 001026 FE PC 00001000 001027 DC D0 ABCD0006 D5 1234FEDC Latihan 1. Nyatakan mod alamat yang digunakan dalam kendalian destinasi bagi suruhan-suruhan berikut: (a) MOVE.L #2,D4 (b) MOVE.L #3,A3 (c) MOVE.W #5,$1000 (d) MOVE.W #5,$10000 (e) MOVE.B D1,(A0) (f) MOVE.B $20,(A1)+ (g) MOVE.B D1,-(A0) (h) MOVE.W D7,2(A0,D3) 2. Anggap D0 berisi $00012345, D1 berisi $00000002 dan A0 berisi $00000200. Alamat $2000 hingga $2003 berisi $20, $40, $60 dan $80. Nyatakan isi keseluruhan D0 selepas melaksanakan setiap suruhan berikut: (a) MOVE.L #20,D0 (b) MOVE.W #$20,D0 (c) MOVE.B #’5’,D0 (d) CLR.W D0 (e) MOVE.B D1,D0 (f) MOVE.W (A0),D0 (g) MOVE.W 2(A0),D0If you found this book useful, donate to the Gaza fund
  • 64. 60 Bab 4. Mod Alamat (h) MOVE.W 2(A0,D1),D0 3. Apakah nilai D3 dan D4 selepas turutan berikut? ORG $800 MOVEQ #0,D3 MOVEQ #-1,D4 MOVE.W D3,D4 SWAP D4 END 4. Tulis turutan suruhan yang memadam kata atas D0 menggunakan suruhan SWAP dan CLR sahaja. 5. Tulis turutan suruhan yang menyalin kata atas D0 ke kata atas D1 tanpa mengubah kata rendah kedua-dua daftar. Gunakan sebarang daftar lain dengan bebas. 6. Tulis turutan suruhan yang menukarganti kata di alamat 1100dengankatadi1102. 7. Anggap A0 berisi $011200. Nyatakan isi A0 selepas melaksanakan suruhan-suruhan berikut: MOVE.L #$1200,A0 MOVE.W #$9000,A0 MOVE.W (A0),D0 MOVE.W (A0)+,D0 MOVE.L (A0),D0 MOVE.W (A0)+,-(A0)If you found this book useful, donate to the Gaza fund
  • 65. Bab 5 Suruhan Olahan Data Objektif • Memahami operasi suruhan olahan data • Memahami kesan suruhan kepada CCR Pengenalan Pemproses 68000 mempunyai suruhan-suruhan yang melakukan perubahan terhadap data. Kesemua suruhan olahan data melibatkan penggunaan ALU. Suruhan-suruhan dikategorikan sebagai aritmetik, logik, anjak dan putar, olahan bit‘’ dan BCD. Dalam hampir setiap keadaan, salah satu kendalian mestilah terletak dalam daftar data dan mengubah bendera-bendera CCR. 5.1 Suruhan ADD dan SUB Suruhan aritmetik paling asas tentunya suruhan ADD. Suruhan ini menambah kendalian punca kepada kendalian destinasi dan menyimpan hasil tambah di dalam destinasi. RTL bagi suruhan ini ialah destinasi + punca –¿ destinasi. Apabila menggunakan suruhan ADD biasa, salah satu kendalian mestilah daftar data. Bagi kendalian punca dalam mod terdekat, variasi ADDI digunakan yang membenarkan sebarang mod alamat destinasi. Formatnya ialah ADD <ea>,Dn ADD Dn,<ea> ADDI #<data>,<ea> Suruhan SUB menolak kendalian punca daripada kendalian destinasi. RTL bagi operasi ini ialah destinasi – punca → destinasi. Mod alamat yang dibenarkan serupa seperti suruhan ADD. SUB <ea>,Dn SUB Dn,<ea> SUBI #<data>,<ea> Salah satu kendalian mesti terletak dalam daftar. Contohnya, uruhan berikut menyebabkan. perutusan ralat dari penghimpun. ADD.W $1000,$2000 ; salah ni... Untuk memproses data dalam ingatan, ia perlu terlebih dahulu dipindahkan ke daftar data sebelum operasi tambah atau tolak dilakukan. 61If you found this book useful, donate to the Gaza fund
  • 66. 62 Bab 5. Suruhan Olahan Data Contoh: Tambah isi lokasi $502 dengan isi lokasi $504. Simpan jawapan di dalam $500. Penyelesaian: Mustahil untuk menambah ingatan dengan ingatan dengan satu suruhan. Turutan berikut mengatasi masalah ini dengan menyalin data yang perlu diolah ke dalam daftar D1. MOVE.W $502,D1 ADD.W $504,D1 MOVE.W D1,$500 Dalam bahasa perhimpunan, nama simbolik lebih sesuai berbanding alamat mutlak. Katakan lokasi $500 diberi label A, lokasi $502 dilabel B dan $504 dilabel C, masalah ini berupa A=B+C. Aturcara dibawah menunjukkan aturcara yang lengkap. 1 ;ATURCARA A=B+C 000400 2 ORG $400 000400 3239 00000502 3 TAMBAH MOVE.W B,D1 000406 D279 00000504 4 ADD.W C,D1 00040C 33C1 00000500 5 MOVE.W D1,A 6 ;SEKSYEN DATA 000500 7 ORG $500 000500 8 A DS.W 1 000502 9 B DS.W 1 000504 10 C DS.W 1 000506 11 END 5.2 Kesan ADD dan SUB Terhadap Bendera Daftar CCR mengandungi lima bit yang nilainya melambangkan hasil operasi aritmetik. Setiap bit ini dikenali sebagai bendera. Bendera berguna untuk mengawal aliran aturcara dengan kombinasi suruhan Bcc yang akan diliputi dalam Bab 6. Berikut disenaraikan semula bendera-bendera CCR dan cara bagaimana setiap bendera terkesan oleh operasi tambah dan tolak. Bit 0, Carry (C) Bendera ini diset ke 1 jika operasi tambah menghasilkan bawa atau operasi tolak menghasilkan pinjam. Berguna untuk menguji kesahan operasi terhadap integer tak bertanda. Bit 1, Overflow (V) Bendera ini berguna hanya untuk operasi terhadap integer bertanda. Ia diset ke 1 jika penambahan dua nombor sama tanda (atau penolakan dua nombor berlainan tanda) mengubah tanda destinasi. Bit 2, Zero (Z) Bendera ini diset ke 1 jika hasil operasi bersamaan sifar, dipadam ke 0 sebaliknya. Bit 3, Negative (N) Bendera ini diset ke 1 jika operasi menghasilkan negatif, dipadam ke 0 sebaliknya. Ia adalah bit teratas dalam kendalian. Bit 4, Extend (X) Berfungsi sebagai bawa untuk operasi berbilang kata. Nilainya sama dengan bit C untuk operasi tambah dan tolak. Penentuan nilai untuk bendera N dan Z paling mudah. Bagi bendera C dan V, penentuannya memerlukan beberapa pertimbangan yang diliputi di bawah.If you found this book useful, donate to the Gaza fund
  • 67. 5.2. Kesan ADD dan SUB Terhadap Bendera 63 
 Rajah 5.1: Daftar kod syarat. Penghasilan Bawa Julat untuk integer tak bertanda, julat nilai yang boleh disimpan ialah 0 hingga 2n-1. Berikut ialah julat nilai untuk tiga saiz data yang dikendalikan oleh 68000: Jenis Nilai minimum Nilai maksimum Byte 0 28 –1 = 255 Kata 0 2 16 –1 = 65535 Kata panjang 0 232 –1 = 4294967295 Bagi menentukan nilai bendera C, kedua-dua kendalian dianggap integer tak bertanda. Katakan penambahan dilakukan dengan suruhan ADD.B D0,D1. Jika D0 mengandungi 128 dan D1 berisi 15, hasil tambah adalah 143: 128 10000000 + 15 00001111 143 (0)00001111 Hasil tambah, 143, masih di dalam julat yang boleh disimpan dalam 8 bit. Oleh itu bendera C bernilai sifar. Jika D0 mengandungi 128 dan D1 berisi 143, hasil tambah adalah 271 jika penambahan dilakukan dengan tangan. Bagaimanapun, ini melebihi nilai maksimum: 128 10000000 + 143 10001111 15 (1)00001111 Nilai 271 memerlukan 9 bit sedangkan ruang yang disediakan hanya 8 bit. Oleh itu, jawapan yang didapati ialah 15 dan bendera C diset kepada 1. Penghasilan Limpahan Julat untuk integer tak bertanda, julat nilai yang boleh disimpan ialah -2n-1 hingga 2n-1-1. Berikut ialah julat nilai bertanda untuk tiga saiz data yang dikendalikan oleh 68000: Jenis Nilai minimum Nilai maksimum Byte –27 = –128 +27 –1 = +127 Kata –215 = –32768 +215 –1 = +32767 Kata panjang –231 = –2147483648 +231 –1 = +2147483647 Bagi menentukan nilai bendera V, kedua-dua kendalian dianggap integer bertanda. Katakan penambahan dilakukan dengan suruhan ADD.B D0,D1. Jika D0 dan D1 kedua-duanya mengandungi +30, hasil tambah adalah +60: +30 00011110 + +30 00011110 +60 00111100If you found this book useful, donate to the Gaza fund
  • 68. 64 Bab 5. Suruhan Olahan Data Di sini, hasil tambah masih di dalam julat yang sah sebagai integer bertanda 8 bit. Oleh itu bendera V bernilai sifar. Jika D0 dan D1 kedua-duanya mengandungi -3, hasil tambah adalah -6: –3 11111101 + –3 11111101 –6 11111010 Hasil tambah iaitu -6 masih di dalam julat yang sah sebagai integer bertanda 8 bit. Oleh itu bendera V bernilai sifar. Perhatikan bahawa nilai bendera C dibuang begitu sahaja. Jika D0 mengandungi +127 dan D1 mengandungi +2, hasil tambah yang dijangka ialah +129: +127 01111111 + +2 00000010 –127 10000001 Bagaimanapun, operasi ini menghasilkan jawapan yang tidak munasabah iaitu -127. Ini kerana nilai +129 melebihi nilai maksimum integer bertanda 8 bit. Oleh itu bendera V diset ke 1. Satu kaedah menyemak jawapan ialah dengan melihat tanda kendalian input dan output. Di sini nilai positif dan positif menghasilkan negatif, jadi limpahan telahpun berlaku. Jika D0 mengandungi -127 dan D1 mengandungi -2, hasil tambah yang dijangka ialah -129: –127 10000001 + +2 11111110 +127 01111111 Bagaimanapun, operasi ini juga menghasilkan jawapan yang tidak munasabah iaitu +127. Ini kerana nilai -129 kurang daripada nilai minimum integer bertanda 8 bit. Oleh itu bendera V diset ke 1. Operasi ini juga mengakibatkan perubahan tanda kendalian input dan output. Penambahan nilai negatif dengan negatif sepatutnya memberi jawapan negatif tetapi limpahan yang berlaku menyebabkan jawapannya positif. Berikut ditunjukkan kesan suruhan ADD s,d terhadap bendera V. Sebagai kesimpulan, V sentiasa sifar untuk penambahan nilai berbeza tanda, dan mungkin bernilai 1 untuk penambahan sama tanda. Semasa penambahan sama tanda, V bernilai 1 jika tanda destinasi berubah. Punca Destinasi Destinasi Limpahan s d s + d → d’ V Pos 0 Pos Pos Neg 1 Pos Neg Tak kisah 0 Neg Pos Tak kisah 0 Neg 0 Neg Neg Pos 1 Kesimpulan bagi suruhan tambah: • Limpahan tidak mungkin berlaku jika kedua-dua kendalian tidak sama tanda. • Limpahan berlaku jika kedua-dua kendalian sama tanda DAN destinasi berubah tanda. Di bawah pula ialah kesan suruhan SUB s,d terhadap bendera V. Bendera ini bernilai 1 jika penolakan dua nilai berlainan tanda mengubah tanda destinasi. Jadual 5.1 menyenaraikan kesan semua suruhan terhadap CCR.If you found this book useful, donate to the Gaza fund
  • 69. 5.3. Suruhan Darab 65 Punca Destinasi Destinasi Limpahan s d d – s → d’ V Pos Pos Tak kisah 0 Neg 0 Pos Neg Pos 1 Pos 0 Neg Pos Neg 1 Neg Neg Tak kisah 0 Kesimpulan bagi suruhan tolak: • Limpahan tidak mungkin berlaku jika kedua-dua kendalian sama tanda. • Limpahan berlaku jika kedua-dua kendalian tidak sama tanda DAN destinasi berubah tanda. Suruhan ADDQ, SUBQ dan NEG Suruhan ADDQ (add quick) dan SUBQ (subtract quick) adalah kes khas mod alamat terdekat yang membolehkan nilai tak bertanda antara 1 hingga 8 ditambah atau ditolak daripada daftar atau ingatan. Kedua-dua suruhan ini menggunakan mod terdekat sahaja untuk kendalian punca. Bagaimanapun, kendalian destinasi boleh menggunakan sebarang mod. Sama seperti suruhan MOVEQ, kelebihan suruhan pantas ini ialah operasi lebih pantas dan suruhan lebih pendek. Suruhan NEG menafikan nilai di dalam kendalian. RTL bagi suruhan ini ialah 0 – X → X. Sebarang saiz kendalian dibenarkan. 5.3 Suruhan Darab Pemproses 68000 boleh mendarab dua nilai 16 bit bagi mendapatkan hasil darab 32 bit. Terdapat menyediakan suruhan-suruhan yang berbeza untuk pendaraban integer bertanda dan tidak bertanda. Ini berbeza dengan suruhan tambah atau tolak yang menggunakan suruhan yang sama bagi nombor bertanda atau tidak bertanda. Sintaks untuk suruhan darab ialah MULU <ea>,Dn MULS <ea>,Dn Suruhan MULU (multiply unsigned) adalah untuk kendalian tak bertanda manakala MULS (multiply signed) adalah untuk kendalian bertanda., Dalam kedua-dua suruhan, kendalian punca ditetapkan kepada 16 bit dan boleh menggunakan sebarang mod alamat. Kendalian destinasi ialah kata rendah sebarang daftar data. Hasil darab bersaiz 32 bit yang memenuhi keseluruhan daftar destinasi. Ini bermakna sebarang nilai dalam kata tinggi daftar tersebut diabaikan semasa operasi darab dan dihapuskan oleh jawapan yang terhasil. Hasil operasi darab tidak mungkin meyebabkan bawa atau limpahan. Bagi kendalian-kendalian tidak bertanda melalui suruhan MULU, nilai terbesar yang terhasil ialah $FFFF × $FFFF = 65535 × 65535 atau 4294836225. Nilai ini masih di dalam julat yang boleh ditampung oleh daftar 32 bit. Bagi kendalian bertanda dengan suruhan MULS, hasilnya adalah positif atau negatif bergantung kepada tanda kedua-dua kendalian. Julat nilai bertanda 16 bit ialah -215 hingga +215 - 1 atau - 32768 hingga +32767. Jika dua nilai paling negatif didarab, hasilnya ialah -215 × -215 = 230 atau 1073741824. Nilai negatif paling besar ialah -215 × (+215 - 1) atau 1073709056. Kedua-dua nilai ini juga masih mampu ditampung dalam 32 bit bermakna sebarang hasil pendaraban bertanda tidak mungkin menyebabkan limpahan. Oleh itu, selepas sebarang operasi darab, bendera C dan V sentiada bernilai sifar. Hanya terdapat satu kombinasi saiz kendalian. Pengaturcara perlu memastikan kedua-dua kendalian bersaiz 16 bit sebelum memulakan pendaraban.If you found this book useful, donate to the Gaza fund
  • 70. 66 Bab 5. Suruhan Olahan Data Jadual 5.1: Kesan suruhan terhadap CCR Suruhan X N Z V C Suruhan X N Z V C ABCD * ? * ? * MOVE SR * * * * * ADD * * * * * MOVE CCR * * * * * ADDA – – – – – MOVE USP – – – – – ADDI * * * * * MOVEA – – – – – ADDQ * * * * * MOVEM – – – – – ADDX * * * * * MOVEP – – – – – AND – * * 0 0 MOVEQ – * – 0 0 ANDI – * * 0 0 MULS – * * 0 0 ANDI CCR * * * * * MULU – * * 0 0 ANDI SR * * * * * NBCD * ? * ? * ASL * * * * * NEG * * * * * ASR * * * * * NEGX * * * * * Bcc – – – – – NOP – – – – – BCHG – – * – – NOT – * * 0 0 BCLR – – * – – OR – * * 0 0 BRA – – – – – ORI – * * 0 0 BSET – – * – – ORI CCR * * * * * BSR – – – – – ORI SR * * * * * BTST – – * – – PEA – – – – – CHK – * ? ? ? RESET – – – – – CLR – 0 1 0 0 ROL – * * 0 * CMP – * * * * ROL – * * 0 * CMPA – * * * * ROXL * * * 0 * CMPI – * * * * ROXR * * * 0 * CMPM – * * * * RTD – – – – – DBcc – – – – – RTE * * * * * DIVS – * * * 0 RTR * * * * * DIVU – * * * 0 RTS – – – – – EOR – * * 0 0 SBCD * ? * ? * EORI – * * 0 0 Scc – – – – – EORI CCR * * * * * STOP * * * * * EORI SR * * * * * SUB * * * * * EXG – – – – – SUBA – – – – – EXT – * * 0 0 SUBI * * * * * JMP – – – – – SUBQ * * * * * JSR – – – – – SUBX * * * * * LEA – – – – – SWAP – * * 0 0 LINK – – – – – TAS – * * 0 0 LSL * * * 0 * TRAP – – – – – LSR * * * 0 * TRAPV – – – – – MOVE – * * 0 0 TST – * * 0 0 MOVE SR – – – – – UNLK – – – – – * Berubah menurut hasil operasi – Tidak berubah 0 Dipadam 1 Diset ? Tidak tertakrifIf you found this book useful, donate to the Gaza fund
  • 71. 5.4. Suruhan Bahagi 67 Contoh 1: Jika D0 berisi $10100020 dan D1 berisi $FFFF0020, apakah kesan suruhan MULU D1,D0? Apakah kesan MULS D1,D0? MOVE.W #256,D3 MULU #2,D3 Penyelesaian: Suruhan MULU D1,D0 mendarab kata rendah D0 ($20) dengan kata rendah D1 ($20) menghasilkan nilai $400. Keseluruhan D0 digunakan untuk menyimpan jawapan. Hasilnya, D0 bernilai $00000400. Kesan MULS D1,D0 adalah sama dengan D0 juga mendapat jawapan $00000400. Contoh 2: Jika D0 berisi $FFFFFFFF, apakah kesan suruhan MULU #$FFFF,D0? Apakah kesan MULS D1,D0? Penyelesaian: Suruhan MULU #$FFFF,D0 menghasilkan menganggap kedua-dua kendalian tidak bertanda. Jadi $FFFF bernilai 65535. Suruhan ini melakukan operasi 65535 × 65535 yang menghasilkan D0 bersamaan $FFFE0001 bersamaan 4294836225. Bagi suruhan MULS #$FFFF,D0, kedua-dua kendalian dianggap bertanda. Suruhan ini pula melakukan operasi -1 × -1 menghasilkan D0 bersamaan $00000001 atau 1. 5.4 Suruhan Bahagi Suruhan yang melakukan operasi bahagi dengan 68000 ialah DIVU dan DIVS. Format suruhan ini ialah DIVU punca,Dn DIVS punca,Dn Suruhan DIVU (divide unsigned) adalah untuk kendalian tak bertanda. Suruhan DIVS (divide signed) adalah untuk kendalian bertanda. Suruhan- suruhan ini melakukan operasi destinasi(31 : 0) / punca(15 : 0) → destinasi(15 : 0) destinasi(31 : 0) % punca(15 : 0) → destinasi(31 : 16) yang mana simbol / adalah operasi bahagi dan simbol % adalah operasi modulo atau baki. Semasa pembahagian, nilai 32 dalam daftar destinasi dibahagi oleh nilai 16 bit dalam kendalian punca. Hasil bahagi diletakkan dalam kata rendah daftar destinasi. Baki diletakkan dalam kata tinggi daftar destinasi. Dua kes khas boleh muncul semasa melakukan operasi bahagi. Kes khas pertama ialah hasil bahagi yang melimpah atau tidak mampu disimpan dalam 16 bit. Limpahan akan mengakibatkan bendera V diset tetapi kendalian-kendalian tidak diusik. pembahagian dengan sifar. Kes khas kedua ialah pembahagian dengan sifar. Kes ini mengakibatkan perangkap yang menye- babkan pemproses cuba melaksanakan pengendali kekecualian. Dalam sistem mudah tanpa pengendali kekecualian, sistem akan terkandas dan hanya boleh digunakan semula dengan mereset keseluruhan sistem. Untuk sistem mudah, pengaturcara perlu memastikan kendalian punca tidak bernilai sifar sebelum memulakan pembahagian. Dalam sistem lebih canggih yang menyediakan pengendali kekecualian, sistem boleh pulih dari perangkap sambil mematikan aturcara yang bermasalah atauIf you found this book useful, donate to the Gaza fund
  • 72. 68 Bab 5. Suruhan Olahan Data memberi mesej yang mesra kepada pengguna. Topik kekecualian dan perangkap diliputi lebih lanjut dalam Bab 13. Sama seperti operasi darab, hanya terdapat satu kombinasi saiz kendalian bagi operasi bahagi. Pengaturcara perlu memastikan kendalian destinasi dan punca masing-masing bersaiz 32 dan 16 bit sebelum memulakan pendaraban. Contoh 1: Jika D0 berisi $FFFF0003 dan D3 berisi $00000014, apakah kesan DIVU D0,D3? Penyelesaian: Operasi yang dilakukan ialah $00000014 ÷ $0003 = 20 ÷ 3. Hasil bahagi ialah 6 dengan baki 2. Oleh itu, D3 akan berisi $00020006 yang mana kata tinggi menyimpan baki dan kata rendah menyimpan hasil bahagi. Contoh 2: Jika D4 berisi $00040000, apakah kesan DIVU #2,D4? Penyelesaian: Nilai $40000 dibahagi 2 menghasilkan $20000. Hasil bahagi ini memerlukan 18 bit sedangkan ruang yang disediakan untuk hasil bahagi hanya 16 bit. Suruhan ditamatkan dengan kendalian tidak berubah dan bendera V diset ke 1. 5.5 Mengolah Kendalian Berlainan Saiz Dalam operasi tambah dan tolak, saiz dan jenis dua kendalian yang diolah mestilah sama. Kendalian yang kecil mestilah dipanjangkan kepada saiz kendalian yang lebih besar. Dalam operasi darab dan bahagi, saiz kendalian tidak boleh dipilih. Di sini, kita juga perlu mengubah saiz data untuk memenuhi kehendak suruhan. Suruhan EXT (extend) memanjangkan kendalian bertanda dalam daftar data. Sintaksnya ialah EXT.W Dn EXT.L Dn Penentu saiz dalam suruhan melambangkan saiz hasil operasi. Suruhan EXT.W (Rajah 5.2(a)) memanjangkan data dari byte ke kata. Ia menyalin bit 7 ke bit 8 hingga 15. Bit 16 hingga 31 tidak terkesan. Suruhan EXT.L (Rajah 5.2(b)) memanjangkan data dari kata ke kata panjang. Ia menyalin bit 15 ke bit 16 hingga 31. Data 8 bit tidak boleh dipanjangkan ke 32 bit dalam satu langkah. 
 (a) Suruhan EXT.W. 
 (b) Suruhan EXT.L. Rajah 5.2: Suruhan EXT.If you found this book useful, donate to the Gaza fund
  • 73. 5.6. Suruhan Logik 69 Contoh 1: Tambahkan byte bertanda dalam D0 kepada kata bertanda dalam D1. Penyelesaian: Apabila nilai 8 bit ditambah kepada nilai 16 bit, nilai 8 bit perlu dipanjangkan menjadi 16 bit sebelum penambahan dibuat. Turutan berikut melakukan operasi yang dikehendaki. EXT.W D0 ADD.W D0,D1 Contoh 2: Tambahkan byte bertanda dalam alamat $2000 kepada kata panjang dalam D7. Penyelesaian: Untuk menambah byte dan kata panjang, byte mesti dipanjangkan menjadi 32 bit. Ini perlu dilakukan dalam dua langkah dan data berkenaan mesti dibawa ke dalam daftar data dahulu. MOVE.B $2000,D0 EXT.W D0 EXT.L D0 ADD.L D0,D7 Dalam penambahan nilai-nilai tak bertanda berbeza saiz, kaedah yang digunakan adalah berbeza. Untuk memanjangkan nilai, mula-mula kosongkan satu daftar kemudian masukkan data yang ingin dipanjangkan. Contoh 3: Darab byte terendah dalam D0 dengan kata dalam D1. Anggap kedua-dua nilai tak bertanda. Penyelesaian: Pilih sebarang daftar data lain yang tidak digunakan dan gunakannya untuk menyimpan nilai yang telah dipanjangkan. Turutan berikut melakukan operasi yang dikehendaki. CLR.W D2 MOVE.B D0,D2 MULU D2,D1 5.6 Suruhan Logik Suruhan-suruhan logik menganggap kendaliannya sebagai sekelompok bit yang diolah secara berasin- gan. Setiap bit mewakili satu pembolehubah logikal. Sebagai contoh, daftar kod syarat mengandungi lima bit berlainan dan setiap bit boleh diset atau diuji berasingan. Setiap pembolehubah logikal hanya boleh mempunyai dua keadaan bergantung aplikasi iaitu BENAR atau PALSU, ON atau OFF, 0 atau 1, dan sebagainya. Suruhan-suruhan logik adalah AND, OR, EOR dan NOT. Kesan setiap suruhan operasi berkenaan dalam aljabar Boolean (Jadual 5.2). Oleh itu, suruhan-suruhan ini juga dikenali sebagai suruhan Boolean. Berikut adalah sintaks untuk suruhan-suruhan logikal.If you found this book useful, donate to the Gaza fund
  • 74. 70 Bab 5. Suruhan Olahan Data Jadual 5.2: Jadual kebenaran operasi logikal A B NOT A A AND B A OR B A EOR B 0 0 1 0 0 0 0 1 1 0 1 1 1 0 0 0 1 1 1 1 0 1 1 0 AND <ea>,Dn AND Dn,<ea> ANDI #data,<ea> OR <ea>,Dn OR Dn,<ea> ORI #data,<ea> EOR <ea>,Dn EORI #data,<ea> NOT <ea> Suruhan-suruhan ini boleh digunakan untuk kendalian dalam daftar data atau ingatan tetapi tidak dalam daftar alamat. Selepas setiap operasi, bit C dan V sentiasa dipadam. Bit N dan Z diset menurut hasil. Mod-mod alamat yang dibenarkan tidak seragam bagi kesemua suruhan. Suruhan AND dan OR boleh menggunakan tiga mod alamat tetapi suruhan EOR hanya mempunyai dua mod alamat. Suruhan ANDI, ORI dan EORI menggunakan nilai terdekat sebagai kendalian punca. Suruhan AND Suruhan AND memadam bit tertentu dalam destinasi. Pemilihan bit dilakukan dalam kendalian punca. Nilai 1 dalam sesuatu kedudukan dalam punca mengekalkan nilai bit tersebut dalam destinasi. Nilai 0 memadam bit berkenaan. Kendalian punca dikenali sebagai topeng kerana ia menutup atau melindungi bit-bit yang tidak dikehendaki dalam destinasi. Ini bersamaan dengan kaitan aljabar Boolean berikut: A∧0 = 0 A∧1 = A Contoh: Berikan suruhan yang memadam kesemua bit kecuali bit 0-3 dalam byte terendah D0. Apa berlaku jika D0 mengandungi $DA? Penyelesaian: Suruhan yang sesuai ialah ANDI.B #%00001111,D0. Radiks perduaan lebih sesuai digunakan untuk memudahkan kesan suruhan difahami. Jika D0 mengandungi $DA, suruhan ini melakukan operasi 1101 10102 DAN 0000 11112 menjadikan nilai D0 baru 0000 10102 atau $0A Suruhan OR Suruhan OR mengeset bit tertentu dalam destinasi. Pemilihan bit dilakukan dalam kendalian punca. Nilai 1 dalam sesuatu kedudukan dalam punca mengeset nilai bit tersebut dalam destinasi. Nilai 0 mengekalkan nilai asal. Ini bersamaan dengan kaitan aljabar Boolean berikut:If you found this book useful, donate to the Gaza fund
  • 75. 5.6. Suruhan Logik 71 A∨0 = A A∨1 = 1 Contoh: Berikan suruhan yang mengeset bit 5-7 dalam D0. Apa berlaku jika D0 mengandungi $A22D? Penyelesaian: Suruhan yang sesuai ialah ORI.W #%11100000,D0. Suruhan ORI.B ORI.B #%11100000,D0 atau ORI.L #%11100000,D0 boleh juga digunakan dan kesannya sama. Jika D0.W mengandungi $A22D, suruhan ini melakukan operasi 1010 0010 0010 11012 OR 0000 0000 1110 00002 menjadikan nilai D0 baru 1010 0010 1110 11012 atau $A2ED. Suruhan EOR Suruhan EOR menyongsangkan bit tertentu dalam destinasi. Pemilihan bit dilakukan dalam kendalian punca. Nilai 1 dalam sesuatu kedudukan dalam punca menyongsangkan nilai bit tersebut dalam destinasi. Nilai 0 mengekalkan nilai asal. Operasi suruhan ini bersamaan dengan kaitan aljabar Boolean berikut: A⊕0 = A A⊕1 = A Contoh: Berikan suruhan yang menyongsangkan nibel terendah dalam D0. Apa berlaku jika byte terendah D0 mengandungi $2D? Penyelesaian: Suruhan yang sesuai ialah EORI.B #%00001111,D0. Jika D0.B mengandungi $2D, suruhan ini melakukan operasi 0010 11012 EOR 0000 11112 menjadikan nilai D0 baru 0010 00102 atau $22. Suruhan NOT Suruhan NOT menyongsangkan setiap bit. Ia juga boleh dianggap melakukan operasi pelengkap satu jika keseluruhan kendalian dianggap suatu nombor. Contoh: Berikan suruhan yang menyongsangkan kata rendah dalam D0. Apakah hasilnya jika D0 mengandungi $12345678? Penyelesaian: Suruhan NOT.W D0 menyongsangkan kata rendah D0. Suruhan ini akan menyongsangkan nilai $5678 = 0101 0110 0111 1000 menjadi $A987 = 1010 1001 1000 0111. Oleh itu D0 akan menjadi $1234A987.If you found this book useful, donate to the Gaza fund
  • 76. 72 Bab 5. Suruhan Olahan Data 5.7 Mengubah Bendera CCR Sesetengah operasi aritmetik dan logik memerlukan bendera-bendera dalam byte rendah SR yakni daftar CCR berada dalam keadaan tertentu. Suruhan-suruhan logik boleh digunakan bagi mengubah daftar CCR. Selain itu, suruhan MOVE juga boleh digunakan untuk menetapkan secara langsung nilai-nilai bendera yang dikehendaki. Berikut adalah suruhan- suruhan tersebut: MOVE SR,<ea> MOVE <ea>,CCR ANDI #data,CCR EORI #data,CCR ORI #data,CCR Untuk menyalin kandungan CCR, gunakan suruhan MOVE SR,<ea> kemudian gunakan hanya byte terendah. Bendera-bendera dalam byte atas SR yakni byte sistem adalah untuk kegunaan sistem dan jarang benar perlu diubah. Rujuk bab 13 untuk keterangan lanjut penggunaan byte sistem. Contoh: Beri suruhan yang menjadikan bit X bernilai 1. Penyelesaian: Suruhan ORI #$10,CCR menjadikan X bernilai 1. Contoh: Beri suruhan yang memadam bit Z. Penyelesaian: Suruhan AND #%11111011,CCR menjadikan X bernilai 1. 5.8 Suruhan Anjak dan Putar Suruhan anjak dan putar menggerakkan bit-bit dalam kendalian ke kiri atau kanan. Terdapat lapan suruhan suruhan anjak dan putar dalam tiga kelompok: • anjak aritmetik • anjak logik • putar Mod alamat yang dibenarkan untuk kelapan-lapan suruhan adalah sama. Berikut disenaraikan sintaks suruhan-suruhan ini yang mana op melambangkan salah satu suruhan anjak atau putar. op Dx,Dy op #<data>,Dn op <ea> Suruhan dengan format op Dx,Dy dinamai anjakan dinamik daftar. Saiz kendalian ialah B, W atau L.Daftar Dy ialah daftar yang dianjak. Jumlah anjakan ialah 0 hingga 63 yang ditetapkan dalam 6 bitIf you found this book useful, donate to the Gaza fund
  • 77. 5.8. Suruhan Anjak dan Putar 73 terendah Dy (kiraan modulo 64). Bagaimanapun, nilai maksimum yang praktikal digunakan ialah 32 sahaja. Suruhan dengan format op #<data>,Dn dinamai anjakan statik daftar. Saiz kendalian ialah B, W atau L. Jumlah anjakan terhadap daftar Dn ditentukan oleh <kiraan> yang boleh mempunyai nilai 1 hingga 8. 
 Rajah 5.3: Suruhan anjak dan putar. Suruhan dengan format op #<data> ialah anjakan ingatan yang mana sebarang mod alamat dibenarkan kecuali relatif PC. Jumlah anjakan ialah 1 dan saiz kendalian ialah 16 bit sahaja. Kesan suruhan anjakan dan putar kepada bendera berbeza-beza menurut operasi yang terbabit. Bit N dan Z diset seperti suruhan-suruhan lain iaitu N menurut nilai bit tanda dan Z diset jika hasil operasi sifar. Bit V diset jika bit tanda berubah nilai pada sebarang masa semasa operasi anjakan. Bit C dan V diset menurut bit terakhir dianjak keluar. Bagaimanapun, bit C dipadam bagi anjakan sifar tetapi bit V tidak terkesan bagi anjakan sifar. Suruhan Anjak Aritmetik Suruhan ASL (arithmetic shift left) menganjak maklumat secara aritmetik ke kiri. Kesannya sama dengan mendarab kendalian dengan dua bagi setiap anjakan. Bit yang dianjak keluar dari kiri disalin ke bendera C dan X, sementara 0 dianjak masuk dari kanan. Suruhan ASR (arithmetic shift right) menganjak maklumat secara aritmetik ke kanan. Kesannya sama dengan membahagi kendalian dengan dua bagi setiap anjakan. Nilai kendalian dianggap integer bertanda. Bit yang dianjak keluar dari kanan disalin ke bendera C dan X, sementara bit tanda dianjak masuk semula ke kedudukannya yang asal. Contoh: Jika D1.W mengandungi 1638410 , apakah kesan ASR #1,D1?If you found this book useful, donate to the Gaza fund
  • 78. 74 Bab 5. Suruhan Olahan Data Penyelesaian: Nilai 1638410 sama dengan 0100 0000 0000 00002 . Jika dianjak ke kanan sekali, nilai ini menjadi 0010 0000 0000 00002 atau 819210 . Contoh: Jika D3.W mengandungi -2010, apakah kesan ASR #2,D3? Penyelesaian: Nilai -2010 sama dengan 1111 1111 1110 11002 . Jika dianjak ke kanan dua kali secara aritmetik, bit tanda dimasukkan semula dari kiri menyebabkan D3 menjadi 1111 1111 1111 10112 atau -510 . Contoh: Apakah kesan turutan berikut? ASL #1,D0 ASL #1,D0 ASL #1,D0 Penyelesaian: Menganjak D0 ke kiri sekali bererti mendarab dengan dua. Jika D0 dianjak sebanyak tiga kali, ini bersamaan dengan menganjaknya 2 × 2 × 2 = 8 kali. Suruhan-suruhan di atas boleh juga ditulis semula sebagai ASL #3,D0. Anjak aritmetik ke kiri mendarab nilai bertanda dengan 2. Anjak aritmetik ke kanan membahagi den- gan 2. Anjak logik mendarab atau membahagi nilai-nilai tidak bertanda. Suruhan putar menyebabkan bit-bit yang dianjak keluar dimasukkan semula di hujung bertentangan Suruhan Anjak Logikal Suruhan LSL (logical shift left) menganjak maklumat secara aritmetik ke kiri. Kesannya sama dengan mendarab kendalian dengan dua bagi setiap anjakan. Bit yang dianjak keluar dari kiri disalin ke bendera C dan X, sementara 0 dianjak masuk dari kanan. Sebenarnya suruhan ini langsung tidak berbeza dengan suruhan ASL. Suruhan LSR (logical shift right) menganjak maklumat secara aritmetik ke kanan. Kesannya sama dengan membahagi kendalian dengan dua bagi setiap anjakan. Nilai kendalian dianggap integer tidak bertanda. Bit yang dianjak keluar dari kanan disalin ke bendera C dan X, sementara 0 dianjak masuk dari kiri. Contoh: Jika D3.W mengandungi 3276810, apakah kesan LSR #2,D3? Penyelesaian: Nilai 3276810 sama dengan 1000 0000 00002. Jika dianjak ke kanan dua kali secara logikal, 0 dimasukkan semula dari kiri menyebabkan D3 menjadi 0010 0000 0000 00002 atau 819210.If you found this book useful, donate to the Gaza fund
  • 79. 5.9. Suruhan Olahan Bit 75 Suruhan Putar Suruhan putar menyerupai suruhan anjak kecuali bit yang dianjak keluar dimasukkan semula untuk membentuk satu lingkaran. Untuk ROL dan ROR, bit yang dianjak keluar disuap balik. Suruhan ROL (rotate left) memutar kendalian ke kiri. Suruhan ROR (rotate right) memutar kendalian ke kanan. Contoh: Berikan suruhan yang menukarganti byte-byte dalam kata rendah D0. Penyelesaian: Suruhan yang boleh digunakan ialah ROR.W #8,D0 atau ROL.W #8,D0. Arah putaran tidak mengubah hasilnya kerana setelah 8 anjakan, byte tinggi akan tetap bertukar tempat dengan byte rendah. Suruhan Putar Menerusi X Suruhan putar menerusi X membolehkan data baru disisipkan di celah- celah kendalian. Ini bermakna bendera X menjadi sebahagian daripada lingkaran. Ia membolehkan kita memutar atau menganjak suatu daftar ”maya” yang lebih besar daripada 32 bit. Suruhan ROXL (rotate left through X) memutarkan kendalian ke kiri menerusi X. Suruhan ROXR (rotate right through X) memutarkan kendalian ke kanan menerusi X. Contoh: Jika daftar D0 dan D1 dianggap suatu daftar maya 64 bit dengan D0 mewakili bit 63-32 dan D1 mewakili 31-0, apakah turutan suruhan yang menganjak daftar maya ini sebanyak 2 bit ke kiri? Penyelesaian: Masalah ini diselesaikan dengan turutan ASL.L #1,D1 ROXL.L #1,D0 ASL.L #1,D1 ROXL.L #1,D0 Perhatikan bahawa kita boleh memindahkan hanya satu bit dari D1 ke D0 dalam setiap langkah. 5.9 Suruhan Olahan Bit Suruhan AND, OR, atau EOR boleh mengeset, memadam atau menyongsangkan sekelompok bit dalam kendalian tetapi pemproses 68000 menyediakan suruhan alternatif yang hanya beroperasi terhadap satu bit setiap kali. Terdapa empat suruhan olahan bit. Suruhan ini diringkaskan di dalam jadual di bawah Setiap suruhan merakamkan nilai bit dalam bendera Z. Bendera Z diberi nilai songsangan bit yang diolah. Bagi destinasi daftar, saiz data ialah kata panjang dan nombor bit adalah modulo 32. Bagi destinasi ingatan, saiz data ialah byte dan nombor bit adalah modulo 8.If you found this book useful, donate to the Gaza fund
  • 80. 76 Bab 5. Suruhan Olahan Data Mnemonik Takrifan Operasi BTST Bit test Ubah Z sahaja. Bit tidak diubah. BCLR Bit clear Padam bit menjadi logik 0. BSET Bit set Set bit menjadi logik 1. BCHG Bit change Songsangkan bit. Sintaks suruhan olahan bit adalah seperti berikut: BTST Dn,<ea> BTST #data,<ea> BCLR Dn,<ea> BCLR #data,<ea> BSET Dn,<ea> BSET #data,<ea> BCHG Dn,<ea> BCHG #data,<ea> Contoh: Alamat $FF8000 mengandungi $AA. Apakah kesan suruhan BTST.B #3,$FF8000? Penyelesaian: Nilai perduaan di dalam $FF8000 ialah 101010102. Suruhan ini hanya menguji bit 3 dan mengubah bendera Z ke 0 kerana bit 3 adalah 1. Contoh: D3 dan D5 masing-masing mengandungi $74762600 dan $0000000D. Apakah kesan suruhan BCLR.L D5,D3? Penyelesaian: Daftar D5 menyatakan bit ke-13 dalam D3 ialah bit yang perlu diuji dan dipadam. Kata tinggi D3 tidak terkesan kerana perubahan berlaku dalam kata rendah. Kata rendah dalam D3 ialah 0010 0110 0000 00002. Suruhan ini mengubah D3 ke 0000 0110 0000 00002. Oleh itu, D3 diubah menjadi $74760600. Bendera Z diset ke 0 kerana bit 13 adalah 1 sebelum suruhan dilaksanakan. 5.10 Suruhan BCD Data jenis BCD (binary coded decimal) ada masanya lebih sesuai digunakan untuk menyimpan maklumat berbanding perduaan biasa. Ini kerana kebanyakan peranti input/output menggunakan sama ada kod ASCII atau kod-kod lain yang lebih mudah ditukar ke bentuk BCD. Unit terkecil untuk olahan BCD ialah satu byte. Setiap byte BCD mengandungi dua digit BCD. Tiga suruhan khusus untuk olahan BCD ialah ABCD, NBCD dan SBCD. Jadual di bawah mentakrifan suruhan-suruhan BCD. Mnemonik Takrifan Operasi ABCD Add BCD punca + destinasi + X → destinasi NBCD Negate BCD 0 - punca - X → destinasi SBCD Subtract BCD destinasi - punca - X → destinasiIf you found this book useful, donate to the Gaza fund
  • 81. 5.10. Suruhan BCD 77 Sintaks untuk suruhan-suruhan ini ialah: ABCD Dx,Dy ABCD –(Ay),–(Ax) NBCD <ea> SBCD Dx,Dy SBCD –(Ay),–(Ax) Suruhan ABCD dan SBCD mempunyai mod alamat yang membolehkan data terletak sepenuhnya dalam ingatan. Ini nyata berbeza dengan majoriti suruhan olahan data yang memerlukan salah satu kendalian terletak dalam daftar data. Setiap suruhan melibatkan bit X. Kesan setiap suruhan kepada bendera X, N dan V tidak tertakrif. Ini bermakna nilai ketiga-tiga bendera ini tidak mempunyai sebarang makna. Bendera C diset jika ABCD menjana bawa, atau SBCD menjana pinjam dan dipadam sebaliknya. Bagi bendera Z, ia dipadam jika hasil bukan sifar tetapi tidak diubah jika hasil sifar. Ini membolehkan nilai sifar dikesan dalam penambahan berbilang byte. Bendera Z dalam kes ini melambangkan status keseluruhan angka, bukan hanya byte terakhir. Dengan itu, bendera Z perlu diset sendiri oleh pengaturcara sebelum melakukan sebarang operasi. Operasi BCD hanya dilakukan dalam byte terendah daftar data. Jika nilai berbilang byte perlu diolah, operasi yang dikehendaki lebih mudah dilakukan terus dalam ingatan. Suruhan ABCD dan NBCD digunakan untuk menambah dan menolak nilai-nilai BCD. Suruhan NBCD digunakan bagi mendapatkan pelengkap 9 dan 10 sesuatu nilai BCD. Contoh: Tambah nombor BCD dlm D0 kepada D1. Penyelesaian: Sebelum menambah, setkan dahulu bendera Z dalam CCR. MOVE #4,CCR ; X=0 dan Z=1 ABCD D0,D1 Contoh: Tambah dua nombor BCD 8 digit (4 byte). Penyelesaian: Disebabkan nombor-nombor BCD melebihi 1 byte, nilai-nilai diletakkan dalam ingatan dan dituding menggunakan sebarang daftar alamat. Katakan A0 menuding ke kendalian punca dan A1 menuding ke kendalian destinasi, kod yang terhasil adalah seperti berikut. MOVE #4,CCR ; X=0 dan Z=1 ABCD -(A0),-(A1) ABCD -(A0),-(A1) ABCD -(A0),-(A1) ABCD -(A0),-(A1) Contoh: Dapatkan pelengkap 10 untuk isi D0. Katakan D0 berisi 23.If you found this book useful, donate to the Gaza fund
  • 82. 78 Bab 5. Suruhan Olahan Data 
 Rajah 5.4: Menggunakan suruhan ABCD untuk menambah dua nombor BCD 8 digit. Penyelesaian: Untuk mendapat pelengkap 10, bendera X perlu dipadam sebelum suruhan NBCD dilaksanakan. MOVE #0,CCR NBCD D0 Bagi D0 bersamaan 23, suruhan NBCD melakukan operasi 0 – 23 – 0 menghasilkan jawapan 77 pinjam 1. Nilai pinjam diabaikan. Contoh: Dapatkan pelengkap 9 untuk isi D0. Katakan D0 berisi 23. Penyelesaian: Untuk mendapat pelengkap 9, bendera X perlu diset sebelum suruhan NBCD dilaksanakan. MOVE #$10,CCR NBCD D0 Bagi D0 bersamaan 23, suruhan NBCD melakukan operasi 0 – 23 – 1 menghasilkan jawapan 76 pinjam 1. Nilai pinjam diabaikan. Latihan 1. Jika D0=$12348877, apakah nilainya selepas melaksanakan suruhan EXT.W D0? 2. Jika D0=$00007788, apakah nilainya selepas melaksanakan suruhan NEG.W D0? 3. Selepas suruhan ADD atau SUB yang melibatkan kendalian tak bertanda, bendera manakah yang menentukan sama ada jawapannya betul? 4. Diberi nilai awal untuk D0 dan D1 dalam perenambelasan seperti berikut. Cari isi D1 dan bendera selepas suruhan ADD.W D0,D1. (a) D0 = 1234, D1 = 5678 (b) D0 = FFFF, D1 = 0001 (c) D0 = 7000, D1 = 7000 (d) D0 = 9000, D1 = 7000If you found this book useful, donate to the Gaza fund
  • 83. 5.10. Suruhan BCD 79 5. Diberi nilai awal untuk D0 dan D1 dalam perenambelasan seperti berikut. Cari isi D1 dan bendera selepas suruhan SUB.W D0,D1. (a) D0 = 5678, D1 = 1234 (b) D0 = 0001, D1 = FFFF (c) D0 = 7000, D1 = 9000 (d) D0 = 9000, D1 = 7000 6. Daftar D2 berisi $FFFF0002. Apakah isinya selepas melaksanakan suruhan MULU #$10,D2? 7. Daftar D7 berisi $FFFFFFF0. Apakah isinya selepas melaksanakan suruhan DIVS #5,D7? 8. Tulis turutan suruhan bagi menukar nilai BCD dalam byte terendah D0 ke bentuk perduaan. Contohnya D0.B = $37 ditukar menjadi $25. Anggap D0 mengandungi nilai BCD yang sah. 9. Tulis turutan suruhan bagi menukar nilai perduaan dalam byte terendah D0 ke bentuk BCD. Anggap 0 ≤ D0.B ≤ 99. 10. Tulis turutan suruhan bagi menukar nilai BCD dalam nibel terendah D0 ke bentuk ASCII. Anggap 0 ≤ D0.B ≤ 9. Contohnya D0.B = $04 ditukar menjadi ’4’ atau $34. 11. Pembolehubah ALFA, SIGMA dan BETA masing-masing adalah nilai bertanda 32, 16 dan 8 bit. Tulis keratan aturcara yang melakukan pengiraan berikut: α = δ2 − 3β + 63 12. Pembolehubah OMEGA, PI dan LAMBDA kesemuanya adalah nilai bertanda 32 bit. Tulis keratan aturcara yang melakukan pengiraan berikut tanpa menggunakan suruhan darab atau bahagi. Anggap tiada limpahan berlaku. Π Ω = + 4Λ − 2 8 13. Tulis turutan suruhan bagi menukar nilai Fahrenheit ke Celcius. 14. Tulis turutan suruhan bagi menukar nilai Celcius ke Fahrenheit. 15. Tulis turutan suruhan bagi menukarganti byte-byte dalam D0 menurut kaedah yang ditunjukkan di bawah: 16. Dua nilai BCD, U dan V, yang terletak di dua nibel paling bawah D0. U terletak dalam bit 0-3 manakala V terletak dalam bit 4-7. Tulis turutan suruhan bagi mendarab U dengan V. 17. Tiga nilai 10 bit, R, G dan B, masing-masing terletak dalam terletak dalam bit 29-20, 19-10 dan 9-0 dalam D0. Dengan mengabaikan bit 31-30, tulis turutan suruhan bagi mendapatkan nilai L melalui rumus L = 0.3R + 0.6G + 0.1BIf you found this book useful, donate to the Gaza fund
  • 84. 80 Bab 5. Suruhan Olahan DataIf you found this book useful, donate to the Gaza fund
  • 85. Bab 6 Kawalan Aturcara Objektif • Suruhan lompat dan cabang • Membanding dan menguji data • Melaksanakan suruhan secara bersyarat • Mengulang turutan suruhan Pengenalan Keupayaan komputer terletak kepada kebolehannya memilih satu daripada beberapa pilihan operasi berdasarkan maklumat semasa. Dalam aturcara yang kita telah kaji setakat ini, suruhan-suruhan dilaksanakan secara berturutan. Untuk melaksanakan suruhan-suruhan secara tidak berturutan, operasi pemproses melakukan operasi cabang dan lompat. Terdapat dua kaedah mengubah aliran aturcara: cabang tanpa syarat dan cabang bersyarat. Dalam cabang tanpa syarat, operasi cabang sentiasa dilaksanakan. Dalam cabang bersyarat, syarat tertentu mesti dipenuhi sebelum cabang diteruskan. Jika sebaliknya, perlaksanaan diteruskan dengan suruhan yang menuruti suruhan cabang. 6.1 Suruhan Lompat Suruhan JMP (jump) menyebabkan perlaksanaan aturcara disambung di sasaran cabang. Suruhan JMP boleh menggunakan mod-mod alamat berikut: JMP <label> JMP (An) JMP d16(An) JMP d8(An,Xi) JMP d16(PC) JMP d8(PC,Xi) RTL untuk suruhan JMP ialah ea → PC Suruhan JMP beroperasi dengan menggantikan PC dengan suatu nilai baru seperti yang dinyatakan oleh mod alamat. Rajah 6.1 menunjukkan format mesin suruhan JMP. Kebolehan menggunakan pelbagai mod alamat bermakna suruhan JMP boleh mencapai keseluruhan ruang ingatan. Satu contoh suruhan JMP ialah 81If you found this book useful, donate to the Gaza fund
  • 86. 82 Bab 6. Kawalan Aturcara 
 Rajah 6.1: Format mesin suruhan JMP. JMP $400000 Dalam kes ini, perlaksanaan aturcara disambung di alamat $400000. Suruhan JMP berguna apabila alamat sasaran tidak berubah contohnya jika alamat tersebut terletak di dalam ROM. Lazimnya format JMP <label> paling kerap digunakan, yang mana label boleh mewakili alamat mutlak panjang atau mutlak pendek. 6.2 Suruhan Cabang Tanpa Syarat Suruhan BRA (branch always – cabang sentiasa) mempunyai fungsi yang sama dengan JMP iaitu memindahkan kawalan ke sasaran cabang. Format suruhan BRA ialah BRA <label> RTL untuk suruhan ini ialah PC + o f set → PC yang mana <ofset> ialah nilai yang ditambah kepada PC untuk mendapat nilai PC baru. Format mesin suruhan ditunjukkan dalam Rajah 6.2. Walaupun suruhan BRA kelihatan serupa dengan JMP, suruhan BRA hanya boleh menggunakan mod alamat relatif manakala suruhan JMP berupaya menggunakan pelbagai jenis mod alamt. Ini menjadikan suruhan BRA terhad ke alamat yang tidak lebih daripada -32766 hingga +32768 alamat berbanding alamat suruhan. Ofset yang digunakan oleh BRA terdapat dalam bentuk integer 8 bit (pendek) atau integer 16 bit (panjang). Bagi ofset 8 bit, julat cabang ialah -126 hingga +129 byte berbanding lokasi suruhan BRA kerana nilai PC semasa ialah lokasi suruhan tambah 2 pada waktu suruhan dilaksanakan. Bagi ofset 16 bit, julat cabang ialah -32766 hingga +32768 byte. Jika jarak ke sasaran melebihi nilai ini, suruhan JMP perlu digunakan. Pengaturcara jarang menentukan sendiri ofset dalam suruhan cabang. Biasanya, suatu label ditulis untuk mengenalpasti sasaran cabang. Contohnya, suruhan BRA START menyebabkan kawalan aturcara dipindahkan ke suruhan berlabel START. Penghimpun akan mengira nilai ofset sebenar dan mengekodnya ke dalam suruhan. Penghimpun juga memilih saiz ofset secara automatik, sama ada 8 bit atau 16 bit. Bagaimanapun, kita boleh menulis BRA.S jika kita ingin memaksa penghimpun memilih ofset 8 bit. Suruhan di atas boleh ditulis semula sebagai 
 Rajah 6.2: Format mesin untuk suruhan cabang tanpa syarat.If you found this book useful, donate to the Gaza fund
  • 87. 6.2. Suruhan Cabang Tanpa Syarat 83 BRA.S START yang mengarahkan penghimpun menggunakan ofset 8 bit jika munasabah. Aturcara yang telah dihimpun di bawah menunjukkan penghimpun mengira ofset. 001000 1 ORG $1000 001000 6002 2 MULA BRA.S LAST 001002 60FE 3 BRA * 001004 60FA 4 LAST BRA MULA 001006 5 END Rumus am untuk mendapat ofset ialah: Ofset = Sasaran – PC semasa = Sasaran – (Alamat suruhan + 2) Nilai +2 perlu ditambah setiap kali kerana apabila pemproses sedang melaksanakan suruhan BRA, nilai PC sedang menunjuk ke 2 alamat ke hadapan. Dalam baris 2, suruhan BRA.S LAST melakukan operasi cabang ke hadapan. Suruhan terletak di alamat $1000 manakala sasarannya ialah $1004. Oleh itu nilai ofset ialah $02. Ini boleh disemak dengan melihat kod operasi yang terhasil iaitu $6002. Alamat suruhan = $1000 Sasaran = $1004 Ofset = $1004 – ($1000 + 2) = $02 Dalam baris 3, suruhan BRA * menyebabkan pemproses berlari di satu tempat. Semasa melak- sanakan suruhan, PC telah menunjuk ke suruhan berikut. Oleh itu, nilai ofset yang diperlukan ialah –2 atau $FE. Alamat suruhan = $1002 Sasaran = $1002 Ofset = $1002 – ($1002 + 2) = $FE Bagi baris 4, suruhan BRA MULA memerlukan ofset –6 atau $FA. Semasa melaksanakan suruhan BRA, nilai PC ialah $1006 manakala sasaran cabang ialah $1000. Alamat suruhan = $1004 Sasaran = $1000 Ofset = $1000 – ($1004 + 2) = $FA Jika suruhan BRA.S LAST di baris 2 digantikan dengan suruhan BRA LAST, penghimpun menganggap label LAST terletak jauh, dan menyediakan ofset 16 bit. Ini kerana semasa menghimpun suruhan BRA, penghimpun belum bertemu dengan label LAST. Oleh itu, ia menyediakan ruang yang lebih besar bagi ofset yang akan nilainya hanya diisi apabila sampai ke LAST. 001000 1 ORG $1000 001000 6000 0004 2 MULA BRA LAST 001004 60FE 3 BRA * 001006 60FA 4 LAST BRA MULA 001008 5 END Bagi ofset 16 bit, kata pertama suruhan BRA ialah $6000. Ofset sebenar terletak dalam kata berikutnya. Dalam contoh ini, nilai ofset $0004 terletak di alamat $10002. Alamat suruhan = $1000 Sasaran = $1006 Ofset 16 bit = $1006 – ($1000 + 2) = $0004If you found this book useful, donate to the Gaza fund
  • 88. 84 Bab 6. Kawalan Aturcara 6.3 Suruhan Cabang Bersyarat Suruhan cabang bersyarat digunakan apabila perlaksanaan aturcara mesti berpecah kepada satu daripada dua laluan bergantung kepada keputusan operasi sebelumnya. Pada tahap termudah, ini bermaksud melaksanakan satu turutan suruhan apabila sesuatu syarat dipenuhi. (Rujuk Rajah 6.3) Dalam bahasa tahap tinggi, struktur ini berupa if <syarat> then <S> 
 Rajah 6.3: Carta aliran untuk perlaksanaan bersyarat. Dalam bahasa himpunan 68000, perlaksanaan bersyarat dilakukan 14 suruhan cabang bersyarat yang secara am dikenali dengan mnemonik Bcc. Suruhan-suruhan ini mempunyai format Bcc <label> Huruf “cc” bermakna kod syarat (condition codes). Sama seperti suruhan BRA, suruhan Bcc menggunakan mod alamat relatif PC. Nilai ofset yang ditambah kepada PC ialah 8 bit atau 16 bit. Sesetengah penghimpun membolehkan format Bcc .S untuk memaksa penggunaan ofset 8 bit (pendek) jika munasabah. 
 Rajah 6.4: Format mesin untuk suruhan cabang bersyarat. Bagaimana bendera-bendera CCR diubah diringkaskan dalam Rajah 5.1. Jadual 6.1 menyenaraikan kombinasi kod syarat (cc) yang disemak oleh suruhan-suruhan cabang bersyarat. Bendera-bendera ini digunakan untuk menentukan sama ada nilai cc benar atau palsu. Jika syarat cc benar, nilai ofset ditambah kepada PC. Pada masa ini, PC mengandungi alamat suruhan Bcc tambah 2. Ini menyebabkan kawalan dipindahkan ke sasaran cabang. Jika syarat cc palsu, nilai PC tidak diubah. Maka, pemproses melaksanakan suruhan yang menuruti suruhan Bcc. Rajah 6.4 menunjukkan format mesin bagi suruhan Bcc . Nilai bagi bit 11:8 dalam suruhan ditentukan oleh kod dalam Jadual 6.1. Pemilihan suruhan Bcc mesti mengambil kira bendera CCR mana yang telah diubah oleh suruhan sebelumnya. Ada suruhan yang mengubah kesemua bendera N, Z, V dan C, seperti suruhan aritmetik, dan ada suruhan yang hanya mengubah bit Z seperti suruhan olahan bit (Rujuk Seksyen 5.9). Suruhan CMP, TST dan BTST pula berfungsi semata-mata mengubah bendera CCR tanpa mengubah sebarang data lain dalam sistem. Apa pun, bit X tidak disemak oleh mana-mana suruhan cabang.If you found this book useful, donate to the Gaza fund
  • 89. 6.3. Suruhan Cabang Bersyarat 85 Jadual 6.1: Suruhan cabang bersyarat. Kod Suruhan Makna Syarat Benar jika 0111 BEQ EQual to zero Sama/Sifar Z=1 0110 BNE Not Equal to zero Tidak sama/bukan sifar Z=0 1011 BMI MInus Negatif N=1 1010 BPL PLus Positif N=0 0101 BCS/LO Carry Set/Lower Ada bawa/Lebih rendah C=1 0100 BCC/HS Carry Clear/Higher or Same Tiada bawa/Lebih tinggi atau sama C=0 1001 BVS oVerflow Set Ada limpahan V=1 1000 BVC oVerflow Clear Tiada limpahan V=0 Z ∧ (N L 1110 BGT Greater Than Lebih besar V)=0 L 1101 BLT Less Than Kurang NLV=1 1100 BGE Greater than or Equal Lebih besar daripada atau sama N L =0 V 1111 BLE Less than or Equal Kurang daripada atau sama Z ∨ (N V) = 1 0010 BHI HIgher Lebih tinggi C+Z=0 0011 BLS Lower than or Same Lebih rendah atau sama C+Z=1 Mencabang jika Sifar atau Bukan Sifar Suruhan BEQ dan BNE adalah berlawanan antara satu sama lain. Suruhan BEQ <label> menyebabkan cabang diambil jika suruhan sebelumnya mengeluarkan hasil sifar. Suruhan BNE <label> mengakibatkan cabang jika hasil yang didapati bukan sifar. Kedua-dua suruhan boleh digunakan untuk kendalian bertanda dan tak bertanda. Contoh: Padam D7 jika operasi D6 - 1 menghasilkan jawapan sifar. Penyelesaian: Keratan berikut memberikan hasil yang dikehendaki. SUBQ.W #1,D6 BNE BUKAN CLR.W D7 Apabila hasil sifar, suruhan BNE tidak diambil dan pemproses melaksanakan CLR. Untuk nilai-nilai lain, suruhan BNE mencabang ke label BUKAN dan tidak melaksanakan suruhan CLR. Mencabang dengan Aritmetik Tak Bertanda Aritmetik tak bertanda melibatkan nilai positif dan sifar sahaja. Kod syarat yang patut diuji selepas operasi terhadap data tak bertanda ialah bendera Z dan C sahaja. Bendera C menandakan jawapan yang dihasilkan oleh operasi tambah terlalu besar untuk saiz yang digunakan. Dalam operasi tolak, bendera C menandakan keadaan pinjam yang berlaku apabila nilai besar ditolak daripada nilai kecil. Jika bendera C diset, jawapan yang terhasil tidak sah. Untuk mencabang selepas aritmetik tak bertanda, suruhan yang digunakan ialah BCC (branch on carry clear) atau BCS (branch on carry set). berikut, misalnya, memastikan jawapan yang terhasil sentiasa sah: ADD D0,D1 BCS RALATIf you found this book useful, donate to the Gaza fund
  • 90. 86 Bab 6. Kawalan Aturcara Contoh: Tambah D1 kepada D0. Darab D2 dengan 2 jika ada bawa keluar. Penyelesaian: Keratan berikut adalah satu penyelesaian. ADD.W D1,D0 BCC TIADA MULU #2,D2 Suruhan yang dipilih ialah BCC. Jika terdapat bawa (C = 1), suruhan BCC tidak mencabang jadi suruhan MULU dilaksanakan. Sebaliknya, jika tiada bawa (C = 0) suruhan BCC mencabang ke label TIADA. Mencabang dengan Aritmetik Bertanda Selepas aritmetik bertanda, bendera N, Z dan V boleh disemak untuk menguji kesahan jawapan. Bendera V menyatakan sama ada operasi sebelumnya mempunyai limpahan (V = 1). Suruhan BVC mencabang apabila V = 0 dan suruhan BVS mencabang jika V = 1. Turutan berikut memastikan jawapan sentiasa sah sebelum digunakan ADD D0,D1 BVS RALAT Jika tiada limpahan (V = 0), bendera N dan Z digunakan untuk mencabang bagi jawapan negatif, sifar atau positif. Suruhan BMI mencabang jika jawapan negatif (N = 1) dan suruhan BPL mencabang jika jawapan positif (N = 0). 6.4 Suruhan CMP, TST dan BTST Walaupun bit-bit dalam CCR diubah selepas perlaksanan suruhan-suruhan aritmetik dan sebagainya, tiga suruhan boleh digunakan untuk sengaja mengubah nilai CCR tanpa mengubah mana-mana kendalian. Suruhan-suruhan ini ialah CMP, TST dan BTST. Suruhan CMP Suruhan CMP (compare) melakukan perbandingan dengan menolak punca daripada destinasi. Hasil tolak yang terhasil tidak disimpan tetapi hanya mengubah bendera negatif (N), sifar (Z), limpahan (V) dan bawa (C). Bendera X tidak terkesan. Setelah diset, bendera-bendera ini seterusnya digunakan oleh suruhan Bcc . Suruhan CMP mempunyai format CMP <ea>,Dn Kendalian punca boleh ditentukan oleh sebarang mod alamat. Kendalian destinasi mestilah salah satu daftar data. Saiz kendalian adalah byte, kata atau kata panjang. Bagaimanapun, jika kendalian punca berada dalam daftar alamat, perbandingan byte dilarang. Contoh suruhan ini ialah CMP.W D0,D1If you found this book useful, donate to the Gaza fund
  • 91. 6.4. Suruhan CMP, TST dan BTST 87 Jadual 6.2: Kesan suruhan CMP terhadap bendera. Keadaan X N Z V C Punca < Destinasi – 0 0 0/1 0 Punca = Destinasi – 0 1 0 0 Punca > Destinasi – 1 0 0/1 1 Jadual 6.3: Pemilihan suruhan cabang. Syarat Nombor Tak Bertanda Nombor Bertanda d>s BCC BGE d≤s BHI BGT d=s BEQ BEQ d=s BNE BNE d≥s BLS BLE d<s BCS BLT Apabila dilaksanakan, suruhan ini melakukan operasi D1 – D0 supaya punca ditolak daripada destinasi. Jika nilai dalam D0 sama dengan D1, bit Z dalam CCR diset dan N, V dan C kesemuanya dipadam. Nilai dalam kedua-dua daftar D0 dan D1 tidak berubah. Jadual 6.2 meringkaskan kesan CMP terhadap bendera. Setelah bendera-bendera diset oleh suruhan CMP, suruhan cabang yang sesuai boleh dilaksanakan untuk mencabang bergantung kepada kaitan aritmetik kedua-dua kendalian. Jadual 6.3 menyenaraikan suruhan yang diperlukan untuk kendalian destinasi kurang, lebih atau sama dengan kendalian punca. Variasi CMP Terdapat beberapa variasi suruhan CMP iaitu CMPA, CMPI dan CMPM. CMPA Suruhan CMPA (compare address) sama dengan CMP kecuali kendalian mestilah berada di dalam daftar alamat. Untuk ini, hanya kendalian kata dan kata panjang diterima. Kendalian kata dipanjangkan ke kata panjang sebelum perbandingan dilakukan. Berikut suatu penggunaan CMPA. CMPA.L #$1000,A1 CMPI Suruhan CMPI (compare immediate) membandingkan kendalian terdekat dengan kendalian destinasi yang terletak di dalam daftar data, daftar alamat atau ingatan. Kesemua saiz data dibenarkan. Berikut suatu penggunaan CMPI. CMPI.B #’A’,D0 CMPM Suruhan CMPM (compare memory) membandingkan dua kendalian yang terletak di dalam ingatan. Mod alamat yang dibenarkan adalah pascatokok sahaja. Ia amat berguna untuk membandingkan rentetan. Saiz kendalian yang dibenarkan adalah byte, kata dan kata panjang. Berikut suatu penggunaan CMPM. CMPM.B (A0)+,(A1)+ Kebanyakan penghimpun membenarkan mnemonik CMP mewakili keempat-empat suruhan CMP, CMPA, CMPI dan CMPM. Pemilihan format mesin dibuat tanpa campurtangan pengaturcara dan hanya boleh dikesan jika fail output penghimpun disemak.If you found this book useful, donate to the Gaza fund
  • 92. 88 Bab 6. Kawalan Aturcara Suruhan TST Suruhan TST (test) membandingkan sesuatu kendalian dengan sifar. Operasinya sama dengan suruhan CMP kecuali kendalian punca sentiasa dianggap sifar. Oleh itu ia melakukan operasi destinasi – 0 untuk menentukan nilai bendera. Format suruhan ini ialah TST <ea> Empat bit dalam CCR terkesan oleh suruhan TST. Bagaimanapun, hanya N dan Z diset atau dipadam menurut hasil tolak. Bit V dan C sentiasa dipadam. Suatu contoh ialah suruhan TST.B D0 Suruhan BTST Suruhan BTST (bit test) menguji sama ada satu bit bersamaan sifar. Hanya bit Z terkesan. Suruhan ini mempunyai dua format iaitu BTST Dn,<ea> BTST #<data>,<ea> Apabila destinasi ialah daftar data, mana-mana bit boleh dipilih menurut nombor modulo 32. Apabila destinasi ialah ingatan, operasi bersaiz byte dan nombor bit adalah modulo 8. Nombor bit boleh ditentukan dengan (1) mod terdekat – nombor bit sebahagian suruhan, dan (2) mod daftar – daftar data menentukan nombor bit. Contoh 1: Tambah nilai mutlak dalam kata rendah D6 kepada D7. Penyelesaian: Menambah nilai mutlak D6 bermakna jika D6 positif, ia boleh ditambah terus. Jika D6 negatif, ia perlu ditukarkan ke nilai positif terlebih dahulu. CMP.W #0,D6 BPL TAMBAH NEG.W D6 TAMBAH ADD.W D6,D7 Suruhan TST lebih sesuai apabila menguji sesuatu nilai hanya untuk mengetahui sama ada sifar atau negatif. Turutan ini boleh ditulis semula begini: TST.W D6 BPL TAMBAH NEG.W D6 TAMBAH ADD.W D6,D7 Contoh 2: Tambahkan D1 kepada D0 jika nilainya kurang daripada 5.If you found this book useful, donate to the Gaza fund
  • 93. 6.4. Suruhan CMP, TST dan BTST 89 Penyelesaian: Di sini kita perlu menggunakan suruhan CMP kerana membandingkan nilai dengan suatu nilai. Caranya begini: CMP.W #5,D1 BHI SKIP ADD.W D1,D0 SKIP ... Suruhan TST tidak boleh digunakan di sini. Contoh: Bandingkan nilai dua byte tak bertanda dalam ingatan. Byte pertama terletak dalam alamat $2000, dan byte kedua terletak dalam $2001. Simpan nilai yang lebih besar di alamat $2002. Penyelesaian: Lihat di bawah. MOVE.B $2000,D0 CMP.B $2001,D0 BHS SIMPAN MOVE $2001,D0 SIMPAN MOVE.B D0,$2002 Untuk nombor bertanda, tukarkan suruhan BHS SIMPAN kepada BGT SIMPAN. Contoh: Tukar nilai ASCII dalam byte terendah D2 kepada huruf besar jika byte tersebut adalah huruf kecil. Penyelesaian: Huruf besar dalam ASCII ialah $41 (‘A’) hingga $5A (‘Z’) manakala huruf kecil terletak dalam julat $61 (‘a’) hingga $7A (‘z’). Untuk menukar huruf kecil kepada huruf besar, nilai asal ditolak $20. Oleh sebab penolakan perlu dilakukan hanya jika ‘A’ ≤ D2 ≤ ‘Z’, dua perbandingan diperlukan. Jika D2 kurang daripada ‘A’ selepas perbandingan pertama, penolakan tidak diperlukan. Jika sebaliknya, perbandingan kedua iaitu dengan ‘Z’ diperlukan. Jika D2 lebih daripada ‘Z’ setelah perbandingan kedua, penolakan juga tidak perlu. CMP.B #’A’,D2 BCS TERUS CMP.B #’Z’,D2 BHI TERUS SUB.B #$20,D2 TERUS ...If you found this book useful, donate to the Gaza fund
  • 94. 90 Bab 6. Kawalan Aturcara 6.5 Pemilihan Dua Turutan Suruhan Selain perlaksanaan bersyarat, suruhan Bcc juga digunakan untuk memilih satu daripada dua turutan suruhan bergantung kepada syarat yang dinyatakan. Rujuk Rajah 6.5. Dalam bahasa tahap tinggi, struktur ini berupa: if <ujian> then <S1> else <S2> Dalam bahasa himpunan 68000, struktur ini berupa <syarat> ; semak syarat dan set CCR Bcc PALSU ; pilih cabang <S1> ; penyata benar BRA TAMAT ; keluar struktur PALSU <S2> ; penyata palsu TAMAT .... ; sambung 
 Rajah 6.5: Carta aliran untuk pemilihan dua turutan suruhan. Contoh: Padam byte terendah D1 jika kata rendah D0 berisi sifar, isi D1 dengan –1 jika sebaliknya. Kemudian simpan D1 di alamat $2000. Penyelesaian: Perbandingan dengan sifar dipermudahkan dengan suruhan TST. TST D0 BEQ SIFAR BUKAN MOVEQ #-1,D1 BRA DAH SIFAR MOVEQ #0,D1 DAH MOVE.B D1,$2000 Contoh: Tukar nilai ASCII perenambelasan dalam byte terendah D0 kepada nilai setara perenambelasan dalam byte terendah D1. Jika D0 tidak mengandungi ASCII, isikan D1 dengan 1. Anggap data dalam D0 tidak mengandungi huruf kecil.If you found this book useful, donate to the Gaza fund
  • 95. 6.6. Mengulang Turutan Suruhan 91 Penyelesaian: Nilai ASCII perenambelasan ialah aksara ’0’ (ASCII $30) hingga ’9’ (ASCII $39), ’A’ (ASCII $41) hingga ’F’ (ASCII $5A) dan ’a’ (ASCII $61) hingga ’f’ (ASCII $7A). Nilai perduaan setara ialah 0000 hingga 1001 untuk ’0’ hingga ’9’ dan 1010 hingga 1111 untuk ’A’ hingga ’F’ atau ’a’ hingga ’f’. Bagaimanapun, D0 tidak mengandungi huruf kecil jadi semakan berbanding ’a’ hingga ’f’ tidak perlu. D0 hanya perlu disemak sama ada ia aksara digit atau huruf besar yang dibenarkan, kemudian penolakan yang sesuai dilakukan. CMP.B #’0’ ; SEMAK DGN HAD BAWAH BCS RALAT ;JIKA D0<’0’ MAKA RALAT CMP.B #’9’,D0 ;SEMAK DGN HAD KEDUA BHI SEMAK2 ;JIKA D0>’9’ MUNGKIN A-F DIGIT SUB.B #$30,D0 ;DIGIT 0-9 JADI TOLAK $30 BRA DAH SEMAK2 CMP.B #’A’,D0 BCS RALAT ;JIKA D0<’A’ MAKA RALAT CMP.B #’F’,D0 BHI RALAT ;JIKA D0>’F’ RALAT JUGA HKECIL SUB.B #55,D0 ;a-f JADI TOLAK 87 BRA DAH RALAT MOVEQ #-1,D0 DAH MOVE.B D0,D1 6.6 Mengulang Turutan Suruhan Mekanisme gelung membolehkan suatu turutan suruhan diulang seberapa banyak yang diperlukan. Terdapat beberapa konstruk gelung tetapi gelung asas dalam bahasa himpunan melaksanakan suatu penyata S, kemudian suatu syarat diuji. Jika syarat benar, penyata S diulang lagi. Jika syarat palsu, suruhan yang menuruti gelung dilaksanakan. Konstruk ini dinamai gelung pascauji1 kerana syarat gelung diuji setelah gelung dilalui. Carta alir gelung pascauji ditunjukkan dalam Rajah 6.6. Dalam bahasa tahap tinggi konstruk ini berbentuk: do <S> while <syarat>; Dalam bahasa himpunan 68000, gelung pascauji mempunyai tiga komponen: ULANG <S> ; laksanakan penyata <Syarat> ; semak syarat dan set CCR Bcc ULANG ; pilih cabang Jumlah ulangan gelung bergantung kepada tugas yang perlu dilakukan. Biasanya, jumlah ulangan telah diketahui dan sebelum gelung dimasuki jumlah kiraan gelung diisi ke dalam salah satu daftar data. Ini merupakan fasa pememulaan. Di dalam gelung, nilai kiraan ini disusutkan. Apabila pembilang mencapai nilai sifar, gelung ditamatkan. Terdapat juga gelung yang jumlah ulangannya tidak diketahui contohnya jika gelung digunakan untuk menerima input dari pengguna dan tamat apabila pengguna menekan kekunci <Enter>. Dalam kes ini, pengaturcara tidak tahu berapa kali gelung dilalui sebelum <Enter> ditekan. 1 post-test loopIf you found this book useful, donate to the Gaza fund
  • 96. 92 Bab 6. Kawalan Aturcara 
 Rajah 6.6: Gelung pascauji. Berikut satu contoh gelung yang agak mudah. Gelung ini mengandungi suruhan NOP dan diulang sebanyak lima kali. Pada setiap laluan gelung, nilai pembilang disusutkan dan gelung ditamatkan setelah lima kali diulang. Penggunaan suruhan BNE paling mudah kerana ia mencabang jika pembilang bukan sifar dan menyebabkan gelung ditamatkan jika pembilang mencapai sifar. MOVEQ #5,D0 ; Pembilang gelung = 5 LOOP NOP ; Kandungan gelung = tiada SUBQ #1,D0 ; Susutkan pembilang BNE LOOP ; Ulang selagi pembilang belum sifar Contoh: Tulis turutan suruhan bagi mengira 10 + 9 + 8 + ... + 2 + 1 menggunakan gelung. Penyelesaian: Gunakan D0 sebagai pembilang gelung, dan D1 sebagai pengumpuk. Mula-mula isikan D0 dengan 10 dan D1 dengan sifar. Pada setiap ulangan gelung, tambahkan D0 kepada D1 dan susutkan D0. Ulang sehingga D0 menjadi sifar. MOVEQ #10,D0 ; Pembilang gelung = berapa kali lagi belum siap CLR.W D1 ; Pengumpuk ULANG ADD.W D0,D1 ; Tambah nilai semasa kepada pengumpuk SUBQ #1,D0 ; Susutkan pembilang BNE LOOP ; Ulang selagi pembilang belum sifar Di akhir gelung, D1 akan mengandungi 55. 6.7 Bentuk Gelung Alternatif Konstruk gelung pascauji adalah mudah tetapi isi gelung mesti dilaksanakan sekurang-kurangnya sekali sebelum syarat diuji. Ada masanya isi gelung perlu dielakkan daripada dilaksanakan jika syarat tidak dipenuhi. Konstruk gelung yang kedua ini meletakkan ujian syarat di awal gelung. Inilah gelung prauji2 . Carta alir gelung prauji ditunjukkan dalam Rajah 6.7. Dalam bahasa tahap tinggi, gelung ini berupa: while <syarat> do <S>If you found this book useful, donate to the Gaza fund
  • 97. 6.7. Bentuk Gelung Alternatif 93 
 Rajah 6.7: Gelung prauji. Dalam pengaturcaraan bahasa himpunan 68000, konstruk ini lebih panjang berbanding konstruk gelung pascauji: ULANG <Syarat> ; semak syarat dan set CCR Bcc TAMAT ; keluar gelung? <S> ; laksanakan penyata BRA ULANG ; ulang TAMAT ... ; sambung Gelung prauji mengandungi dua suruhan cabang berbanding hanya satu untuk gelung pascauji sebelumnya. Jika kita ingin mempertingkatkan kecekapan aturcara, gelung ini boleh ditulis semula seperti berikut bagi mengurangkan jumlah suruhan cabang di dalam gelung. BRA CELAH ; lompat ke ujian ULANG <S> ; laksanakan penyata CELAH <Syarat> ; kira ujian dan set CCR Bcc ULANG ; keluar gelung? Contoh: Tulis aturcara yang mengira jumlah bit 1 dalam keseluruhan D0. Kiraan bit disimpan dalam D1. Penyelesaian: Satu kaedah mengira jumlah bit 1 ialah dengan menganjak daftar ke kiri menggunakan suruhan ASL atau LSL. Bit yang ditolak keluar oleh operasi anjak akan disimpan dalam bit C dan X. Jika bit C = 1, tokok pembilang bit. Dalam aturcara ini, bentuk gelung prauji paling sesuai kerana ia memastikan data tidak sifar sebelum memulakan isi gelung. Jika data sifar pada awalnya, keseluruhan isi gelung diabaikan. Jika data bukan sifar pada awalnya pun, kita tidak perlu menganjak sehingga 32 kali kerana mungkin hanya beberapa bit bernilai 1. Jika daftar terpadam, operasi pengiraan boleh terus ditamatkan. Misalnya, jika D0 bersamaan $8000000, gelung akan ditamatkan selepas satu ulangan sahaja. ; ; KIRABIT.X68 ; ORG $1000 2 pre-test loopIf you found this book useful, donate to the Gaza fund
  • 98. 94 Bab 6. Kawalan Aturcara START MOVE.B #$AA55AA55,D0 ; D0 = data yg diuji CLR.B D1 ; D1 = jumlah bit 1 ULANG TST.L D0 ; jika D0 sifar, tamatkan BEQ TAMAT ASL.L #1,D0 ; anjak kiri sekali BCC ULANG ; jika bit = 0, tak perlu buat apa2 ADDQ.W #1,D1 ; jika bit = 1, tokok pembilang BRA ULANG TAMAT MOVE.B #9,D0 TRAP #15 END START Aturcara yang ditunjukkan di atas adalah agak mudah. Terdapat banyak cara lebih canggih untuk mengira bit 1. Penutup Bab ini telah menunjukkan bagaimana konstruk-konstruk asas dalam pengaturcaraan dilakukan dalam bahasa himpunan 68000. Latihan 1. Daftar D0 dan D1 masing-masing mengandungi byte tak bertanda. Atur supaya D0 ≥ D1. Dengan kata lain, jika D0 ≥ D1, jangan buat apa-apa, tetapi jika D0 < D1, tukarkan kedua-dua nilai. 2. Daftar D0, D1 dan D2 masing-masing mengandungi nilai bertanda 32 bit. Letakkan nilai yang paling besar ke dalam D3. 3. Daftar D0 dan D1 masing-masing mengandungi byte bertanda. Jika kedua-duanya sama, letakkan 0 dalam D2. Jika sebaliknya, letakkan –1 dalam D2. 4. Daftar D0, D1 dan D2 masing-masing mengandungi kata panjang tidak bertanda. Susun supaya D0 ≤ D1 ≤ D2. Gunakan daftar-daftar lain untuk simpanan sementara jika perlu. 5. Tulis turutan suruhan bagi menukar nilai BCD dalam byte terendah D0 ke bentuk perduaan hanya D0 mengandungi nilai BCD yang sah. Contohnya D0.B = $37 ditukar menjadi $25. Jika D0 mengandungi pola yang salah, setkannya menjadi $FF. 6. Tulis turutan suruhan bagi menukar nilai perduaan dalam byte terendah D0 ke bentuk BCD jika 0 ≤ D0.B ≤ 99. Jika D0 ≥ 100, setkan D0 menjadi $FF. 7. Tulis turutan suruhan bagi menukar nilai BCD dalam nibel terendah D0 ke bentuk ASCII jika 0 ≤ D0.B ≤ 9. Contohnya D0.B = $04 ditukar menjadi ’4’ atau $34. Jika D0 > 9, setkan D0 menjadi ‘X’. 8. Tulis turutan suruhan bagi menukar nibel terendah D0 ke bentuk ASCII, 0 ≤ D0.B ≤ 15. Contohnya D0.B = $04 ditukar menjadi ’4’ atau $34, dan D0.B = $0B ditukar menjadi ’B’ atau $42.If you found this book useful, donate to the Gaza fund
  • 99. 6.7. Bentuk Gelung Alternatif 95 9. Tulis turutan suruhan bagi menukar byte terendah D0 ke bentuk ASCII dalam kata rendah D0. Contohnya D0.W = $XXB4 ditukar menjadi D0.W = ’B4’ atau $4234. 10. Tulis turutan suruhan bagi menukar nilai ASCII dalam byte terendah D0 ke BCD jika ’0’ ≤ D0 ≤ ’9’. Letakkan bendera C ke 0 jika berjaya, dan C ke 1 jika data terkeluar julat. 11. Tulis turutan suruhan bagi menukar nilai ASCII dalam byte terendah D0 ke perenambelasan jika ’0’ ≤ D0 ≤ ’9’ atau ’A’ ≤ D0 ≤ ’F’. Setkan D1.W ke 0 jika berjaya, dan D1.W ke –1 jika sebaliknya. 12. Tulis turutan suruhan bagi menjumlahkan 1 + 2 + 3 + .. + 9 + 10 menggunakan gelung. 13. Tulis turutan suruhan bagi menjumlahkan 1 + 3 + 5 + 7 + ... + (2n+1) + ... + 19 + 21 menggunakan gelung. 14. Tulis turutan suruhan bagi menjumlahkan 0 + 1 + 1 + 2 + 3 + 5 + 8 + 13 + 21 + 34 + 55 menggunakan gelung. Ini adalah janjang Fibonacci: f0 = 0, f1 = 1, fn = fn−1 + fn−2 15. Tulis turutan suruhan bagi menjumlahkan 1 + 2 + 5 + 4 + 9 + 6 + 13 + 8 + 17 + 10 + ... + (2n+1) + (n) + ... sehingga n = 25. 9 16. Tulis turutan suruhan bagi mengira ∑ i3 . i=0If you found this book useful, donate to the Gaza fund
  • 100. 96 Bab 6. Kawalan AturcaraIf you found this book useful, donate to the Gaza fund
  • 101. Bab 7 Olahan Tatasusunan dan Rentetan Objektif • Konsep asas tatasusunan • Ciri-ciri istimewa daftar alamat • Olahan tatasusunan1 • Olahan rentetan2 • Pustaka fungsi EASy68k 7.1 Prinsip Tatasusunan Tatasusunan adalah suatu struktur data yang menyimpan data dari jenis serupa. Setiap unsur di dalamnya bersebelahan. Pemilihan saiz unsur berdasar jenis data. Untuk aksara, misalnya, tatasusunan byte paling sesuai. Antara operasi yang lazim terhadap tatasusunan termasuk: • mencari purata • mencari jumlah • mencari nilai terkecil atau terbesar 1 array 2 string 
 Rajah 7.1: Tiga bentuk tatasusunan dalam 68k. 97If you found this book useful, donate to the Gaza fund
  • 102. 98 Bab 7. Olahan Tatasusunan dan Rentetan • mengisih unsur Langkah pertama dalam penggunaan tatasusunan ialah mengisi daftar alamat dengan alamat permulaan tatasusunan. Selepas unsur pertama dicapai, unsur-unsur berikutnya dicapai hanya dengan menambah daftar alamat. Nilai yang ditambah kepada daftar alamat bergantung saiz unsur. Dalam pemprosesan tatusunan, lima parameter perlu diambil kira: 1. Alamat permulaan tatasusunan. 2. Jumlah unsur. 3. Saiz unsur. 4. Jenis data. 5. Alamat terakhir tatasusunan. Sebagai contoh, terdapat suatu tatusunan 4 kata tak bertanda bermula dari alamat $2000. Dengan maklumat ini, kita boleh melengkapkan senarai di atas: 1. Alamat permulaan = $2000 2. Jumlah unsur = 4 3. Saiz unsur = 2 byte 4. Jenis data = integer tak bertanda 5. Alamat terakhir = alamat permulaan + (jumlah unsur – 1) * saiz unsur = $2000 + (4 – 1) * 2 = $2006 Keratan aturcara3 berikut menjumlahkan unsur-unsur tatasusunan seperti yang dikehendaki. ; ; versi 1 ; CLR D0 ; D0 = hasil tambah ADD $2000,D0 ; tambah unsur 0 ADD $2002,D0 ; tambah unsur 1 ADD $2004,D0 ; tambah unsur 2 ADD $2006,D0 ; tambah unsur 3 Walaupun keratan di atas berfungsi dengan sempurna mendapatkan hasil yang dikehendaki, ia kurang canggih kerana untuk mengubah alamat permulaan, kita perlu mengubah sebanyak empat baris. Aturcara berikut adalah satu pembaikan yang mana hanya satu baris perlu diubah untuk sebarang alamat permulaan yang baru. ; ; versi 2 ; CLR D0 ; D0 = hasil tambah MOVE #$2000,A0 ; A0 = pangkal tatasusunan ADD (A0),D0 ; tambah unsur 0 ADDA #2,A0 ; tuding ke unsur 1 3 Keratan aturcara (program snippets) adalah aturcara tidak lengkap yang menunjukkan hanya suruhan yang perlu.If you found this book useful, donate to the Gaza fund
  • 103. 7.1. Prinsip Tatasusunan 99 ADD (A0),D0 ; tambah unsur 1 ADDA #2,A0 ; tuding ke unsur 2 ADD (A0),D0 ; tambah unsur 2 ADDA #2,A0 ; tuding ke unsur 3 ADD (A0),D0 ; tambah unsur 3 Terdapat satu pola suruhan berulangan dalam keratan ini. Selepas suruhan ADD, terdapat suruhan ADDA yang mengemaskini daftar alamat. Operasi kemaskini daftar alamat boleh digabungkan dengan suruhan ADD menggunakan mod pascatokok untuk mengurangkan jumlah suruhan. Dengan mod pascatokok, keratan bagi mencari jumlah 4 kata berturutan bermula dari alamat $2000 boleh ditulis seperti di bawah. Ia lebih pendek dan dilaksanakan dengan lebih pantas. ; ; versi 3 ; CLR D0 ; D0 = hasil tambah MOVE #$2000,A0 ; A0 = pangkal tatasusunan ADD (A0)+,D0 ; tambah unsur 0, tuding ke unsur 1 ADD (A0)+,D0 ; tambah unsur 1, tuding ke unsur 2 ADD (A0)+,D0 ; tambah unsur 2, tuding ke unsur 3 ADD (A0),D0 ; tambah unsur 3 Versi terakhir merupakan bentuk yang paling fleksibel. ; ; versi 4 ; CLR D0 ; D0 = hasil tambah MOVE #4,D1 ; D1 = jumlah ulangan gelung MOVE #$2000,A0 ; A0 = pangkal tatasusunan LOOP ADD (A0)+,D0 ; tambah unsur, tuding ke unsur berikut SUBQ #1,D1 ; susutkan pembilang BNE LOOP ; ulang sampai tamat Turutan aturcara dalam versi 4 sama panjang dengan dengan versi 3 jadi ia tidak menjimatkan suruhan. Bagaimanapun, ia mudah disesuaikan jika terdapat perubahan alamat dan jumlah gelung. Contohnya, untuk menambah 20 nombor, hanya isikan 20 ke dalam D1. Untuk menambah 20 nombor dengan versi 1 hingga 3 bermakna kita terpaksa berhadapan dengan aturcara yang amat panjang dan lebih sukar untuk dipastikan kesahannya. Rajah 7.3 menunjukkan carta alir am bagi menambah nombor- nombor dalam tatasusunan. Amnya, sebarang tatasusunan boleh diproses dengan hanya menukarkan alamat awal dan jumlah unsur. Selain menjumlahkan unsur-unsur, ada banyak lagi operasi yang boleh dilakukan terhadap tata- susunan. Antara operasi tersebut ialah pemindahan blok. "Penuding" 
 Rajah 7.2: Penggunaan penunjuk/penuding dalam olahan tatasusunan.If you found this book useful, donate to the Gaza fund
  • 104. 100 Bab 7. Olahan Tatasusunan dan Rentetan MULA awal tatasusunan TAMAT Rajah 7.3: Carta alir bagi menjumlah nombor-nombor dalam tatasusunan. Contoh: Pindahkan blok data 20 kata bermula dari $7000 ke suatu blok bermula di $8000. Gunakan mod alamat pascatokok. Penyelesaian: Pemindahan blok menyalin data dari satu tempat ke tempat lain dalam ingatan. Aturcara berikut melakukan operasi yang dikehendaki. ORG $1000 START MOVEA.W #SOURCE,A0 MOVEA.W #DEST,A1 MOVE.W #20,D0 PINDAH MOVE.W (A0)+,(A1)+ SUB.W #1,D0 BNE PINDAH MOVE.B #9,D0 TRAP #15 ORG $7000 SOURCE DC.W 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20 ORG $8000 DEST DS.W 20 END STARTIf you found this book useful, donate to the Gaza fund
  • 105. 7.2. Isu-Isu Dalam Olahan Tatasusunan 101 7.2 Isu-Isu Dalam Olahan Tatasusunan Saiz Data Aturcara berikut menjumlahkan 5 integer 16 bit yang terdapat dalam $1000 hingga $1008. Carta alir program ini telah ditunjukkan dalam Rajah 7.3. CLR.W D0 ; hasiltambah = 0 MOVEQ.B #5,D1 ; pembilang = 5 MOVEA.L #$1000,A0 ; penuding = awal senarai ULANG ADD.W (A0)+,D0 ; tambah unsur SUBQ.B #1,D1 BNE ULANG Aturcara ini adalah memadai untuk tatasusunan asas tetapi ia tidak kebal. Jika terlalu banyak nombor ditambah, besar kemungkinan terdapat limpahan kerana hasil tambah melebihi 16 bit. Penyelesaiannya ialah dengan menyediakan hasil tambah 32 bit. Keratan di bawah menunjukkan mengganggap penambahan nilai-nilai bertanda. CLR.L D0 ; hasiltambah 32 bit = 0 MOVEQ.B #5,D1 ; pembilang = 5 MOVEA.L #$1000,A0 ; penuding = awal senarai ULANG MOVE.W (A0)+,D2 ; ambil unsur ke daftar sementara EXT.W D2 ; tukar ke 32 bit ADD.L D2,D0 ; tambah ke pengumpuk SUBQ.B #1,D1 BNE ULANG Keratan berikut pula ialah penyelesaian untuk angka-angka tak bertanda CLR.L D0 ; hasiltambah 32 bit = 0 MOVEQ.B #5,D1 ; pembilang = 5 MOVEA.L #$1000,A0 ; penuding = awal senarai CLR.L D2 ; padam daftar sementara ULANG MOVE.W (A0)+,D2 ; salin nilai 16 bit ke daftar 32 bit ADD.L D2,D0 ; tambahkan 32 bit ke pengumpuk 32 bit SUBQ.B #1,D1 BNE ULANG Suruhan DBcc Untuk memendekkan gelung, satu kaedah lanjutan ialah menggunakan siri suruhan DBcc . Logik suruhan DBcc ditunjukkan dalam Rajah 7.4. Dalam suruhan DBcc , gelung boleh ditamatkan sama ada disebabkan syarat cc dipenuhi atau apabila Dn mencapai –1. Bagaimanapun, suruhan DBcc selain DBRA dan DBF boleh mengelirukan dan pastikan anda memahami betul-betul operasinya sebelum menggunakan. Contoh di bawah memindahkan 100 kata secara pukal dari blok punca ditunjuk oleh A0 ke blok sasaran oleh A1. Jumlah kata yang perlu dipindah diisi ke dalam D0. MOVE.W #100,D0 PINDAH MOVE.W (A0)+,(A1)+ SUBQ.W #1,D0 BNE PINDAHIf you found this book useful, donate to the Gaza fund
  • 106. 102 Bab 7. Olahan Tatasusunan dan Rentetan Rajah 7.4: Suruhan DBcc . Gelung ini boleh diubahsuai gelung untuk menggunakan suruhan DBF. Kiraan gelung dalam D0 perlu diubah kerana gelung DBF tamat setelah kiraan mencapai -1. Suruhan DBF boleh juga ditulis sebagai DBRA. MOVE.W #99,D0 ULANG MOVE.W (A0)+,(A1)+ DBRA D0,ULANG Ternyata gelung yang dikawal oleh DBRA atau DBF lebih pendek. Suruhan Olahan Daftar Alamat Terdapat beberapa suruhan yang disediakan khusus untuk olahan daftar alamat. Suruhan MOVEA (Move to Address Register) mengisikan daftar alamat. Suruhan ADDA (Add to Address Register) yang telah digunakan sebelum ini menambahkan nombor kepada daftar alamat. Suruhan SUBA (Subtract from Address Register) pula digunakan untuk menolak nilai dari daftar alamat. Saiz kendalian yang dibenarkan ialah .W dan .L. Keseluruhan daftar alamat akan berubah walaupun saiz kendalian adalah 16 bit. Kesemua suruhan ini tidak mengubah daftar CCR. Bagi menguji daftar alamat, gunakan suruhan CMPA (Compare Address Register). Untuk mengisikan daftar alamat, suruhan LEA (Load Effective Address) boleh digunakan meng- gantikan suruhan MOVEA. Ia lebih canggih kerana boleh melakukan pengiraan alamat sebelum daftar alamat diisi. Sebagai contoh, suruhan LEA berikut: LEA 2(A1,D0.W),A0 sama dengan turutan tiga suruhan berikut, tanpa mengubah A1. ADDA.W D0,A1 ADD.L #2,A1 MOVEA.L A1,A0 Dua suruhan berikut pula adalah setara: LEA $2000,A0 MOVEA.L #$2000,A0 Simbol ‘#’ tidak boleh digunakan dengan suruhan LEA. Suruhan LEA hanya boleh mengisikan 32 bit ke dalam daftar alamat.If you found this book useful, donate to the Gaza fund
  • 107. 7.3. Kajian Kes Olahan Tatasusunan 103 7.3 Kajian Kes Olahan Tatasusunan Seksyen ini menunjukkan beberapa operasi yang lazim dilakukan terhadap tatasusunan. Memilih Unsur Satu operasi yang kerap dilakukan ialah mencari unsur dengan ciri-ciri tertentu. Dalam contoh berikut, satu tatasusunan diimbas untuk mencari untuk paling besar. Jawapannya diletakkan dalam daftar D1. * * MAX.X68 * ORG $1000 START MOVEQ #20,D0 ; pembilang = 20 CLR D1 ; setkan maximum kpd 0 LEA ARRAY,A0 ; A0 = pangkal tatasusunan ULANG MOVE.W (A0)+,D2 ; salin unsur semasa ke daftar sementara CMP.W D2,D1 ; banding unsur semasa dengan maximum BLS SKIP ; jika lebih maka MOVE.W D2,D1 ; kemaskini maximum SKIP SUBQ.B #1,D0 BNE ULANG MOVE.B #9,D0 TRAP #15 ARRAY DC.W 2,3,0,10,15,7,55,30,37,20,9,14,13,12,44,29,21,31,1,8 END START Dengan mengubah suruhan BLS ke suruhan cabang yang sesuai, aturcara ini boleh diubah untuk mencari minimum atau maksimum untuk data bertanda atau tidak bertanda. Membilang Unsur dengan Kriteria Tertentu Aturcara di bawah membilang unsur yang genap. Untuk mengetahui sama ada sesuatu nilai genap, semak bit terendah. Sebarang nilai yang boleh dibahagi dua mempunyai bit 0 bersamaan sifar. * * KIRAGENAP.X68 * ORG $1000 START LEA ARRAY,A0 ; A0 = awal tatasusunan MOVE.W #COUNT,D0 ; D0 = bil. unsur keseluruhan CLR.W D1 ; D1 = bil. unsur ikut kriteria ULANG MOVE.W (A0)+,D2 ; bawa unsur ke daftar sementara BTST.W #0,D2 ; uji sama ada genap BNE SKIP ADDQ.W #1,D1 ; tokok pembilang jika genapIf you found this book useful, donate to the Gaza fund
  • 108. 104 Bab 7. Olahan Tatasusunan dan Rentetan SKIP SUBQ.W #1,D0 ; susut pembilang unsur BNE ULANG MOVE.B #9,D0 TRAP #15 ARRAY DC.W 10,8,2,-1,7,-7,3,-2,9,0,11 COUNT EQU (*-ARRAY)/2 END START Untuk membilang data dengan kriteria lain, tukarkan suruhan BTST.W #0,D0 dengan suruhan BTST, TST atau CMP yang sesuai. Untuk data dengan dua kriteria, contohya unsur bernilai antara 1 hingga 5, dua suruhan perbandingan diperlukan. Aturcara ini menunjukkan kaedah bagi mengelakkan kita mengira jumlah unsur dalam tatasusunan. Simbol ‘*’ memberikan nilai semasa pembilang lokasi penghimpun. Ungkapan (*–ARRAY) akan mendapatkan beza alamat antara hujung dan pangkal tatasusunan, dan ungkapan (*–ARRAY)/2 memberikan jumlah unsur. Mengisih Tatasusunan Mengisih bermakna menyusun unsur-unsur supaya setiap unsur lebih kecil (atau lebih besar) daripada jiran yang menurutinya. Bagi senarai dengan lima unsur, a0 hingga a4 , rumus berikut akan menjadi benar setelah diisih. a0 ≤ a1 ≤ a2 ≤ a3 ≤ a4 Algoritma asas isihan ialah isihan gelembung4 . Untuk mengisih senarai n unsur , senarai diimbas n–1 kali. Dalam laluan pertama, penuding mengimbas ke unsur 0 hingga unsur n–2. Bagi setiap nilai penuding, unsur pada penuding (ai ) dibandingkan dengan unsur disebelahnya (ai+1 ). Jika ai > ai+1 , kedua-dua unsur ditukarganti. Setelah selesai satu laluan, unsur terbesar dalam senarai akan dipindahkan sedikit demi sedikit ke hujung senarai (seperti gelembung udara dalam akuarium). Untuk laluan berikutnya tatasusunan diimbas semula dari mula tetapi jumlah perbandingan diku- rangkan satu berbanding laluan pertama kerana unsur terbesar telah dikeluarkan dari senarai. Seterusnya, setiap laluan memendekkan senarai yang perlu diimbas sehingga panjang senarai tinggal 2 unsur. Untuk mengelakkan senarai diimbas jika senarai telah berada dalam keadaan terisih, konsep bendera perisian5 diperkenalkan. Di sini D5 berfungsi sebagai pembolehubah Boolean yang bernilai 0 di awal setiap imbasan dan diset ke –1 jika berlaku penukaran. Jika bendera didapati masih sifar setelah tamat suatu laluan, ini bermakna senarai telah terisih dan laluan seterusnya tidak diperlukan. * * ISIH.X68 * ORG $1000 START LEA ARRAY,A0 ISIH MOVE.W (A0)+,D0 ; kata pertama = jumlah unsur MOVEA.L A0,A1 ; salin penuding GLUAR MOVEA.L A1,A0 ; reset penuding ke awal tatasusunan 4 bubble sort 5 software flagIf you found this book useful, donate to the Gaza fund
  • 109. 7.3. Kajian Kes Olahan Tatasusunan 105 CLR.W D5 ; padam bendera tukarganti SUB.W #1,D0 ; susutkan bilangan perbandingan MOVE.W D0,D1 ; salin ke pembilang dalam GDALAM MOVE.W (A0)+,D2 ; ambil satu kata CMP.W (A0),D2 ; banding dgn jirannya BLE.S SKIP ; jika kata(i) < kata(i+1) maka MOVE.W (A0),-2(A0) ; tukarganti kata(i) <-> kata(i+1) MOVE.W D2,(A0) MOVEQ #-1,D5 ; dan set bendera tukarganti SKIP SUB.W #1,D1 ; susutkan pembilang dalam BNE GDALAM ; teruskan selagi pembilang dalam belum 0 TST.W D5 ; semak bendera tukarganti BNE.S GLUAR ; jika bendera set, buat semula MOVE.B #9,D0 ; tamatkan program TRAP #15 ARRAY DC.W 8,-1,2,8,5,9,3,-3,4 END START Rajah 7.5 menunjukkan operasi isihan gelembung. Dalam laluan pertama, nilai 9 turun beransur- ansur ke dasar tatasusunan. Nilai ini tidak lagi dilihat semasa laluan kedua. Petak-petak berwarna kelabu dalam rajah sebelah bawah ialah unsur-unsur yang telah siap diisih. Nilai terkecil, –3, boleh dilihat naik ke atas tatasusunan perlahan-lahan selepas setiap laluan seperti satu gelembung. 
 Rajah 7.5: Isihan gelembung..If you found this book useful, donate to the Gaza fund
  • 110. 106 Bab 7. Olahan Tatasusunan dan Rentetan 7.4 Rentetan Rentetan amnya ditakrifkan sebagai tatasusunan yang mengandungi hanya aksara. Rentetan diakhiri nol6 adalah rentetan yang mengandungi kod-kod ASCII dan diakhiri oleh aksara NOL (ASCII 0). Mengakhiri rentetan dengan aksara NOL membolehkan pengaturcara memendek atau memanjangkan rentetan sesuka hati kerana jumlah aksara tidak perlu diketahui. Ini kerana aksara NOL mudah diuji dalam bahasa himpunan. Seksyen ini akan menunjukkan olahan-olahan yang kerap dilakukan terhadap rentetan. 
 Rajah 7.6: Suatu rentetan diakhiri NOL. Antara operasi-operasi yang lazim dilakukan terhadap rentetan termasuk: • Mencari panjang rentetan • Menukar aksara-aksara ke huruf besar atau huruf kecil • Membanding dua rentetan • Mencari kewujudan satu aksara atau sub-rentetan • Mencantumkan dua rentetan Mencari Panjang Rentetan Walaupun kebanyakan operasi tidak memerlukan jumlah aksara diketahui, ada masanya jumlah aksara masih diperlukan. Aturcara di bawah membilang aksara-aksara dalam rentetan sehingga terjumpa aksara NOL. * * STRLEN.X68 * ORG $1000 ; START LEA #STRING,A0 CLR D1 ULANG TST.B (A0)+ ; uji aksara semasa BEQ SIAP ; jika aksara = NOL, siap ADDQ #1,D1 BRA ULANG SIAP MOVE.B #9,D0 6 null-terminated stringIf you found this book useful, donate to the Gaza fund
  • 111. 7.4. Rentetan 107 TRAP #15 STRING DC.B ’Suatu rentetan yang panjang dan memakan masa menyemaknya’,0 END START Panjang rentetan dilaporkan dalam D1. Gelung utama ditulis dalam bentuk gelung prauji kerana ada kemungkinan rentetan kosong. Jika rentetan kosong, aturcara ditamatkan dengan D1 sifar. Menukarkan Aksara-Aksara ke Huruf Besar Menyeragamkan aksara-aksara adalah satu operasi lazim. Katakan suatu sistem mula beroperasi selepas pengguna menaip ’GO’. Pengguna mungkin menekan ’Go’, ’GO’, ’go’ atau ’gO’. Walaupun semantiknya sama, keempat-empat rentetan ini berbeza dalam bentuk ASCII. Tanpa menukar ke huruf besar, aturcara perlu menyemak input sama ada bersamaan dengan salah satu daripada empat kemungkinan. Jika semua huruf ditukar ke huruf besar, atucara cuma perlu membandingkan input dengan rentetan ’GO’. Aturcara di bawah memperlihatkan operasi menukar huruf-huruf kecil dalam rentetan kepada huruf besar. * * LUCK.X68 (lower to upper case Konversion) * ORG $1000 START LEA STRING,A0 LOOP MOVE.B (A0)+,D0 BEQ EXIT ; Jika NOL, tamatkan aturcara CMP.B #’a’,D0 BLT LOOP CMP.B #’z’,D0 BGT LOOP ; Tukar huruf kecil sahaja SUB.B #$20,D0 ; ASCII Huruf besar = ASCII huruf kecil - $20 MOVE.B D0,-1(A0) ; Simpan semula ke ingatan BRA LOOP EXIT MOVE.B #9,D0 TRAP #15 STRING DC.B ’SuAtU rEnTeTaN DeNgAn HuRuF kEcIl BeRcAmPuR bEsAr 123$!*()’,0 END START Hanya huruf kecil perlu diolah menjadi huruf besar. Aksara-aksara lain tidak boleh diusik langsung. Huruf kecil ditukar ke huruf besar dengan menolak $20 dari kod ASCII. Contohnya, huruf ’A’ mempunyai kod $40 dan huruf ’a’ mempunyai kod $60. Menolak $20 dari kod ASCII mana-mana huruf kecil mengubahnya menjadi huruf besar. Mencari Aksara dalam Senarai Dalam mencari kewujudan suatu aksara tertentu dalam rentetan, terdapat dua cara keluar gelung. Pertama, aksara dijumpai. Kedua, gelung telah diimbas sampai ke penghujung. Ini satu lagi algoritma yang sesuai digunakan bendera perisian. Dengan menganggap aksara tidak dijumpai dari mula, bendera diset ke 0. Jika aksara dijumpai barulah bendera diisikan dengan –1 (atau sebarang nilai bukan sifar).If you found this book useful, donate to the Gaza fund
  • 112. 108 Bab 7. Olahan Tatasusunan dan Rentetan * * STRSCAN.X68 * ORG $1000 LEA STR,A0 ; penuding ke awal rentetan MOVE.B #’A’,D0 ; aksara yang dicari CLR.B D0 ; anggap tidak jumpa CARI TST.B (A0) ; tamat jika jumpa NOL BEQ EXIT CMP.B (A0)+,D0 ; cari selagi belum jumpa BNE CARI JUMPA MOVEQ #-1,D0 ; jika jumpa, set bendera ke -1 EXIT MOVE.B #9,D0 TRAP #15 STR DC.B PREDECREMENT ADDRESS REGISTER INDIRECT,0 END 7.5 Operasi Output Aksara Peranti input/output 68000 terletak dalam peta ingatan, serupa dengan kedudukan ingatan lain. Menulis ke alamat yg disambung ke peranti output mengeluarkan maklumat. Konsep ini dinamai input/output terpeta ingatan. Peranti input/output (seperti papan kekunci dan pencetak) adalah jauh lebih lambat berbanding pemproses. Operasi input/output hanya boleh dilakukan dengan syarat peranti bersedia. Ini dinamai input/output bersyarat. Setiap peranti dalam input/output bersyarat mempunyai sekurang-kurangnya dua daftar berikut (Lihat Rajah 7.7): • Daftar status — memberitahu kesediaan peranti • Daftar data — di mana data dibaca atau ditulis Lazimnya, setiap bit daftar status mempunyai fungsi tertentu. Satu bit dalam daftar status sudah cukup untuk memberitahu status peranti. Rajah 7.8 menunjukkan carta aliran bagi melakukan operasi output dengan peranti yang mempunyai daftar status. 
 Rajah 7.7: Peranti input/output dengan daftar status.If you found this book useful, donate to the Gaza fund
  • 113. 7.5. Operasi Output Aksara 109 
 Rajah 7.8: Carta aliran bagi operasi output bersyarat. Contoh 1: Diberi suatu antaramuka dengan pencetak dengan daftar status di alamat $FF8001 dan daftar data di alamat $FF8003. Tunjukkan turutan suruhan untuk mengeluarkan byte dalam D0. Anggapkan bit 1 bersamaann 1 dalam daftar status periferal mewakili peranti sedia. Penyelesaian: Untuk menyemak mana-mana bit bersamaan 1 atau 0, suruhan yang sesuai ialah BTST. Suruhan BPL boleh digunakan untuk mengulang semakan daftar status selagi bit bernilai 0. ULANG BTST #1,$FF8001 ; uji bit dalam daftar status periferal BPL ULANG ; jika 0, peranti belum sedia MOVE.B $D0,$FF803 ; jiak 1, keluarkan byte Contoh 2: Katakan pencetak mempunyai antaramuka seperti dalam Contoh 1. Hantarkan rentetan ’HELLO’ ke pencetak. Penyelesaian: Dengan menggunakan rentetan diakhiri NOL, mudah mengetahui bila rentetan telah sampai hujung kerana suruhan MOVE mengemaskini bendera Z. Jika aksara bukan NOL telah dihantar ke pencetak, Z = 0 dan gelung diulang dengan suruhan BNE. Jika aksara NOL telah dihantar, gelung ditamatkan. STATUS EQU $FF8001 DATA EQU $FF8003 LEA HELLO,A0 ; penuding = awal rentetan ULANG BTST #1,STATUS ; semak status BPL ULANG ; ulang jika sifar MOVE.B (A0)+,DATA ; hantar aksara ke pencetak BNE ULANG ; ulang hingga tamat ... HELLO DC.B ’HELLO’,0If you found this book useful, donate to the Gaza fund
  • 114. 110 Bab 7. Olahan Tatasusunan dan Rentetan 7.6 Rutin TRAP dalam Easy68k Simulator Easy68k menyediakan beberapa rutin bagi pemindahan input/output standard. Rutin-rutin ini membentuk suatu pustaka yang mengelakkan pengaturcara menulis sendiri rutin-rutin asas. Penggunaan pustaka rutin menjimatkan masa serta menyeragamkan aturcara-aturcara yang ditulis untuk sesuatu platform. Setiap rutin Easy68k digelar fungsi atau tugas. Untuk menggunakan mana-mana tugas Easy68k, kod tugas diisi ke dalam byte terendah D0 diikuti dengan suruhan TRAP #15. Contohnya, tugas 6 memaparkan aksara dalam D1 ke konsol. MOVE.B #’A’,D1 ; ASCII bagi aksara MOVE.B #6,D0 ; pilih kod tugas TRAP #15 ; laksanakan output Jadual 7.1 menyenaraikan beberapa tugas yang tersedia dalam EASy68k. Bagi mendapatkan senarai lengkap, rujuk menu Help dalam EASy68k. Rentetan diakhiri NOL digunakan oleh tugas 2, 13 dan 14. Bagi tugas 13 dan 14 terdapat rujukan aksara CR dan LF. Aksara CR7 adalah ASCII 13 yang mengembalikan penggesa8 ke kiri skrin. Aksara LF9 adalah aksara ASCII 10 yang menggerakkan penggesa sebaris ke bawah. Kombinasi CR dan LF meletakkan penggesa di baris baru dalam lajur paling kiri. Sistem papan tunggal seperti FLIGHT68K pula menggunakan mekanisme berbeza untuk melakukan I/O tetapi konsep asasnya sama iaitu menyediakan pustaka bagi kemudahan pengguna. Contoh 1: Gunakan rutin TRAP yang disediakan oleh EASy68k untuk mengeluarkan perutusan “HELLO”. 7 carriage return 8 cursor 9 linefeed Jadual 7.1: Beberapa tugas TRAP #15 pustaka Easy68k Nombor Tugas 2 Baca rentetan dari papan kekunci dan simpan di (A1). Panjang dilaporkan di D1.W (max 80) 3 Papar nombor bertanda dalam D1.L dalam perpuluhan 4 Baca nombor dari papan kekunci ke D1.L 5 Baca satu aksara dari papan kekunci ke D1.B 6 Papar satu aksara dalam D1.B 7 D1.B bernilai 1 jika ada input di papan kekunci, 0 sebaliknya. Gunakan tugas 5 untuk membaca kekunci 8 Kembalikan 1/100 saat sejak tengah malam dalam D1.L. Amat berguna untuk mendapatkan nombor rawak. 9 Tamatkan program (Hentikan simulator) 13 Papar rentetan di (A1) dengan CR, LF. 14 Papar rentetan di (A1) tanpa CR, LF. 15 Papar nombor tak bertanda dalam D1.L yang ditukar ke dasar (2 hingga 36) terkandung dalam D2.B. Contohnya, untuk memaparkan D1.L dalam perenambelasan letakkan 16 dalam D2.B. Nilai di luar 2 hingga 36 diabaikan. 17 Kombinasi tugas 14 dan 3. Papar rentetan di (A1) tanpa CR, LF kemudian papar nombor perpuluhan dalam D1.L 18 Kombinasi tugas 14 dan 4. Papar rentetan di (A1) tanpa CR, LF kemudian baca nombor dari papan kekunci ke D1.LIf you found this book useful, donate to the Gaza fund
  • 115. 7.6. Rutin TRAP dalam Easy68k 111 Penyelesaian: Letakkan alamat rentetan dalam A1 dan kod 13 (atau 14) dalam D0. * * HELLO.X68 * ORG $1000 START LEA HELLO,A1 MOVE.W #13,D0 TRAP #15 ; paparkan HELLO MOVE.W #9 TRAP #15 ; tamatkan program HELLO DC.B ’HELLO’,0 END START Contoh 2: Baca suatu rentetan dan laporkan panjang (jumlah aksara) di dalamnya. Penyelesaian: Tugas 2 boleh digunakan untuk membaca rentetan. Sebelum melaksanakan TRAP, letakkan alamat dasar penimbal rentetan dalam A1. Sekembalinya dari TRAP, penimbal telah diisi oleh rentetan dan panjang rentetan boleh dibaca dari D1.W. Untuk memaparkan rentetan dan nilai dalam D1, gunakan tugas 17. * * Aturcara untuk membaca rentetan dan melaporkan panjangnya. * ORG $1000 START LEA BUFFER,A1 ; sediakan penuding ke penimbal MOVE.W #2,D0 TRAP #15 ; baca rentetan, D1.W = panjangnya LEA REPORT,A1 MOVE.B #17,D0 TRAP #15 ; papar mesej dan panjang rentetan MOVE.B #9,D0 TRAP #15 BUFFER DS.B 80 ; max rentetan 80 aksara REPORT DC.B ’Panjang rentetan : ’,0 END START Tugas 17 (18) boleh juga dilakukan berasingan melalui tugas 14 dan 3 (4).If you found this book useful, donate to the Gaza fund
  • 116. 112 Bab 7. Olahan Tatasusunan dan Rentetan 7.7 Penggunaan Tatusunan Lanjutan Selain dicapai senarai linear dari awal ke akhir, tatasusunan boleh dicapai secara rawak melalui indeks. Dua aplikasi berkenaan adalah jadual penukaran dan jadual lompat. Jadual Penukaran Operasi menukar dari satu kod ke kod yang lain boleh dilaksanakan dengan cekap melalui jadual penukaran10 . Dalam contoh di bawah, 4 bit paling bawah dalam D2 hendak ditukar ke bentuk ASCII sebelum dipaparkan. * * Aturcara untuk membaca rentetan dan melaporkan panjangnya. * ORG $1000 START MOVE.B #8,D0 TRAP #15 ; dapatkan nombor rawak AND.W #$F,D0 ; ambil hanya 4 bit terendah LEA LUT,A0 MOVE.B (A0,D0),D1 ; tukar ke bentuk ASCII MOVE.B #6,D0 TRAP #15 ; papar aksara terhasil MOVE.B #9,D0 ; ganti dgn BRA START utk operasi tanpa henti TRAP #15 LUT DS.B ’0123456789ABCDEF’ END START Nilai indeks ke jadual diambil secara rawak ke D0. Suruhan MOVE.B (A0,D0) seterusnya mencapai jadual bergantung nilai indeks. Jadual Lompat Suruhan JMP berupaya melaksanakan struktur switch seperti yang kerap terdapat di dalam bahasa tahap tinggi. Dalam contoh di bawah, input pengguna yang sah dari 0 hingga 3 mengarah sistem melakukan sesuatu operasi dengan melaksanakan satu rutin. Nilai-nilai lain dianggap tidak sah dan menyebabkan input diambil semula. switch(input) { case 0: execute(); break; case 1: pause(); break; case 2: reset(); break; case 3: step(); break; default: readkey(); } Turutan berikut melaksanakan struktur switch di atas. Nilai input dianggap terletak dalam daftar D0. 10 lookup tableIf you found this book useful, donate to the Gaza fund
  • 117. 7.7. Penggunaan Tatusunan Lanjutan 113 CMP.W #3,D0 ; pastikan input jangan lebih 4 BLT SKIP MOVE.W #4,D0 SKIP ASL.L #2,D0 ; input darab 4 LEA ADDR0,A0 ; A0 = alamat dasar tatasusunan JMP (A0,D0) ; lompat ke rutin JUMPTBL DC.L EXECUTE ; "Jump Table" DC.L PAUSE DC.L RESET DC.L STEP DC.L READKEY Nilai dalam D0 perlu dipastikan tidak melebihi 4. Nilai-nilai melebihi digantikan dengan 4. Seterusnya, nilai D0 didarab 4 kerana saiz setiap alamat ialah 4 byte. Suruhan ASL.L #2,D0 digunakan kerana ia jauh lebih pantas berbanding MULU #4,D0. Suruhan LEA JUMPTBL,A0 mengisikan A0 dengan alamat pertama dalam senarai. Akhir sekali, suruhan JMP (A0,D0) akan melompat ke rutin yang betul bergantung kepada nilai D0. Penutup Bab ini telah menunjukkan bagaimana operasi asas terhadap tatasusunan dan rentetan dilakukan dalam bahasa himpunan 68000. Untuk memudahkan pengaturcaraan, pustaka fungsi EASy68k diperkenalkan. Latihan 1. Tulis aturcara yang mencari purata semua unsur-unsur dalam satu tatasusunan nombor 16 bit tak bertanda. 2. Tulis aturcara yang mencari nilai maksimum dalam satu tatasusunan nombor 32 bit bertanda. 3. Tulis aturcara yang membilang nilai-nilai yang boleh dibahagi 3 dalam satu tatasusunan nombor 8 bit bertanda. 4. Tulis aturcara yang menukar kesemua huruf besar dalam rentetan ke huruf kecil. 5. Tulis aturcara yang membandingkan dua rentetan, S1 dan S2 . Laporkan perbandingan dengan kaedah berikut: S1 = S2 → D0 = 0 S1 < S2 → D0 = sebarang nilai negati f S1 > S2 → D0 = sebarang nilai positi f 6. Tulis aturcara yang menarik keluar sub-rentetan yang bermula dari aksara ke-5 hingga ke-8 daripada satu rentetan lebih panjang. Contohnya, daripada rentetan ’Selamat Datang’, sub- rentetan yang dimaksudkan ialah ’mat ’. 7. Input 10 nombor 16 bit tak bertanda menggunakan tugas 4 EASy68K. Outputkan nombor terbesar dan terkecil. 8. Input satu turutan nombor 16 bit tak bertanda dan paparkan jumlah semasa. Hentikan aturcara apabila jumlah melebihi $1000, dan laporkan jumlah nombor yang diinput.If you found this book useful, donate to the Gaza fund
  • 118. 114 Bab 7. Olahan Tatasusunan dan Rentetan 15 i a2 9. Tulis turutan suruhan bagi mengira ∑ 50 yang mana ai adalah kata bertanda yang terletak di i=0 ingatan bermula dari alamat $2000. 11 10. Tulis turutan suruhan bagi mengira ∑ |xi − yi | yang mana xi dan yi adalah dua tatasusunan byte i=0 yang terletak di ingatan bermula dari alamat $2000 dan $2010.If you found this book useful, donate to the Gaza fund
  • 119. Bab 8 Tindanan dan Subrutin Objektif • Konsep asas tindanan • Penggunaan subrutin • Teknik pengiriman parameter • Melindungi isi daftar Pengenalan Program yang baik ditulis berdasarkan konsep modulariti – memecahkan program besar kepada beberapa subrutin. Satu program utama mengandungi struktur asas manakala unit-unit program kecil dipanggil subrutin melaksanakan kesemua butiran terperinci. Operasi subrutin bergantung kepada tindanan. 8.1 Tindanan Tindanan ditakrifkan sebagai suatu struktur data yang dibina atas prinsip “LIFO”1 . Tindanan digunakan untuk menyimpan data secara sementara dan digunakan untuk pengendalian subrutin. Ia dijumpai dalam hampir semua sistem komputer moden. Dengan prinsip LIFO, data terakhir ditambah adalah data pertama diambil. Analogi LIFO ialah seorang pekerja pejabat: seorang kerani hanya boleh memproses satu dokumen pada sesuatu masa, jadi dokumen terakhir diletakkan di peti masuk adalah dokumen pertama diproses. Tindanan yang dilaksanakan oleh pemproses 68000 adalah suatu turutan data yang mempunyai sifat- sifat tambahan berikut: • Daftar khas bagi pengendalian tindanan ialah A7, yang boleh juga dirujuk dengan nama SP. • SP sentiasa menunjuk ke unsur terakhir disimpan. • Tindanan mengembang ke arah alamat 0. Ada pemproses lain yang tindanannya mengembang dai atas bertentangan. • Saiz unsur dalam tindanan ialah 16 atau 32 bit. Dua operasi yang boleh dilakukan terhadap tindanan adalah: 1 last-in first-out 115If you found this book useful, donate to the Gaza fund
  • 120. 116 Bab 8. Tindanan dan Subrutin 
 Rajah 8.1: Operasi yang dibenarkan untuk tindanan. • Operasi push, yang mana satu item data diletakkan ke atas tindanan, dan alamat dalam SP disusutkan bergantung saiz data. Mod alamat prasusut digunakan untuk operasi push, contohnya: MOVE.s <ea>,-(SP) • Operasi pop atau pull, yang mana satu item data diambil dari atas tindanan, dan alamat dalam SP ditokok bergantung saiz data. Mod alamat pascatokok digunakan untuk operasi pop, contohnya: MOVE.s (SP)+,<ea> Ada pemproses lain yang mempunyai suruhan-suruhan PUSH dan POP, tetapi suruhan paling hampir dalam 68000 ialah PEA (push effective address). Selain PEA, suruhan lain yang diadakan khusus untuk tindanan ialah MOVEM (move multiple) yang diliputi dalam Seksyen 8.4. Saiz data yang sah digunakan dengan tindanan sistem2 yang dikendalikan oleh daftar SP ialah 2 atau 4 byte sahaja. Disebabkan penuding tindanan SP dikhaskan untuk operasi-operasi melibatkan subrutin, ia tidak boleh digunakan untuk tujuan menuding ke tatasusunan biasa seperti daftar A0-A6. Selain tindanan sistem, pengatucara boleh membina tindanan pengguna3 menggunakan daftar A0- A6 yang membenarkan saiz data 1, 2, atau 4 byte, tetapi suruhan-suruhan khusus seperti yang dinyatakan tidak boleh digunakan. 8.2 Prinsip Asas Subrutin Subrutin ditakrifkan sebagai suatu keratan aturcara yang: • melakukan satu tugas yang jelas • diaktifkan (dipanggil) oleh satu aturcara lain • mengembalikan kawalan ke aturcara pemanggil setelah selesai Terdapat beberapa sebab subrutin digunakan: • menggunakan semula kod yang berguna (dan siap diuji!) tanpa perlu menaipnya semula • membahagi-bahagikan tugas antara ramai pengaturcara • menggunakan pustaka rutin yang berguna 2 system stack 3 user stackIf you found this book useful, donate to the Gaza fund
  • 121. 8.2. Prinsip Asas Subrutin 117 Untuk memanggil subrutin, laksanakan suruhan JSR <label>. Ini menyebabkan aturcara melompat ke alamat <label>. Selepas turutan suruhan dalam subrutin ditamatkan, subrutin kembali ke aturcara pemanggil pada suruhan yang menuruti panggilan subrutin. Setelah subrutin tamat, suruhan RTS di hujung subrutin mengembalikan kawalan ke aturcara asal (Lihat Rajah 8.3). Mekanisme Suruhan JSR dan RTS Suruhan JSR (jump to subroutine) yang digunakan untuk memanggil subrutin mempunyai sintaks: JSR <ea> Apabila dilaksanakan, operasi berikut dilakukan 1) SP – 4 → SP Tunjuk ke atas tindanan baru 2) PC → (SP) Simpan PC (alamat suruhan berikut) 3) Alamat subrutin → PC Lompat ke subrutin Ringkasnya, JSR menyimpan kandungan PC di atas tindanan sistem kemudian melompat ke subrutin. Nilai SP dikurangkan 4 kerana nilai PC yang disimpan bersaiz 32 bit. Alamat berkesan subrutin lazimnya didapati melalui mod mutlak tetapi pelbagai mod alamat juga dibenarkan. Kepelbagaian mod- mod alamat membolehkan pembinaan struktur kawalan yang canggih. Rajah 8.2: Operasi dan pengembangan tindanan. 
 Rajah 8.3: Memanggil subrutin.If you found this book useful, donate to the Gaza fund
  • 122. 118 Bab 8. Tindanan dan Subrutin Selain suruhan JSR, suruhan BSR juga boleh memanggil subrutin. Dengan suruhan BSR, hanya mod relatif PC dibolehkan. Oleh itu, langkah 3 di atas yang digantikan dengan ungkapan PC + ofset → PC. Nilai PC yang disimpan dalam tindanan masih 4 byte. Suruhan yang mengembalikan kawalan ke aturcara utama ialah RTS (return from subroutine). Suruhan RTS menggantikan PC dengan kata panjang yang diambil di atas tindanan. Ia mempunyai format: RTS Langkah-langkah berikut berlaku semasa perlaksanaan RTS: 1) (SP) → PC Isi PC dengan nilai teratas tindanan 2) SP + 4 → SP Tokok nilai SP Kelebihan penggunaan kombinasi suruhan JSR dan RTS menjadi jelas apabila subrutin dipanggil lebih daripada sekali. Aturcara berikut memanggil subrutin SUBR dua kali. Setiap kali SUBR dipanggil, alamat suruhan yang menuruti JSR disimpan di tindanan. Bagi panggilan pertama, alamat X disimpan. Bagi panggilan kedua, alamat Y pula disimpan. (Label-label ini tidak diperlukan untuk perlaksanaan subrutin dan fungsinya hanya untuk menerangkan operasi aturcara ini.) Suruhan RTS di hujung subrutin memungut alamat yang betul dari tindanan setiap kali. Rujuk Rajah 8.4. UTAMA ... ; mula aturcara utama ... JSR SUBR ; panggilan pertama X ... ... JSR SUBR ; panggilan kedua Y ... ... SUBR CLR.L (A0)+ SUBQ.B #1,D0 BNE SUBR RTS Rajah 8.5 menunjukkan perlaksanaan subrutin SUBR yang bermula di alamat $1030. Suruhan JSR terletak di alamat $1010 dan panjang suruhan JSR ialah 4 byte. Ini bermakna nilai PC yang disimpan di tindanan semasa perlaksanaan subrutin ialah $1014. 
 Rajah 8.4: Memanggil subrutin berulangkali.If you found this book useful, donate to the Gaza fund
  • 123. 8.3. Subrutin Bersarang 119 Rajah 8.5: Operasi JSR dan RTS. 8.3 Subrutin Bersarang Jika aturcara utama memanggil subrutin dan subrutin tidak memanggil subrutin lain, penggunaan daftarpun sudah memadai untuk menyimpan alamat kembali. Bagaimanapun, secara purata, subrutin boleh memanggil subrutin lain kira-kira lima tahap dalam sistem yang kompleks. Subrutin yang memanggil subrutin lain dikatakan subrutin bersarang4 . Aturcara berikut menunjukkan rangka suatu aturcara dengan subrutin dua tahap. Aturcara utama memanggil subrutin SUB1. Selepas itu, subrutin SUB1 memanggil SUB2. UTAMA ... ;MULA ATURCARA UTAMA .... JSR SUB1 X ... ... SUB1 ... ;MULA SUBRUTIN 1 . JSR SUB2 ... ... RTS 4 nested subroutineIf you found this book useful, donate to the Gaza fund
  • 124. 120 Bab 8. Tindanan dan Subrutin SUB2 ... ;MULA SUBRUTIN 2 . RTS 
 Rajah 8.6: Aliran kawalan semasa melaksanakan subrutin bersarang. Rajah 8.7: Kesan subrutin bersarang kepada tindanan. Rajah 8.6 menunjukkan aliran kawalan aturcara di atas. Rajah 8.7 menunjukkan keadaan tindanan sistem sepanjang perlaksanaan aturcara. Apabila SUB1 dilaksanakan, tindanan menyimpan alamat X. Alamat ini ialah tempat aturcara utama disambung semula apabila SUB1 tamat. Semasa dalam SUB2, alamat Y pula ditindan di atas alamat X. Alamat ini pula ialah tempat kawalan diteruskan setelah SUB2 tamat. Suruhan RTS sentiasa memungut 4 byte teratas dalam tindanan jadi RTS di hujung SUB2 memungut alamat Y, bukan alamat X. 8.4 Melindungi Isi Daftar Aturcara utama dan subrutin memerlukan daftar untuk kegunaan masing-masing. Jika terdapat banyak daftar, ini tidak menjadi masalah kerana kita boleh menetapkan daftar mana yang digunakan pemanggil dan yang mana pula untuk kegunaan subrutin. Oleh sebab jumlah daftar adalah terhad, daftar yang sama diperlukan oleh kedua-dua pemanggil dan subrutin. Walaupun ini kelihatan seperti satu masalah besar, penyelesaiannya agak mudah kerana kebanyakan daftar yang digunakan oleh subrutin hanya sahIf you found this book useful, donate to the Gaza fund
  • 125. 8.4. Melindungi Isi Daftar 121 sepanjang perlaksanaan subrutin. Nilai dalam daftar-daftar ini bersifat sementara dan boleh dihapuskan apabila subrutin tamat. Untuk memastikan nilai-nilai dalam daftar tidak berubah dari pandangan pemanggil, mana-mana daftar yang digunakan dalam subrutin perlu disimpan di tempat lain. Kesemua daftar dikembalikan kepada nilai asal dengan menyalin semula maklumat dari tempat ini sebelum subrutin pulang. Sebarang tempat dalam ingatan boleh digunakan. Untuk menyokong subrutin bersarang, tindanan sistem adalah tempat yang paling sesuai. Suruhan berikut menyimpan daftar D0, D1, D2 dan A0 secara sementara di awal subrutin dan mengisikan semula di akhir subrutin. MOVE.L D0,-(SP) MOVE.L D1,-(SP) MOVE.L D2,-(SP) MOVE.L A0,-(SP) ... isi subrutin ... MOVE.L (SP)+,A0 MOVE.L (SP)+,D2 MOVE.L (SP)+,D1 MOVE.L (SP)+,D0 EXIT RTS Turutan daftar disimpan dan diambil semula perlu disongsangkan untuk mengekalkan nilai yang betul. (Rujuk Rajah 8.8.) Suruhan MOVEM dan RTR Pemproses 68000 menyediakan suruhan MOVEM (move multiple registers) untuk melicinkan lagi operasi menyimpan dan mengambil semula daftar di awal dan akhir subrutin. Format suruhan ini ialah: MOVEM <senarai daftar>,-(SP) MOVEM (SP)+,<senarai daftar> Saiz data yang dibenarkan ialah 16 dan 32 bit. Ungkapan <senarai daftar> menyenaraikan daftar- daftar yang disimpan dan dipulihara. Suruhan berikut menyimpan daftar D0 hingga D2 dan A5 ke tindanan. Rajah 8.8: Menumpang tindanan untuk menyimpan data.If you found this book useful, donate to the Gaza fund
  • 126. 122 Bab 8. Tindanan dan Subrutin 
 (a) Menyimpan daftar. 
 (b) Memulihara daftar. Rajah 8.9: Menjaga isi daftar semasa dalam subrutin dengan MOVEM. MOVEM.L D0-D2/A5,-(SP) Daftar-daftar tersebut boleh diambil semula oleh: MOVEM.L (SP)+,D0-D2/A5 Kebanyakan penghimpun membenarkan sintaks khas untuk suruhan ini. Nama-nama daftar boleh dipisahkan dengan aksara ’/’. Bagi daftar berturutan, cuma berikan nama daftar awal dan akhir yang dicantumkan dengan aksara ’–’. Turutan nama-nama daftar tidak penting kerana daftar-daftar disimpan dan diambil semula dengan turutan yang ditetapkan pada tahap perkakasan. Pengaturcara hanya perlu memastikan daftar yang dinyatakan untuk menyimpan dan mengambil semula adalah daftar yang sama. (Rujuk Rajah 8.9.) Terdapat juga situasi apabila nilai daftar CCR perlu dikekalkan. Dalam kes ini, daftar CCR disimpan di tindanan di awal subrutin. Setelah tamat subrutin, daftar ini boleh dipulihara dengan suruhan RTR (return and restore condition codes). Ini menjadikan aturcara lebih cekap kerana menjimatkan masa dan tidak memerlukan sebarang suruhan tambahan. Contoh berikut menunjukkan rangka subrutin yang menggunakan suruhan RTR. SUBR MOVE SR,-(SP) MOVEM A0-A6/D1-D3,-(SP) ... isi subrutin ... MOVEM (SP)+,A0-A6/D1-D3 RTR 8.5 Pengiriman Parameter Subrutin yang ditulis dengan sempurna boleh dipanggil berulangkali dan jika benar-benar serbaguna, boleh digunakan semula dalam aturcara yang berlainan. Untuk membolehkan subrutin yang sama digunakan dalam keadaan berlainan, pemanggil perlu memberikan parameter yang berbeza setiap kali.If you found this book useful, donate to the Gaza fund
  • 127. 8.5. Pengiriman Parameter 123 Misalnya, jika kita perlu mengira faktorial 4! dan 5! dalam aturcara yang sama, kita boleh menulis dua rutin yang khusus bagi kedua-dua nilai. Yang lebih baik lagi ialah jika menulis subrutin yang mengira faktorial n!. Untuk mengira faktorial 4!, subrutin dipanggil dengan memberikan parameter 4 dan untuk mengira 5!, parameter diubah kepada 5. Beberapa kaedah boleh digunakan untuk menghantar parameter daripada aturcara pemanggil ke subrutin. Dalam contoh-contoh di bawah, aturcara pemanggil memanggil suatu subrutin yang menukar nilai ASCII perpuluhan kepada nilai setara dalam perduaan. Pengiriman Parameter Melalui Daftar Kaedah pengiriman parameter termudah ialah melalui daftar. Parameter diisi ke dalam daftar sebelum panggilan. Kaedah ini adalah yang terpantas tetapi praktikal hanya bagi parameter yang sedikit. * * PARPASS1.X68 * ORG $1000 START MOVE.B MSB,D0 MOVE.B LSB,D1 JSR ASC2BIN MOVE D2,NOMBOR MOVE.B #9,D0 TRAP #15 * * SUBRUTIN UNTUK MENUKAR D0/D1 KE PERDUAAN * INPUT: D0.B = MSB DLM ASCII * D1.B = LSB DLM ASCII * OUTPUT:D2=D0*10+D1 * ATAU D2=-1 JIKA RALAT * ASC2BIN SUB.B #’0’,D0 CMP.B #9,D0 BHI RALAT SUB.B #’0’,D1 CMP.B #9,D1 BHI RALAT CLR.W D2 MOVE.B D0,D2 MULU #10,D2 ADD.B D1,D2 BRA SIAP RALAT MOVEQ #-1,D2 SIAP RTS * * KAWASAN DATA * MSB DS.B 1 LSB DS.B 1 NOMBOR DS.W 1If you found this book useful, donate to the Gaza fund
  • 128. 124 Bab 8. Tindanan dan Subrutin END START Jika data hanya dihantar melebihi muatan daftar, seperti suatu tatasusunan, gunakan daftar alamat untuk mengirimkan alamat data. Pengiriman Parameter Dalam Barisan Kaedah pengiriman parameter dalam barisan5 menyelitkan parameter selepas suruhan JSR di celah-celah suruhan bahasa himpunan. Subrutin mencapai parameter secara tidak langsung melalui SP. Kaedah ini kelihatan kemas kerana data terletak berdekatan suruhan JSR. Masalah dengan kaedah ini percampuran antara kod dan data dalam kawasan yang sepatutnya mengandungi hanya kod. Kesilapan dalam jumlah dan jenis parameter boleh mengakibatkan aturcara gagal kembali ke titik sambungan yang sepatutnya. * * PARPASS3.X68 * JSR ASC2BIN ; panggilan subrutin DS.L MSB ; parameter 1 DS.L LSB ; parameter 2 MOVE D2,NOMBOR ; sambung di sini sekembali dari subrutin MOVE.B #9,D0 TRAP #15 * * SUBRUTIN UNTUK MENUKAR 2 LONGWORD YANG MENURUTI JSR KE PERDUAAN * INPUT: ((SP)).L = ALAMAT (MSB DLM ASCII) * (4(SP)).L = ALAMAT (LSB DLM ASCII) * OUTPUT:D2=D0*10+D1 * ATAU D2=-1 JIKA RALAT * ASC2BIN MOVE.L (SP),A0 MOVE (A0),A0 MOVE (A0),D0 MOVE 4(A0),A0 MOVE (A0),D1 SUB.B #’0’,D0 CMP.B #9,D0 BHI RALAT SUB.B #’0’,D1 CMP.B #9,D1 BHI RALAT CLR.W D2 MOVE.B D0,D2 MULU #10,D2 ADD.B D1,D2 BRA SIAP RALAT MOVEQ #-1,D2 SIAP ADDA.L #2,A0 ;UBAHSUAI ALAMAT BALIK MOVE.L A0,SP RTS * 5 inline parameter passingIf you found this book useful, donate to the Gaza fund
  • 129. 8.5. Pengiriman Parameter 125 * KAWASAN DATA * MSB DS.B 1 LSB DS.B 1 NOMBOR DS.W 1 END START Apabila mula-mula masuk ke subrutin, nilai teratas tindanan adalah alamat parameter, bukan alamat kembali. Nilai ini perlu ditambah 8 sebelum suruhan RTS dilaksanakan. Jika ini tidak dilakukan, pemproses akan cuba melaksanakan data dan sudah tentu menyebabkan sistem terkandas. Kaedah ini tidak disyorkan tetapi ditunjukkan kerana masih digunakan dalam beberapa sistem lama seperti SBC Flight68K. Pengiriman Parameter Melalui Tindanan Kaedah pengiriman parameter paling cekap ialah melalui tindanan dan merupakan teknik yang digunakan dalam bahasa tahap tinggi. Untuk menggunakan subrutin, parameter diletakkan di atas tindanan sebelum subrutin dipanggil. Kaedah ini membolehkan bahasa tahap tinggi memanggil subrutin dalam bahasa himpunan untuk melaksanakan mana-mana operasi yang hanya mampu dilakukan pada tahap rendah. Penggunaan tindanan juga membolehkan subrutin recursive dan reentrant dibina (akan diliputi beberapa tahun lagi). Hasil operasi biasanya dipulangkan melalui daftar data. * * PARPASS4.X68 * MOVE.B MSB,-(SP) ; SP disusut 2 byte setiap kali MOVE.B LSB,-(SP) JSR ASC2BIN ADDA #4,SP ; betulkan SP MOVE D2,NOMBOR MOVE.B #9,D0 TRAP #15 * * SUBRUTIN UNTUK MENUKAR 2 BYTE DI ATAS TINDANAN KE PERDUAAN * INPUT: 4(SP).B = MSB DLM ASCII * 6(SP).B = LSB DLM ASCII * OUTPUT:D2=D0*10+D1 * ATAU D2=-1 JIKA RALAT * ASC2BIN MOVE.B 4(SP),D0 MOVE.B 6(SP),D1 AND.W #$00FF,D0 SUB.B #’0’,D0 CMP.B #9,D0 BHI RALAT AND.W #$00FF,D0 SUB.B #’0’,D1 CMP.B #9,D1 BHI RALAT CLR.W D2If you found this book useful, donate to the Gaza fund
  • 130. 126 Bab 8. Tindanan dan Subrutin MOVE.B D0,D2 MULU #10,D2 ADD.B D1,D2 BRA SIAP RALAT MOVEQ #-1,D2 SIAP RTS * * KAWASAN DATA * MSB DS.B 1 LSB DS.B 1 NOMBOR DS.W 1 END START Di sini, data yang ingin dikirim ke subrutin adalah dua byte berasingan. Tindanan sistem berbeza dengan tindanan yang dikendalikan oleh daftar A0 hingga A6 yang mana setiap byte menggunakan dua lokasi. Dalam subrutin, setiap kata yang dipungut dari tindanan perlu ditapis untuk mengembalikannya ke bentuk byte. 8.6 Penggunaan Subrutin Yang Berkesan Berikut adalah beberapa perkara yang wajar diingati untuk menggunakan subrutin secara berkesan. • Subrutin mesti dimulakan dari satu titik sahaja iaitu suruhan pertama dalam subrutin. • Subrutin mesti ada hanya satu suruhan RTS, iaitu suruhan terakhir dalam subrutin. • Tinggalkan subrutin menggunakan RTS, bukan dengan suruhan cabang atau lompat biasa. • Jangan guna operasi push dan pop di tempat selain awal dan akhir subrutin. • Pastikan daftar dipulihara ke nilai asal, kecuali D0, D1, A0, dan A1. Gunakan suruhan MOVEM untuk meminjam daftar. • Subrutin sepatutnya melakukan hanya satu tugas. • Gunakan subrutin walaupun sesuatu tugas tidak dilakukan berulangkali. Penggunaan subrutin membantu penulisan aturcara modular (rekabentuk atas-ke-bawah). • Elakkan menulis dua subrutin yang hampir-hampir sama. Setiap tugas yang berlainan sedikit sahaja mempunyai beberapa nilai data yang membezakannya. Tulis satu subrutin sahaja dan panggil dengan memberi parameter yang berbeza setiap kali. • Pastikan kekebalan subrutin sebelum dikongsi atau digabungkan dengan rutin-rutin lain. Uji dengan pelbagai kombinasi data untuk memastikan ia berfungsi seperti yang dijangka. • Hadkan panjang subrutin kurang daripada 50 baris. Ini membolehkan keseluruhan subrutin dimuatkan dalam sehelai kertas A4 apabila dicetak. Jika boleh, kurangkan lagi kepada 25 baris supaya boleh kelihatan dalam satu skrin. • Sediakan dokumentasi yang cukup. Di awal setiap subrutin, letakkan kepala subrutin yang mengandungi maklumat seperti: nama subrutin, senarai pembolehubah input dan output, senarai pembolehubah dan label luaran yang dirujuk, dan senarai daftar yang diubah. Untuk subrutin yang mungkin digunakan semula, tambahkan nama pengaturcara, tarikh, dan nombor semakan. Ini membolehkan pembaca memahami fungsi subrutin tanpa membaca aliran suruhan dengan terperinci.If you found this book useful, donate to the Gaza fund
  • 131. 8.7. Kajian Kes Subrutin 127 8.7 Kajian Kes Subrutin Algoritma-algoritma demonstrasi di bawah dipakej dalam bentuk subrutin supaya mudah digunakan untuk aplikasi anda. Mengira Pariti Piawaian ASCII tertakrif hanya untuk 7 bit. Biasanya bit teratas diberikan nilai 0. Untuk komunikasi data, bit teratas boleh diset ke nilai pariti. Peranti penghantar mengira jumlah 1 dalam kod ASCII kemudian mengeset (atau memadam) bit teratas supaya jumlah 1 menjadi genap (pariti genap) atau ganjil (pariti ganjil). Jika terdapat ralat penghantaran, jumlah bit yang sepatutnya genap menjadi ganjil dan peranti penerima boleh mengesan ralat ini. Aturcara di bawah memberikan pariti genap kepada setiap aksara dalam rentetan. * * PARITY.X68 * ORG $1000 START LEA STRING,A0 LOOP TST.B (A0) BEQ DONE MOVE.B (A0),D0 ; sediakan data untuk pengiraan JSR PARITY ; kira pariti MOVE.B D0,(A0)+ ; simpan data baruMOVE.W #$1234,D0 BRA LOOP DONE MOVE.B #9,D0 TRAP #15 * STRING DC.B ’Suatu rentetan percubaan’,0 * PARITY MOVE.W D0,-(SP) ; simpan data asal CLR.L D1 ; padamkan jumlah bit 1 MORE TST.B D0 ; jika D0.B = 0, tamat BEQ SKIP LSR.B #1,D0 ; anjak bit ke bendera C BCC MORE ADDQ #1,D1 ; tokok jumlah jika C = 1 BRA MORE SKIP MOVE.W (SP)+,D0 ; ambil data asal BTST #0,D1 ; semak sama ada ganjil BEQ EXIT BSET #7,D0 ; jika ganjil, setkan bit 7 supaya genap EXIT RTS END STARTIf you found this book useful, donate to the Gaza fund
  • 132. 128 Bab 8. Tindanan dan Subrutin Encryption Proses encryption membolehkan maklumat tidak boleh dibaca oleh sesiapa kecuali yang mempunyai kuncinya. Ia telah lama digunakan untuk perhubungan rahsia. Algoritma termudah digelar ROT13 daripada perkataan “rotate by 13 places” atau putar 13 tempat. Untuk menyorokkan sebarang teks, gantikan huruf dengan rakannya yang terletak 13 kedudukan selepasnya. Contohnya, HELLO menjadi URYYB. Untuk menyongsangkan, gunakan teknik yang sama, jadi URYYB menjadi HELLO semula. ROT13 popular dalam Internet untuk permainan. Sesetengah huruf bahasa Inggeris menjadi perkataan lain apabila ditransformasi menggunakan ROT13. Contoh terpanjang ialah pasangan abjurer dengan nowhere. Contoh-contoh lain ialah clerk ↔ pyrex, envy ↔ rail dan bar ↔ one. Aturcara di bawah mengambil input dari konsol, dan menukarkannya ke bentuk ROT13, atau sebaliknya. Untuk meringkaskan subrutin, hanya huruf-huruf besar diterima. Aksara-aksara lain tidak terkesan. * * RAHSIA.X68 * ORG $1000 START LEA BUFFER,A1 MOVE.B #2,D0 TRAP #15 ; baca satu rentetan TST.B BUFFER BEQ TAMAT ; masukkan Enter sendirian untuk menamatkan JSR ROT13 LEA BUFFER,A1 MOVE.B #13,D0 TRAP #15 ; papar rentetan yang diproses BRA START TAMAT MOVE.B #9,D0 TRAP #15 * ROT13 MOVE.L A1,-(SP) ; simpan A1 LEA LUT,A0 CLR.L D1 PROSES MOVE.B (A1)+,D1 BEQ EXIT ; keluar bila jumpa NOL CMP.B #’A’,D1 BLT PROSES CMP.B #’Z’,D1If you found this book useful, donate to the Gaza fund
  • 133. 8.7. Kajian Kes Subrutin 129 BGT PROSES SUB.B #’A’,D1 ; pastikan hanya ’A’-’Z’ diubah MOVE.B (A0,D1),-1(A1) ; tukar ke kod ROT13 BRA PROSES EXIT MOVE.L (SP)+,A1 RTS BUFFER DS.B 80 LUT DC.B ’NOPQRSTUVWXYZABCDEFGHIJKLM’ END START Algoritma ROT13 tidak sesuai untuk menyimpan data yang benar-benar rahsia kerana agak mudah untuk mendapat data asal. Bidang encryption merupakan bidang yang luas dan mendalam, dan terdapat pelbagai algoritma encryption berasaskan matematik tahap tinggi bertujuan menjadikan proses mencuri data asal amat sukar atau mustahil. Latihan 1. Tulis subrutin yang menukarkan nilai Celsius ke Fahrenheit. 2. Tulis subrutin yang menukarkan nilai Fahrenheit ke Celsius. 3. Tulis subrutin penukaran dari perduaan ke ASCII perenambelasan yang menyelesaikan digit-digit bawah dahulu. 4. Tulis subrutin yang menukarkan ASCII perenambelasan ke perduaan. 5. Tulis subrutin yang menukarkan ASCII perpuluhan ke perduaan. 6. Tulis subrutin yang mengira aksara ruang putih dalam suatu rentetan diakhiri NOL. 7. Tulis subrutin yang menukar kesemua huruf kecil dalam suatu rentetan ke huruf besar. 8. Tulis subrutin yang melaksanakan fungsi C berikut. Kirimkan parameter melalui tindanan. int sumsquare(int *array, int count) { int i, sum; for (i = sum = 0; i < count; i++) sum += array[i]*array[i]; return sum; } 9. Ubahsuai subrutin ROT13 yang diberi supaya boleh memproses huruf besar dan huruf kecil. 10. Algoritma “XOR cipher” adalah satu algoritma encryption yang beroperasi dengan prinsip: A ⊕ 0 = A, A ⊕ A = 0, (B ⊕ A) ⊕ A = B ⊕ 0 = B Suatu renteten boleh dirahsiakan dengan mengenakan suruhan EOR ke setiap aksara menggu- nakan kunci yang diberi. Contohnya, rentetan “68k” boleh ditukar dengan kunci 11110011 sepertiIf you found this book useful, donate to the Gaza fund
  • 134. 130 Bab 8. Tindanan dan Subrutin berikut: 00110110 00111000 01101011 ⊕ 11110011 11110011 11110011 = 11000101 11001011 10011000 Dan untuk menyongsangkan: 11000101 11001011 10011000 ⊕ 11110011 11110011 11110011 = 00110110 00111000 01101011 Tulis subrutin untuk melakukan operasi encryption di atas. Tulis aturcara yang mesra pengguna untuk memasukkan data. 11. Tulis subrutin untuk mengira checksum yang terdapat di hujung setiap S-record.If you found this book useful, donate to the Gaza fund
  • 135. Bab 9 Ciri Perkakasan MC68000 Objektif • Spesifikasi am 68000 • Nama dan fungsi isyarat kawalan 68000 • Pemasaan isyarat 9.1 Pin dan Isyarat 68000 Untuk mengantaramuka dengan bas sistem, kita perlu memahami talian-talian isyarat yang terdapat pada pemproses 68000. Pemproses MC68000 terdapat dalam tiga pakej: DIP, PGA dan PLCC. Pakej DIP1 dibuat daripada bahan plastik atau seramik. Pakej DIP plastik merupakan pakej termurah dan popular di kalangan mereka yang membina sistem 68000 sendiri. Pakej DIP seramik tahan suhu yang melampau dan sesuai untuk membina sistem yang lasak. Agihan pin pakej DIP ditunjukkan dalam lihat Rajah 9.1. Pakej PGA2 merupakan pakej yang kecil sedikit berbanding DIP kerana pin-pinnya membentuk tatasusunan dua dimensi. Ia lebih mahal berbanding DIP dan biasanya memerlukan soket. Pakej PLCC3 merupakan pakej termoden. Ia sangat kecil dan tidak mempunyai kaki yang panjang seperti DIP atau PGA. Ia sesuai digunakan dalam PCB padat berbilang lapisan. Pin-pin 68000 boleh dibahagikan menurut lapan kategori seperti yang ditunjukkan di Rajah 9.2. • Kuasa dan jam • Bas alamat dan bas data • Kawalan bas tak segerak • Kawalan sistem • Kawalan sampukan • Status pemproses • Kawalan periferal 6800 • Kawalan DMA 1 dual inline package 2 pin grid array 3 plastic leadless chip carrier 131If you found this book useful, donate to the Gaza fund
  • 136. 132 Bab 9. Ciri Perkakasan MC68000 Rajah 9.1: Rajah pin bagi 68000 dalam pakej DIP. 
 Rajah 9.2: Agihan pin 68000 menurut fungsi utama. Pemproses disediakan dengan dua pin untuk Vcc dan dua pin untuk bumi. Bekalan kuasa diagihkan untuk mengurangkan hingar pada frekuensi tinggi. Pemproses memerlukan bekalan 5 V ± 5%. Pada 8 MHz, 68000 menggunakan sebanyak 1.5 W dengan arus lebih kurang 300mA. Kesemua talian isyarat pada 68000 boleh diantaramuka dengan peranti TTL. Input CLK menerima isyarat pemasaan daripada litar jam. Pemproses 68000 beroperasi pada 8, 10 dan 12.5 MHz bergantung versi. Isyarat-isyarat mesti serasi TTL dengan kitar tugas 50%. Input jam mestilah diberikan isyarat dengan frekuensi sekurang-kurangnya 50% frekuensi maksimum. Bas alamat (A1-A23) mengandungi isyarat-isyarat sehala. Ia digunakan untuk mengeluarkan alamatIf you found this book useful, donate to the Gaza fund
  • 137. 9.2. Isyarat Kawalan Bas Tak Segerak 133 Jadual 9.1: Fungsi dan jenis logik bagi pin 68000. Nama Isyarat Mnemonik Input/Output Keadaan Aktif Keadaan Tiga Bas Alamat A1-A23 Output Tinggi Ya Bas Data D0-D15 Input/Output Tinggi Ya Strob Alamat AS* Output Rendah Ya Baca/Tulis R/W* Output Tinggi/Rendah1 Ya Strob Data UDS*, LDS* Output Rendah Ya Akuan Pemindahan Data DTACK* Input Rendah Tidak Permohonan Bas BR* Input Rendah Tidak Izin Bas BG* Output Rendah Tidak Akuan Izin Bas BGACK* Input Rendah Tidak Tahap Keutamaan Sampukan IPL0, IPL1, IPL2 Input Rendah Tidak Ralat Bas BERR* Input Rendah Tidak Reset RESET* Input/Output Rendah Tidak2 Henti HALT* Input/Output Rendah Tidak2 Enable E Output Tinggi Tidak Alamat Ingatan Sah VMA* Output Rendah Ya Alamat Periferal Sah VPA* Input Rendah Tidak Output Kod Fungsi FC0, FC1, FC2 Output Tinggi Ya Jam CLK Input Tinggi Tidak Input Kuasa VCC Input - - Bumi GND Input - - 1 Tinggi – baca, Rendah – tulis 2 Logik pemungut terbuka 
 Rajah 9.3: Kaitan antara alamat logikal dengan alamat fizikal. ingatan. Pada pandangan pengaturcara, terdapat 32 talian alamat, tetapi hanya 23 bit dikeluarkan oleh pin 68000. Bit alamat 24-31 dibuang begitu sahaja kerana 68000 tidak mempunyai cukup pin. A0 tidak dikeluarkan secara langsung tetapi melalui UDS* dan LDS*, bergantung saiz data di bas data. Rajah 9.3 menunjukkan perbandingan alamat logikal (alamat yang digunakan dalam aturcara) dengan alamat fizikal (pin 68000). Bas data (D0-D15) dwihala digunakan untuk pemindahan data dari atau ke ingatan. Isyarat D0-D7 dikenali sebagai bas data rendah dan D8-D15 dikenalis sebagai bas data tinggi. 9.2 Isyarat Kawalan Bas Tak Segerak Bas 68000 dikategorikan sebagai bas tak segerak4 kerana pemasaan ingatan atau peranti periferal menentukan masa pemindahan data bukan pemasaan pemproses. Ini bermakna apabila suatu kitar bas dimulakan, peranti luar mesti menghantar suatu isyarat untuk menamatkannya. Bas tak segerak membolehkan peranti perlahan diantaramuka dengan pemproses. Kelompok isyarat kawalan bas tak segerak mengandungi isyarat yang diperlukan oleh pemproses untuk memindahkan data dengan peranti tak segerak. AS (address strobe) — Output ini menandakan terdapatnya alamat sah di bas alamat. 4 asynchronous busIf you found this book useful, donate to the Gaza fund
  • 138. 134 Bab 9. Ciri Perkakasan MC68000 Rajah 9.4: Penjanaan DTACK*. R/W* (read/write) — Output ini melaporkan kitar bas semasa sama ada ia kitar baca atau tulis. R/W* tinggi menandakan kitar baca dan R/W* rendah menandakan kitar tulis. UDS (upper data strobe), LDS* (lower data strobe) — Kedua-dua output ini mengawal pergerakan data di bas data sama ada di bas data atas (D8-D15), bawah (D0-D7) atau kedua-duanya. DTACK* (data transfer acknowledge) — Input ini memberitahu pemproses bahawa pemindahan data telah ditamatkan. Pemindahan data masuk atau keluar pemproses berlaku apabila terdapat alamat yang sah di bas alamat. Ini ditandakan dengan AS* rendah. Ketika isyarat-isyarat di bas alamat sedang berubah, bas dianggap tidak sah dan AS* bernilai tinggi. UDS* dan LDS* menentukan di mana pergerakan data berlaku. UDS* (strob data atas) menandakan pemindahan data berlaku di bas data atas (D8-D15). LDS* (strob data bawah) menandakan pemindahan data berlaku di bas data bawah (D0-D7). Untuk memindahkan hanya satu byte, salah satu daripada UDS* atau LDS* dijadikan rendah. Untuk memindahkan satu kata, kedua-dua UDS* dan LDS* mesti rendah. Isyarat akuan pemindahan data, DTACK*, digunakan oleh peranti luar untuk menamatkan kitar pemindahan data. Apabila dijadikan rendah oleh perkakasan luar, pemproses menganggap kitar bas telah tamat. Dalam kitar baca, pemproses meletakkan alamat yang ingin dibaca ke bas alamat. Seterusnya, isyarat AS*, R/W*, UDS* dan LDS* diaktifkan. Pemproses kemudian menunggu data dari peranti luar. Setelah data diletakkan di bas data, peranti luar mengaktifkan DTACK* bagi menamatkan kitar baca. Dalam kitar tulis, pemproses meletakkan alamat tempat data akan disimpan ke bas alamat dan data yang akan disimpan ke bas data. Seterusnya, isyarat AS*, R/W*, UDS* dan LDS* diaktifkan. Setelah peranti luar menyimpan data, ia mengaktifkan DTACK* bagi menamatkan kitar tulis. Butiran terperinci kitar bas dan kitar tulis diliputi dalam Seksyen 9.7. 9.3 Isyarat Kawalan Sistem Input-input dalam kelompok ini digunakan untuk memulakan semula atau menghentikan pemproses dan untuk memberitahu pemproses terdapatnya ralat dalam kitar bas semasa. RESET* — Isyarat dwihala ini digunakan untuk memulakan semula (RESET*) pemproses (sebagai input) dan untuk meRESET* peranti luar sahaja (sebagai output) HALT* — Isyarat dwihala ini digunakan sebagai input untuk menghentikan pemproses dan berfungsi sebagai output untuk memberitahu peranti luar bahawa pemproses telah terhenti sama ada disebabkan oleh kerosakan atau melalui suruhan STOP.If you found this book useful, donate to the Gaza fund
  • 139. 9.4. Kawalan Sampukan dan Status Pemproses 135 BERR* (bus error) — Input ini memberitahu pemproses adanya masalah dengan kitar bas yang sedang dilaksanakan. Kedua-dua isyarat RESET* dan HALT* adalah dwihala. Ini bermakna ada masanya salah satu atau kedua-duanya berfungsi sebagai input dan ada masanya berfungsi sebagai output. Talian HALT* boleh diaktifkan pada bila-bila masa oleh peranti luar. Ini menyebabkan pemproses berhenti selepas menamatkan kitar bas semasa. Apabila terhenti, kesemua isyarat berkeadaan tiga diletakkan dalam keadaan galangan tinggi dan semua isyarat kawalan dilumpuhkan. Perlaksanaan disambung apabila HALT* dikembalikan ke logik tinggi. Jika suatu kejadian dalaman, seperti perlaksanaan suruhan STOP, menyebabkan pemproses dihentikan, 68000 akan mengeluarkan nilai logik rendah dan berhenti. Litar yang mengawal talian HALT* dan RESET* perlu direka dengan cermat supaya litar ini masih beroperasi dalam kedua-dua arah isyarat (input dan output). Talian RESET*, bersama dengan HALT*, mesti diberikan logik rendah sekurang-kurangnya 100 ms selepas bekalan kuasa diberikan. Ini memastikan VCC telah stabil pada +5 V. Dengan input ini, pemproses mengisikan SSP dengan kata panjang di alamat $000000 dan PC dengan kata panjang di alamat $000004. Kesemua daftar lain tidak terjejas kecuali topeng sampukan yang diset kepada nilai 7. RESET* dan HALT* boleh digunakan lagi dalam perlaksanaan aturcara biasa untuk meletakkan pemproses ke keadaan asal. Ini dibuat dengan mengaktifkan kedua- duanya selama tidak kurang 10 kitar jam. RESET* menjadi output selama 124 kitar semasa melaksanakan suruhan RESET*; ini tidak mereset 68000 sebaliknya mereset peranti yg disambungkan kpd pemproses. Isyarat BERR* boleh diaktifkan oleh litar luar untuk memberitahu pemproses terdapatnya ralat bas, iaitu suatu masalah dengan kitar bas semasa. Ini boleh berlaku misalnya jika pemproses cuba mencapai sistem ingatan yang rosak dan tidak mengembalikan isyarat DTACK*. Selagi DTACK* tinggi, pemproses akan menunggu selama-lamanya. Suatu litar watchdog timer boleh digunakan untuk menjana BERR* jika DTACK* tidak muncul selepas beberapa denyut jam. Jika BERR* diterima, pemproses melakukan pemproses dalaman dipanggil pemprosesan keke- cualian ralat bas5 . Sistem komputer dengan sistem pengoperasian boleh cuba mengesan punca ralat dan memberi maklum balas kepada pengguna. Dalam sistem mudah tanpa sistem pengoperasian, adalah sukar untuk pulih daripada ralat bas. Jika BERR* diaktifkan tanpa HALT* semasa pemproses sedang memproses suatu ralat alamat, suatu ralat bas lain, atau suatu kekecualian RESET*, pemproses akan berhenti dengan sendirinya. Jika peranti luar mengaktifkan BERR* dan HALT* serentak, pemproses akan mencuba kitar bas sebelumnya sekali lagi kecuali jika kitar tersebut dimulakan oleh suruhan TAS (test and set). 9.4 Kawalan Sampukan dan Status Pemproses Input sampukan membolehkan pemproses dihentikan sementara daripada melaksanakan aturcara semasa untuk melakukan operasi yang lebih penting. Input IPL0, IPL1 dan IPL2 digunakan oleh perkakasan luar untuk memohon sampukan daripada pemproses. Tahap 7 adalah tahap tertinggi. Tahap 0 menandakan tiada sampukan dipohon. Kesemua isyarat ini adalah aktif rendah (logik negatif) jadi nilai logik tinggi (H) mewakili 0, dan logik rendah (L) mewakili 1. Jadual 9.2 menunjukkan tafsiran input-input sampukan. Output FC0, FC1 dan FC2 melaporkan status dalaman pemproses dalam bentuk kod. Jadual 9.3 menunjukkan bagaimana output-output ini ditafsir. Ia menunjukkan pembahagian keadaan pemprosesan kepada data pengguna, aturcara pengguna, data penyelia, aturcara penyelia dan akuan sampukan. Output-output ini boleh digunakan dalam litar penyahkodan alamat untuk mengehadkan capaian ingatan. Ini boleh digunakan bagi menghalang aturcara pengguna mengganggu ruang ingatan penyelia. Dalam sistem kecil, nilai-nilai kod fungsi ini tidak digunakan kecuali bagi mengesan keadaan akuan sampukan. Keadaan ini berlaku apabila ketiga- tiga output tinggi. Suatu cara yang mudah untuk 5 bus error exception processingIf you found this book useful, donate to the Gaza fund
  • 140. 136 Bab 9. Ciri Perkakasan MC68000 
 Rajah 9.5: Rajah masa operasi reset.If you found this book useful, donate to the Gaza fund
  • 141. 9.4. Kawalan Sampukan dan Status Pemproses 137 Jadual 9.2: Makna input kawalan sampukan. IPL2 IPL1 IPL0 Nilai setara Tafsiran H H H 000 Tiada sampukan H H L 001 Sampukan Tahap 1 H L H 010 Sampukan Tahap 2 H L L 011 Sampukan Tahap 3 L H H 100 Sampukan Tahap 4 L H L 101 Sampukan Tahap 5 L L H 110 Sampukan Tahap 6 L L L 111 Sampukan Tahap 7 Jadual 9.3: Output status pemproses. FC2 FC1 FC2 Jenis Kitar 0 0 0 - 0 0 1 Data pengguna 0 1 0 Aturcara pengguna 0 1 1 - 1 0 0 - 1 0 1 Data penyelia 1 1 0 Aturcara penyelia 1 1 1 Akuan sampukan mengesan keadaan ini ialah dengan menggunakan suatu get AND tiga input yang outputnya tinggi hanya dalam kitar akuan sampukan. Nilai kod fungsi hanya sah apabila AS* aktif. Rajah 9.6 menunjukkan bagaimana input IPL0-2 dan output FC0-2 disambungkan kepada pem- proses. Peranti 74LS148 ialah pengekod keutamaan, dan 74LS138 ialah penyahkod perduaan. Semasa kitar akuan sampukan, FC0-2 kesemuanya bernilai tinggi, A1-A3 mengandungi tahap Rajah 9.6: Litar bagi menerima sampukan dan mengeluarkan akuan sampukan.If you found this book useful, donate to the Gaza fund
  • 142. 138 Bab 9. Ciri Perkakasan MC68000 sampukan dan kesemua talian lain bernilai logik tinggi. Talian D0-D7 berada dalam keadaan input untuk membaca nombor vektor yang dibekalkan oleh peranti yang menyampuk. 9.5 Kawalan Periferal 6800 Peranti periferal yang direka khas untuk famili 68k seperti MC68681 DUART atau MC68230 PIT memberikan prestasi terbaik tetapi kosnya komponen ini agak tinggi. Sebaliknya, peranti 8 bit yang direka untuk pemproses famili 6800 lebih murah dan kerapkali memadai untuk sesuatu aplikasi. Pemproses 68000 menyediakan tiga isyarat iaitu E, VPA* dan VMA* yang membolehkan penggunaan peranti lama ini dengan litar tambahan yang minimum. Secara ringkas, fungsi isyarat-isyarat ini ialah: E (enable) — Isyarat ini ialah input penyegerakan bagi kesemua peranti periferal 6800. VPA* (valid peripheral address) — Input ini memberitahu pemproses bahawa peranti yang sedang dicapai adalah peranti famili 6800 dan kesemua pemindahan data haruslah disegerakkan dengan E. VMA* (valid memory address) — Output ini memberitahu peranti famili 6800 bahawa terdapat alamat sah di bas alamat dan pemproses telah disegerakkan dengan isyarat E. Apabila pemproses memulakan sesuatu kitar bas, ia menunggu ketibaan sama ada isyarat DTACK* atau VPA*. Jika DTACK* tiba, pemproses menganggap ianya sedang bertukar data secara tak segerak dengan ingatan atau peranti periferal MC68000. Jika VPA* tiba, pemproses menganggap peranti yang sedang cuba bertukar data dengannya daripada famili M6800. Isyarat E mempunyai frekuensi satu per sepuluh frekuensi jam sistem. Contohnya, 68000 yang beroperasi pada 10 MHz akan menyediakan jam E selaju 1 MHz. Isyarat ini mempunyai kitar tugas 40% iaitu tinggi selama 4 kitar jam sistem dan rendah selama 6 kitar. 9.6 Isyarat Kawalan DMA Kelompok talian isyarat ini membolehkan peranti luar mengambilalih bas sistem untuk seketika. Peranti ini selalunya pengawal capaian ingatan langsung (DMA6 ). Kawalan bas perlu diambilalih secara teratur untuk mengelakkan kehilangan data atau kerosakan perkakasan. Tiga isyarat yang disediakan untuk operasi ini ialah BR*, BG* dan BGACK*. BR* (bus request) — Input ini memberitahu pemproses bahawa suatu peranti lain ingin menjadi tuan bas. BG* (bus grant) — Output ini memberitahu bakal tuan bas bahawa pemproses akan melepaskan kawalan terhadap bas di hujung kitar bas semasa. BGACK* (bus grant acknowledge) — Input ini memberitahu pemproses suatu peranti lain telah menjadi tuan bas.isyarat!BGACK* Rajah 9.7 menunjukkan perbezaan operasi input dengan DMA dan tanpa DMA bagi pemindahan data dari peranti input ke ingatan. Tanpa DMA, sebarang data dari peranti input perlu disimpan sebentar di CPU buat sementara sebelum dipindahkan ke ingatan. Ini membazirkan masa pemproses sedangkan CPU tidak mempunyai fungsi apa-apa kecuali mengawal operasi pemindahan data tersebut. Pembaziran ini berlaku bagi setiap kata yang dipindahkan dan amat ketara jika jumlah data yang dipindahkan sangat banyak, contohnya membaca satu fail yang besar dari cakera keras. Dengan DMA, peranti input tersebut memindahkan data terus ke ingatan tanpa campurtangan CPU. 6 direct memory accessIf you found this book useful, donate to the Gaza fund
  • 143. 9.6. Isyarat Kawalan DMA 139 (a) Tanpa DMA. 
 (b) Dengan DMA. Rajah 9.7: Perbandingan pemindahan data tanpa dan dengan DMA. 
 Rajah 9.8: Rajah blok logik timbangtara bas. Peranti DMA yang ingin menggunakan bas perlu memohon penggunaan bas dari pemproses melalui operasi timbangtara bas7 . Dalam operasi timbangtara bas, peranti DMA yang ingin mengambilalih bas (dikenali sebagai tuan bas8 ) mengaktifkan BR* iaitu isyarat permohonan bas . Pemproses mengaktifkan BG* atau isyarat izin bas menandakan ia melepaskan kawalan ke atas bas selepas tamat kitar bas semasa. Jika terdapat beberapa peranti DMA yang sama-sama memohon penggunaan bas, litar luaran diperlukan untuk menentukan peranti mana yang berhak menjadi tuan bas. Apabila peranti DMA mendapat hak mengawal bas, ia mesti memberikan BGACK* iaitu isyarat akuanterima izin bas dan membatalkan BR*. Apabila operasi bas ditamatkan, tuan bas membatalkan BGACK* dan 68000 mengambilalih semula kawalan bas. 7 bus arbitration 8 bus masterIf you found this book useful, donate to the Gaza fund
  • 144. 140 Bab 9. Ciri Perkakasan MC68000 9.7 Kitar Suruhan Kitar suruhan9 adalah masa untuk 68000 melakuksan satu suruhan. Semasa kitar suruhan, pemproses akan melakukan tidak kurang satu kitar bas10 – untuk mencapai kata operasi11 . Jumlah kitar bas berubah-ubah bergantung panjang suruhan dan operasi yang dilakukan. Suruhan yang lebih panjang akan memerlukan lebih banyak kitar bas. Selepas suruhan siap dibaca, ia dilaksanakan. Semasa melaksanakan suruhan, pemproses mungkin akan melakukan kitar bas tambahan. Sebagai contoh, pertimbangkan aturcara berikut: 00001000 1 ORG $1000 00001000 303C 1234 2 START MOVE.W #$1234,D0 00001004 4640 3 NOT.W D0 00001006 13C0 00002000 4 MOVE.B D0,HASIL 0000100C 60FE 5 BRA * 00002000 6 ORG $2000 00002000 7 HASIL DS.B 1 00002002 8 END START Terdapat 7 kata dalam aturcara ini. Aktiviti bas boleh diringkaskan menggunakan jadual analisis logik berikut: Bil. kitar bas 1 2 3 4 5 6 7 8 Bas alamat 001000 001002 001004 001006 001008 00100A 002000 00100C Bas data 303C 1234 4640 13C0 0000 2000 DC?? 60FE Jenis kitar bas Baca Baca Baca Baca Baca Baca Tulis Baca Saiz data Kata Kata Kata Kata Kata Kata Byte Kata R/W* H H H H H H L H UDS* L L L L L L L L LDS* L L L L L L H L Keterangan aktiviti bas adalah seperti berikut: Kitar bas Suruhan Kandungan bas 1–2 MOVE.W #$1234,D0 Dua kitar baca untuk memungut suruhan Kitar 1 membaca kod operasi ($303C) Kitar 2 membaca nilai terdekat ($1234) 3 NOT.W D0 Satu kitar baca untuk memungut suruhan ($4640) Tiada kitar tambahan kerana NOT adalah operasi dalam daftar 4–7 MOVE.B D0,HASIL Tiga kitar untuk memungut suruhan ($13C0, $0000, $2000) Satu kitar untuk menulis byte ke ingatan ($DC) 8 dan BRA * Satu kitar untuk memungut suruhan ($60FE) seterusnya Untuk memungut suruhan, pemproses melakukan kitar bas baca. Oleh itu R/W* sentiasa bernilai tinggi (H) semasa membaca suruhan. Saiz suruhan sentiasa dalam gandaan 2 byte, dan kedua-dua belah bas data digunakan maka kedua-dua UDS* dan LDS* diletakkan rendah (L). Jumlah kitar bas tidak boleh kurang jumlah kata dalam suruhan. 9 instructioncycle 10 buscycle 11 operation wordIf you found this book useful, donate to the Gaza fund
  • 145. 9.7. Kitar Suruhan 141 Suruhan MOVE.W D0,HASIL melakukan satu operasi tulis yang dilakukan selepas keseluruhan suruhan siap dibaca. Ini dikenalpasti melalui R/W* rendah (L). Ia juga melibatkan pemindahan data satu byte di bas data atas, jadi hanya UDS* diletakkan rendah manakala LDS* adalah tinggi. Rajah 9.9: Rajah masa untuk dua kitar suruhan. Untuk memperincikan isyarat jam semasa perlaksanaan dua suruhan pertama, rujuk Rajah 9.9. Terdapat istilah kitar suruhan, kitar bas, kitar jam dan keadaan jam12 yang takrifannya diringkaskan di bawah: Kitar suruhan Masa perlaksaan satu suruhan Kitar bas Masa untuk satu operasi baca atau tulis Kitar jam Masa untuk pinggir positif ke pinggir positif pada jam. Keadaan jam Setengah kitar jam Dalam satu kitar bas, paling tinggi hanya satu kata dipindahkan. Kitar bas terdiri daripada turutan pelbagai isyarat tetapi segalanya mula bergerak apabila AS* menjadi rendah. Seterusnya 68000 akan menunggu satu daripada tiga isyarat untuk menentukan jenis kitar bas: DTACK*, VPA* atau BERR*. DTACK* — Menandakan kitar bas tak segerak. Ini merupakan majoriti kitar bas. VPA* — Menandakan kitar bas segerak atau periferal 6800. Ini hanya berlaku apabila terdapat periferal 6800 dalam sistem. BERR* — Menandakan ralat bas yang berlaku bila 68000 mencapai alamat salah. Isyarat ini hanya boleh muncul jika sistem mempunyai watchdog timer. Pemproses 68000 akan menunggu sampai bila-bila jika salah satu isyarat tidak diterima. Rajah 9.10 menunjukkan empat isyarat kawalan yang memula dan menamatkan kitar bas. Panjang kitar bas ditentukan oleh bila isyarat DTACK* atau VPA* dikembalikan oleh peranti luar tetapi ia tidak kurang daripada empat kitar jam. Peranti yang lambat boleh menyuruh 68000 menunggu dengan melengahkan pengaktifan DTACK* atau VPA*. Setiap kitar jam dibahagikan kepada dua keadaan jam, iaitu satu keadaan untuk paras jam tinggi dan satu lagi untuk paras jam rendah. Pemindahan Data Tak Segerak Pemindahan data yang paling banyak dilakukan oleh pemproses ialah dengan ingatan dalam bentuk kitar bas tak segerak. Bas data boleh berada dalam satu daripada tiga situasi: 12 clock stateIf you found this book useful, donate to the Gaza fund
  • 146. 142 Bab 9. Ciri Perkakasan MC68000 Rajah 9.10: Tiga cara menamatkan kitar bas. 1. Pemproses membaca data dari ingatan 2. Pemproses menulis data ke ingatan 3. Pemproses tidak memerlukan bas Dalam dua kes pertama terdapat pergerakan data di bas data yang mana arah jenis operasi diberitahu dengan isyarat R/W*. Isyarat AS* rendah mengumumkan kepada ingatan bahawa pemproses sedang melakukan sama ada operasi baca atau tulis. Ingatan akan melakukan operasi yang dikehendaki kemudian mengaktifkan isyarat DTACK* untuk menamatkan kitar bas. Setelah pemproses menerima DTACK*, ia boleh memulakan kitar bas seterusnya. Kes ketiga berlaku apabila pemproses tidak perlu menggunakan bas, contohnya semasa ia sedang melakukan suatu operasi dalaman ataupun semasa bas alamat sedang berubah dan tidak stabil. Pada masa ini, isyarat AS* adalah tinggi. Rajah 9.11 menunjukkan carta aliran protokol baca tak segerak. Rajah 9.12 menunjukkan rajah masa kitar bas baca. Kitar ini dibahagikan kepada 8 keadaan, S0 hingga S7. Semasa S0, bas alamat diletakkan pada galangan tinggi, isyarat R/W* dinaikkan dan status pemproses disahkan. 
 Rajah 9.11: Carta protokol bagi kitar bas baca.If you found this book useful, donate to the Gaza fund
  • 147. 9.7. Kitar Suruhan 143 
 Rajah 9.12: Rajah masa kitar bas baca. 
 Rajah 9.13: Rajah masa kitar bas baca dengan keadaan tunggu. Semasa S1, bas alamat berubah ke alamat yang diperlukan. R/W* telah stabil pada keadaan tinggi. Semasa S2, AS* menjadi aktif kerana alamat sudahpun stabil. Isyarat UDS* dan LDS* juga aktif (bergantung kepada jenis operasi yang diperlukan, kata atau byte). Pada masa ini, litar ingatan menyahkod alamat ingatan dan mengaktifkan cip ingatan. Semasa S3 dan S4, tiada isyarat baru dikeluarkan. Masa ini diberi kepada litar ingatan untuk meletakkan data di bas data dan mengaktifkan DTACK*. Pemproses mengawas isyarat DTACK* di hujung S4. Jika DTACK* tidak aktif (bernilai tinggi), pemproses akan menambah keadaan tunggu, satu kitar jam setiap kali, sebelum masuk ke S5.If you found this book useful, donate to the Gaza fund
  • 148. 144 Bab 9. Ciri Perkakasan MC68000 Jika DTACK* aktif di hujung S4, pemproses akan terus memasuki S5 dan S6. Di hujung S6, data di bas data diambil oleh pemproses dan AS*, UDS* dan LDS* dibatalkan. Seterusnya, litar ingatan perlu membuang data dari bas data selewat-lewatnya S1 dalam kitar berikutnya. Ini untuk memastikan pemproses beroperasi dengan betul. 
 Rajah 9.14: Carta protokol bagi kitar bas tulis. 
 Rajah 9.15: Rajah masa bagi kitar bas tulis. Rajah 9.13 menunjukkan kitar bas baca dengan keadaan tunggu13 . Beza dengan kitar sebelumnya ialah terdapat 4 keadaan tunggu yang memanjangkan kitar bas. Apabila DTACK* tinggi di hujung S4, pemproses menambah keadaan tunggu, Sw, dua keadaan setiap kali. Dalam rajah ini, DTACK* didapati tinggi selama dua kali ia disampel oleh pemproses sebelum ia menjadi rendah. Setelah ia menjadi rendah, pemproses memasuki S5 dan membaca data di hujung S6. 13 wait stateIf you found this book useful, donate to the Gaza fund
  • 149. 9.7. Kitar Suruhan 145 Rajah 9.14 menunjukkan rajah protokol untuk kitar bas tulis. Rajah 9.15 menunjukkan rajah masa kitar bas tulis dan terdapat beberapa perbezaan berbanding kitar bas baca. Isyarat R/W* diberi nilai rendah bermula keadaan S2 menandakan operasi tulis. Pemproses mengekalkan data dari talian data sehingga ingatan mengaktifkan DTACK*. Operasi tulis juga memerlukan tidak kurang daripada 4 kitar jam. Pemindahan Data Periferal 6800 Dalam sebarang pemindahan data segerak, semua operasi berasaskan suatu isyarat jam. Dalam pemproses 68000, pemindahan data segerak dilakukan semasa mengantaramuka dengan periferal famili 1 6800; semua pemindahan data disegerakkan dengan isyarat E yang mempunyai kelajuan 10 frekuensi CLK. 
 Rajah 9.16: Penyambungan pemproses 68000 dengan periferal 6800. Rajah 9.16 menunjukkan rajah blok penyambungan periferal siri 6800 kepada pemproses 68000. Apabila periferal diaktifkan, isyarat VPA* dikembalikan kepada pemproses memaklumkannya ia sedang berinteraksi dengan peranti 6800. Kemudian pemproses memindahkan data menggunakan kaedah segerak yang ditunjukkan dalam Rajah 9.17. Rajah 9.19 menunjukkan rajah masa pemindahan data dengan periferal 6800. Tempoh sebenar bagi setiap kitar segerak berubah-ubah bergantung kepada bila isyarat E menjadi rendah selepas VPA* diterima. Rajah yang ditunjukkan di sini hanyalah satu kemungkinan daripada beberapa rajah masa yang boleh dihasilkan.If you found this book useful, donate to the Gaza fund
  • 150. 146 Bab 9. Ciri Perkakasan MC68000 
 Rajah 9.17: Carta aliran untuk pemindahan data dengan periferal 6800. 
 Rajah 9.18: Jam CLK dan E. 
 Rajah 9.19: Rajah masa untuk pemindahan data dengan periferal M6800.If you found this book useful, donate to the Gaza fund
  • 151. 9.7. Kitar Suruhan 147 Latihan 1. Terangkan operasi DTACK*. Apa terjadi jika ia tidak dapat diaktifkan? 2. Tentukan nilai pada talian alamat, strob data dan isyarat-isyarat kawalan lain apabila suruhan MOVE.B $1234,D0 dilaksanakan. 3. Reka litar penyahkod status pemproses menggunakan penyahkod 1 daripada 8. Pastikan AS* digunakan untuk membolehkan penyahkod. 4. Apakah fungsi khas yang dilakukan oleh A1 hingga A3 semasa kitar akuan sampukan? 5. Reka litar dengan satu suis yang mengawal sama ada pemproses berjalan atau berhenti. Awas: pin HALT* tidak boleh disambung terus ke bumi. 6. Kaji rajah masa pemindahan segerak. Berapa kitar jamkah tempoh paling singkat untuk satu kitar bas? Tempoh paling lama? Apakah keadaan yang menyebabkan kedua-dua situasi? 7. Dapatkan jadual analisis logik bagi turutan suruhan berikut: ORG $1000 START MOVE.L SIGMA,D0 MOVE.B #85,D0 MOVE.W D0,ALPHA JMP * SIGMA DS.L -1 ALPHA DS.W 1If you found this book useful, donate to the Gaza fund
  • 152. 148 Bab 9. Ciri Perkakasan MC68000If you found this book useful, donate to the Gaza fund
  • 153. Bab 10 Sistem Ingatan Objektif • Jenis serpihan ingatan • Pengantaramukaan ingatan dengan bas 68000 • Rekabentuk penyahkod alamat • Pengenalan kepada input/output 10.1 Organisasi Ingatan Ingatan ialah peranti pasif yang peranannya menyimpan maklumat. Terdapat dua kategori ingatan iaitu ingatan baca sahaja dan ingatan capaian rawak. Ingatan baca sahaja (ROM1 ) ialah ingatan yang kandungannya kekal walaupun tanpa bekalan kuasa. Kegunaannya ialah menyimpan maklumat kekal seperti aturcara permulaan yang diperlukan oleh setiap sistem dan subrutin asas terutama untuk input/output. Ingatan baca sahaja juga dikenali sebagai ingatan tak meruap. Ingatan capaian rawak (RAM2 ) pula kehilangan maklumat di dalamnya tanpa bekalan kuasa. Ia membolehkan data disimpan secara sementara semasa sistem beroperasi. Dengan mengisikan aturcara ke dalam RAM, fungsi sesuatu sistem boleh diubah. Semua sistem komputer mesti mempunyai ROM. Dalam sistem yang kecil, RAM mungkin tidak diperlukan jika daftar-daftar pemproses mencukupi bagi penyimpanan maklumat. Sebaliknya, dalam sistem serba guna seperti komputer peribadi, saiz RAM lebih besar berbanding ROM. Dalam sistem ini, ROM hanya digunakan semasa sistem mula-mula dipasang untuk melakukan rutin uji diri seterusnya mengisikan sistem pengoperasian dari cakera ke dalam RAM. Setelah sistem pengoperasian dilaksanakan, ia tidak lagi memerlukan ROM. Ingatan yang digunakan dalam sistem mikropemproses dibuat daripada bahan semikonduktor. Dalam serpihan, bit-bit diatur dalam tatasusunan dua dimensi. Rajah 10.1 menunjukkan rekabentuk sebuah EPROM (sejenis ROM) yang menggunakan tatasusunan sedemikian. Bit-bit dalam tatasusunan dicapai menggunakan alamat yang dimasukkan melalui talian-talian alamat. Operasi yang dikehendaki dinyatakan melalui isyarat baca atau isyarat tulis. Bagi operasi baca, data dikeluarkan oleh unit ingatan ke bas data. Bagi operasi tulis, data disediakan oleh pemproses dan disimpan oleh ingatan. 1 read-only memory 2 random access memory 149If you found this book useful, donate to the Gaza fund
  • 154. 150 Bab 10. Sistem Ingatan 
 Rajah 10.1: Rajah blok EPROM. 10.2 Ingatan Baca Sahaja Ingatan baca sahaja terdiri daripada MROM, PROM, EPROM dan EEPROM. Semasa operasi sistem, ROM hanya dibaca dan tidak ditulis. Rajah 10.2 menunjukkan simbol logik bagi sebuah EPROM yang mana bas alamat dan isyarat kawalan berfungsi sebagai input manakala bas data berfungsi sebagai output. MROM (mask ROM) ialah ROM yang diaturcara pada peringkat topeng. Semasa proses pembuatan ROM, suatu topeng menetapkan dari awal kandungan setiap alamat. Untuk mengaturcara ingatan ini, pelanggan memberikan kandungan ROM kepada pengilang ROM. Maklumat ini digunakan untuk membuat topeng untuk mengilang ROM khusus bagi pelanggan tersebut. Setelah diaturcara, ROM tidak boleh diubah langsung. Sebarang kesilapan, walaupun sedikit, memerlukan masa yang lama dan kos yang tinggi untuk diperbetulkan tetapi kos pembuatan setiap serpihan sangat rendah. ROM ini digunakan untuk sistem dijual dengan banyak contohnya ROM set aksara yang terdapat dalam pengawal paparan video. PROM3 bermakna ROM boleh aturcara. Ingatan jenis ini boleh diaturcara menggunakan pengatur- cara ROM. Setiap bit dalam ROM ini ialah suatu fius yang boleh diputuskan. Sebelum diaturcara, 3 programmable ROM 
 Rajah 10.2: Simbol logik bagi EPROM.If you found this book useful, donate to the Gaza fund
  • 155. 10.3. Ingatan Capaian Rawak 151 kesemua bit mempunyai nilai yang sama (katakan semuanya logik 1). Apabila diaturcara, fius-fius yang perlu diubah ke nilai berlawanan (katakan logik 0) diputuskan dengan memberikan arus yang tinggi. Setelah diputuskan, fius-fius tidak boleh disambung semula. PROM lebih mahal berbanding ROM topeng tetapi ia menyenangkan pengeluar sistem kerana ia boleh diaturcara sendiri. EPROM EPROM4 bermakna ROM boleh padam boleh aturcara. Ia boleh diaturcara seperti suatu PROM. Tetapi berlainan daripada PROM, ia boleh diaturcara semula selepas keseluruhannya kandungannya dipadam dengan mendedahkannya kepada cahaya lampau ungu (UV). Serpihan EPROM yang dibuat dengan seramik mempunyai tingkap kuartza yang membolehkan cahaya lampau ungu menghujani serpihan silikon dalam. Cahaya ini terdapat dalam cahaya suria dan lampu kalimantang. Untuk mempercepatkan pemadaman, pemadam EPROM dengan cahaya yang lebih kuat digunakan. EPROM boleh digunakan semula beratus-ratus kali. EPROM popular di kalangan para pereka sistem komputer kerana mereka perlu menukar aturcara berulang-kali semasa pembangunan sistem. Setelah sistem sampai ke versi terakhir dan sedia untuk digunakan, EPROM tersebut boleh dikekalkan di papan litar. Untuk mengurangkan kos produk, EPROM boleh diganti dengan OTP- ROM. EEPROM5 ialah ROM yang boleh diaturcara dan boleh dipadam menggunakan kuasa elektrik. Keseluruhan serpihan tidak perlu dipadam sekiranya cuma beberapa alamat tertentu sahaja yang perlu diperbetulkan. Sesuatu alamat dapat diubah dengan menulis terus ke alamat tersebut. EEPROM lebih mahal berbanding ingatan tak meruap jenis lain. Dua variasi ingatan tak meruap ialah OTP-ROM dan ingatan kilat6 . OTP- ROM7 mempunyai litar dalaman yang sama dengan EPROM. Ia lebih murah kerana dibungkus dalam plastik dan bukan seramik dengan tingkap kuartza. Oleh itu, setelah diaturcara ia tidak boleh dipadam maka tatacara penggunaannya sama dengan PROM. Kelebihan penggunaan OTP-ROM adalah konfigurasi pin dan ciri elektrikal yang sama dengan EPROM yang mengelakkan pembaziran kerja rekabentuk. Ingatan kilat ialah ingatan yang menyerupai EEPROM tetapi kandungannya hanya boleh dipadam blok demi blok. Ini berbeza dengan EEPROM yang boleh diaturcara semula byte demi byte. Sebagai contoh, satu ingatan kilat bersaiz 16 kilobyte mungkin terbahagi kepada blok-blok bersaiz 1 kilobyte. Untuk membetulkan sebarang kesilapan dalam sesuatu blok, keseluruhan blok tersebut dipadam melalui arahan perisian dan keseluruhan blok diaturcara semula. Harganya yang murah dan kepadatannya yang tinggi kilat menyamai harga dan kepadatan DRAM. 10.3 Ingatan Capaian Rawak Kandungan ingatan capaian rawak (ingatan baca/tulis) hilang apabila bekalan kuasa diputuskan. Terdapat dua jenis ingatan baca-tulis iaitu statik dan dinamik. Semasa operasi sistem, RAM boleh dibaca dan ditulis. Rajah 10.3 menunjukkan rajah simbol bagi sebuah SRAM (sejenis RAM) yang mana bas alamat dan isyarat kawalan berfungsi sebagai input manakala bas data boleh berfungsi sebagai input dan output bergantung mod operasi. RAM statik (SRAM8 ) kerap dijumpai dalam sistem yang kecil. Ianya senang diantaramuka dan tidak memerlukan banyak litar tambahan. Kepadatannya rendah, jadi untuk mengadakan sesuatu ingatan yang agak besar memerlukan jumlah serpihan yang banyak. Setiap bit disimpan dalam satu flip-flop yang dibentuk dari 4 transistor. Operasi statik bermakna sistem mikrokomputer hanya perlu membekalkan kuasa untuk mengekalkan nilai bit. RAM dinamik (DRAM9 ) sesuai digunakan dalam sistem yang memerlukan jumlah ingatan yang banyak. DRAM ialah peranti ingatan yang paling padat dan murah. Ia menggunakan satu transistor dan satu pemuat parasitik (wujud secara semulajadi dalam serpihan) untuk menyimpan setiap bit menjadikan 4 erasable PROM 5 electrically-erasable PROM 6 flash memory 7 One-Time Programmable ROM 8 static RAM 9 dynamic RAMIf you found this book useful, donate to the Gaza fund
  • 156. 152 Bab 10. Sistem Ingatan kepadatannya tinggi. Bagaimanapun, penggunaan pemuat bermakna nilai bit yang disimpan ternyahcas jika tidak dicas semula. Oleh itu, DRAM memerlukan litar segar-semula untuk menuliskan semula maklumat yang terkandung dalam sesuatu bit sebelum nilai bit ternyahcas sepenuhnya. Sesuatu serpihan RAM dinamik adalah kira-kira 4 kali lebih padat berbanding RAM statik dengan muatan yang sama. Bagi membina sistem mikrokomputer mudah, penggunaan SRAM sahaja sudah memadai. Dua unit SRAM tanpa sebarang litar tambahan boleh memenuhi kesemua keperluan ingatan baca/tulis sistem asas. 10.4 Serpihan Ingatan Piawaian Industri Penggunaan serpihan ingatan dengan kedudukan pin standard memudahkan rekabentuk. Kebanyakan serpihan ingatan seperti SRAM, EPROM dan EEPROM menggunakan piawaian JEDEC. Serpihan piawaian JEDEC10 menyimpan 8 bit dalam setiap alamat. Peranti-peranti ingatan dengan organisasi yang sama tetapi dibuat dengan teknologi berlainan mempunyai konfigurasi pin yang sama. Sebagai contoh, SRAM 6164, EPROM 2764 dan EEPROM 2864 kesemuanya mempunyai organisasi 8 k × 8. Dua digit terakhir menandakan saiz ingatan dalam kilobit. Ketiga-tiga serpihan mempunyai konfigurasi pin yang hampir serupa. Jadual 10.1: Peranti-peranti EPROM piawaian industri. Peranti Saiz Organisasi 2716 16834 bit 2 k×8 2732A 32768 bit 4 k×8 2764 65536 bit 8 k×8 27128 131072 bit 16 k×8 27256 262144 bit 32 k×8 27512 524288 bit 64 k×8 Penggunaan EPROM membantu rekabentuk sistem kerana ia boleh digunakan semula, jadi kita akan mereka sistem dengan serpihan ini dahulu. Jadual 10.1 menunjukkan beberapa peranti EPROM standard yang lazim digunakan. Jadual 10.2 menunjukkan konfigurasi pin bagi serpihan EPROM 2716 hingga 27512. Setiap cip mempunyai lapan talian data, D0 hingga D7. Jumlah talian alamat bergantung kepada jumlah alamat di dalamnya. Manakah peranti yang patut digunakan? Ini bergantung pertama sekali kepada saiz ingatan yang diperlukan. Suatu sistem asas mungkin memerlukan hanya 4 kilobyte ingatan. Ini boleh disediakan oleh dua serpihan 2716 yang mana setiap cip disambungkan ke sebelah bas data. Faktor kedua untuk pemilihan peranti adalah kos. Seunit 2764 ada kalanya lebih murah berbanding dengan seunit 2716. Oleh itu, kita boleh menggunakan dua unit 2764 walaupun saiz ingatan yang diperlukan tidak sampai 10 Joint Electron Devices Engineering Council 
 Rajah 10.3: Simbol logik bagi SRAM.If you found this book useful, donate to the Gaza fund
  • 157. 10.4. Serpihan Ingatan Piawaian Industri 153 Jadual 10.2: Konfigurasi pin EPROM piawaian industri. Pin 2716 2732A 2764 27128 27256 27512 1 Vpp Vpp Vpp A15 2 A12 A12 A12 A12 3 A7 A7 A7 A7 A7 A7 4 A6 A6 A6 A6 A6 A6 5 A5 A5 A5 A5 A5 A5 6 A4 A4 A4 A4 A4 A4 7 A3 A3 A3 A3 A3 A3 8 A2 A2 A2 A2 A2 A2 9 A1 A1 A1 A1 A1 A1 10 A0 A0 A0 A0 A0 A0 11 D0 D0 D0 D0 D0 D0 12 D1 D1 D1 D1 D1 D1 13 D2 D2 D2 D2 D2 D2 14 GND GND GND GND GND GND Pin 2716 2732A 2764 27128 27256 27512 28 Vcc Vcc Vcc Vcc 27 PGM PGM A14 A14 26 Vcc Vcc A13 A13 A13 25 A8 A8 A8 A8 A8 A8 24 A9 A9 A9 A9 A9 A9 23 A11 A11 A11 A11 A11 A11 22 OE* OE*/Vpp OE*/Vpp OE* OE* OE*/Vpp 21 A10 A10 A10 A10 A10 A10 20 CE/PGM CE CE CE CE CE 19 D7 D7 D7 D7 D7 D7 18 D6 D6 D6 D6 D6 D6 17 D5 D5 D5 D5 D5 D5 16 D4 D4 D4 D4 D4 D4 15 D3 D3 D3 D3 D3 D3 4 kilobyte. Faktor-faktor lain termasuk penggunaan kuasa. Peranti 2764 mempunyai versi 27C64 yang menggunakan teknologi CMOS dengan lesapan kuasa jauh lebih rendah. Kebanyakan serpihan EPROM terdapat dalam versi CMOS yang kurang menggunakan kuasa. Versi CMOS ditandakan dengan huruf C dalam nama serpihan; misalnya, versi CMOS untuk 2764 ialah 27C64. Serpihan EEPROM piawai termasuk 2816 dan 2864. Agihan pin bagi 2864 adalah serupa sepenuhnya dengan serpihan 2764. Rajah 10.3 menunjukkan mod operasi EPROM dan EEPROM. Untuk membaca data dalam EPROM atau EEPROM, kedua-dua input CS* (chip select) dan OE* (output enable) perlu diberi nilai rendah. Jika CS* rendah tetapi OE* tinggi, cip berada dalam keadaan yang mana jika OE* rendah, output lebih pantas dikeluarkan (berbanding mengaktifkan kedua-dua input serentak). Ada kalanya CS* dilabelkan sebagai CE* (chip enable) terpulang kepada pengilang cip. Pin berlabel PGM* (program) digunakan oleh pengaturcara PROM dan tidak dikawal oleh pemproses semasa operasi sistem. Serpihan-serpihan SRAM piawai pula termasuk 6116, 6164 dan 62256 (Lihat Jadual 10.4). Serpihan 6164 mempunyai organisasi yang sama dengan serpihan 2764. Rajah 10.4 menunjukkan betapa hampirnya agihan pin kedua-dua serpihan. Jadual 10.5 menunjukkan mod operasi SRAM. Untuk mengaktifkan SRAM, input CS1* perlu rendah serentak dengan input CS2 bernilai tinggi. UntukIf you found this book useful, donate to the Gaza fund
  • 158. 154 Bab 10. Sistem Ingatan Jadual 10.3: Mod operasi EPROM dan EEPROM. CS* OE* Mod Bas Data H × Tunggusedia Galangan tinggi L L Baca Data Keluar L H Output lumpuh Galangan tinggi Jadual 10.4: Peranti-peranti SRAM piawaian industri. Peranti Saiz Organisasi 6116 16834 bit 2 k×8 6164 65536 bit 8 k×8 62256 262144 bit 32 k×8 
 Rajah 10.4: Perbandingan konfigurasi pin bagi EPROM 2764 dan SRAM 6164 Jadual 10.5: Mod operasi 6164. CS1* CS2 OE* WE* Mod Bas Data H × × × Tunggusedia Galangan tinggi L L × × Tunggusedia Galangan tinggi L H × L Tulis Data masuk L H L H Baca Data Keluar L H H H Output lumpuh Galangan tinggiIf you found this book useful, donate to the Gaza fund
  • 159. 10.5. Logik gam 155 membaca data, input OE* diaktifkan. Untuk menulis data, input WE* (write enable) pula diaktifkan. Jika OE* dan WE* aktif serentak, cip berada dalam mod tulis. Penomboran bagi peranti-peranti EPROM dan EEPROM tidak banyak berbeza daripada satu pengilang ke pengilang yang lain. Sebaliknya, penomboran bagi SRAM boleh mengelirukan. Misalnya, serpihan 6164 diberi angka komponen MCM6164 oleh Motorola tetapi HM6264 oleh Hitachi. Begitu juga, serpihan 6116 diberi angka HM6116 oleh Hitachi, 5116 oleh Motorola dan 56116 oleh Intel. Akhir kata, walaupun serpihan- serpihan boleh ditukarganti kerana saiznya sama, kita perlu prihatin terhadap ciri elektrikal setiap satu kerana itu kita perlu menyemak helaian data sebelum menggunakannya. 10.5 Logik gam Untuk mengarahkan cip ingatan melakukan peranannya – mengeluar dan menyimpan data – isyarat yang betul mesti diletakkan di pin kawalan ingatan. Bagaimanapun, pin yang terdapat di pakej 68000 tidak boleh terus disambung ke ingatan. Selain nama isyarat yang berbeza, pin di cip 68000 mempunyai tafsiran berbeza dengan pin di cip ingatan. Untuk membolehkan dua jenis peranti berbeza ini berkomunikasi, perlu ada penterjemah isyarat. Litar penterjemah ini diberi logik gam11 . Logik gam mencantum pemproses dengan peranti luar. Kedudukan logik gam dalam sistem ditunjukkan dalam Rajah 10.5. Alamat fizikal yang keluar di bas alamat tidak serupa dengan apa yang dianggap oleh pengaturcara. Alamat yang dilihat oleh pengaturcara (alamat logikal) adalah 32 bit. Daftar-daftar yang menyimpan alamat seperti PC, A0 hingga A6, dan SP, kesemuanya menyimpan 32 bit. Secara teori, sebarang nilai alamat yang dipindah dari daftar-daftar alamat ke bas alamat adalah juga 32 bit, iaitu bit 0 hingga 31. Bagaimanapun, bas alamat 68000 hanya mempunyai 23 talian iaitu A1 hingga A23. Rajah 9.3 menunjukkan bit-bit manakah yang dikeluarkan terus ke bas alamat. Bit A24 hingga A31 langsung tidak dikeluarkan. Bit A0 dikeluarkan secara tidak langsung melalui talian UDS* dan LDS*. Ini telah digambarkan di Rajah 9.3. Rajah 10.6 menunjukkan bagaimana UDS* dan LDS* diterbitkan dari bit A0. Perhatikan terdapatnya satu isyarat dalaman yang digelar WORD/BYTE*. Isyarat ini diset bergantung kepada jenis capaian semasa. Sebagai contoh, suruhan MOVE.W $1000,D0 ialah suruhan yang membaca keseluruhan kata jadi isyarat WORD/BYTE* bernilai 1, dan kedua-dua UDS* dan LDS* menjadi aktif. Ini kerana keseluruhan bas data digunakan. Sebaliknya, suruhan 11 glue logic Rajah 10.5: Logik gam menterjemahkan isyarat dari pemproses supaya difahami ingatan.If you found this book useful, donate to the Gaza fund
  • 160. 156 Bab 10. Sistem Ingatan MOVE.B D0,$20001 melibatkan hanya satu byte jadi sebelah bas data sahaja digunakan. Ini menjadikan WORD/BYTE* bernilai 0. Oleh kerana alamat ganjil digunakan, LDS* aktif tetapi UDS* tidak. Jika terdapat pemindahan data byte di alamat genap sahaja, isyarat UDS* tetapi LDS* tidak. Jadual 10.6 menyenaraikan kesemua operasi yang melibatkan bas data. Perhatikan bahawa jika kedua-dua UDS* dan LDS* tinggi, tiada pemindahan data sedang dilakukan. Rajah 10.7 menunjukkan kaitan antara isyarat UDS* dan LDS* dengan peta ingatan. Jadual 10.6: Bas data dan isyarat strob data. Genap Ganjil Operasi UDS* LDS* R/W* (D8-D15) (D0-D7) Tiada Tiada Melahu H H – data sah data sah Baca Data sah Data sah L L H 16 bit Bit 8-15 Bit 0-7 Baca Tiada Data sah H L H byte rendah data sah Bit 0-7 Baca Data sah Tiada L H H byte tinggi Bit 8-15 data sah Tulis Data sah Data sah L L L 16 bit Bit 8-15 Bit 0-7 Tulis Data sah Data sah H L L byte rendah Bit 0-7 Bit 0-7 Tulis Data sah Data sah L H L byte tinggi Bit 8-15 Bit 8-15 Rajah 10.8 menunjukkan secara ringkas isyarat-isyarat yang perlu diambil dari pemproses untuk mengawal operasi ingatan. Perlu diingat rajah ini amat dipermudahkan kerana terdapat logik yang perlu ditambah sebelum ingatan berfungsi sepenuhnya. 
 Rajah 10.6: Penjanaan UDS* dan LDS*. 10.6 Logik Kawalan Ingatan Apabila beberapa cip ingatan perlu dikawal, ada baiknya isyarat kawalan individu diselaraskan. Ini ditunjukkan dalam Rajah 10.9. Dari isyarat UDS*, LDS* dan R/W*, empat isyarat diterbitkan iaitu UPRD, LORD, UPWR dan LOWR. UPRD* (upper read) dan LORD* (lower read) masing- masingIf you found this book useful, donate to the Gaza fund
  • 161. 10.6. Logik Kawalan Ingatan 157 
 Rajah 10.7: Kaitan antara UDS*, LDS* dan peta ingatan. 
 Rajah 10.8: Rajah blok bagi penyambungan bas pemproses dengan ingatan. mengawal operasi baca di bas data atas dan bawah. Isyarat UPRD* dan LORD* disambungkan terus ke input OE* pada cip ingatan genap dan ganjil. UPWR* (upper write) dan LOWR* (lower write) pula masing-masing mengawal operasi tulis di bas data atas dan bawah. Isyarat UPRD* dan LORD* disambungkan terus ke input WE* (pada RAM sahaja) pada cip ingatan genap dan ganjil. Litar dalam Rajah 10.9 boleh diperbaiki dengan merujuk semula Jadual 10.6. Apabila 68000 sedang membaca satu byte dalam ingatan, ia cuma akan membaca bas data sebelah atas atau bawah menurut kedudukan byte, dan mengabaikan sebelah yang lain. Jika kedua-dua belah bas data dibekalkan dengan data, 68000 masih beroperasi dengan betul. Oleh itu, dalam operasi baca, isyarat baca ke ingatan tidak perlu dipisahkan, dan jumlah get logik boleh dikurangkan. Litar yang diperbaiki ditunjukkan dalam Rajah 10.10.If you found this book useful, donate to the Gaza fund
  • 162. 158 Bab 10. Sistem Ingatan ���� Ke pin OE*cip ����� ingatan genap ���� Ke pin OE*cip ����� ingatan ganjil Ke pin WE*cip ����� ingatan genap Ke pin WE*cip ����� ���� ingatan ganjil Rajah 10.9: Litar kawalan baca/tulis ingatan. Ke pin OE* R/W* RD* semua cip ingatan Ke pin WE* UPWR* UDS* cip ingatan genap Ke pin WE* LOWR* cip ingatan ganjil LDS* Rajah 10.10: Litar kawalan baca/tulis ingatan yang diperbaiki.� � 10.7 Penyahkodan Alamat� � Dalam sesuatu sistem mikrokomputer, terdapat beberapa peranti yang berada di bawah kawalan pem- proses. Pada sesuatu masa, pemproses hanya boleh bertukar data dengan satu peranti sahaja. Pemilihan� peranti ditentukan oleh kedudukannya dalam peta ingatan. Litar penyahkod alamat berfungsi memilih peranti yang diaktifkan bergantung kepada suruhan yang dilaksanakan. Rajah 10.11 menunjukkan � kedudukan penyahkod dalam rekabentuk sistem. Fungsi penyahkod alamat ingatan ialah mengawas keadaan bas alamat dan menentukan bilakah sesuatu cip ingatan dibolehkan. Rajah 10.12(a) menunjukkan kaitan penyahkod dengan bas alamat dan cip yang dikawalnya. Isyarat SEL* ialah output penyahkod yang mengaktifkan cip ingatan. Penyahkod alamat menunggu pola tertentu muncul di talian alamat serta nilai rendah di AS* sebelum mengaktifkan SEL*. Apabila syarat ini dipenuhi, nilai rendah pada SEL* menjadikan input CS* pada ingatan turun. Ini mengaktifkan ingatan dan menyambungkan ingatan dengan bas data. Jika bas alamat mengandungi nilai selain yang ditunggu oleh penyahkod, output penyahkod adalah tinggi, melumpuhkan cip dan meletakkan output cip ke galangan tinggi. Kesannya sama dengan menanggalkan cip daripada bas data. Rajah 10.12(b) menunjukkan rajah masa yang dipermudahkan melambangkan aktiviti dalam bas alamat dan kaitan antaran AS* dan SEL*. Cabaran yang kita hadapi ialah mengaktifkan cip ingatan pada masa yang tepat. Kita perlu mengetahui berapakah ingatan yang diperlukan. Ini menentukan berapa talian disambungkan terus ke ingatan dan berapa talian masuk ke penyahkod. Jika ingatan sebanyak 16 K mencukupi, kita tahu 14 talian alamat pergi terus ke ingatan (kerana 214 = 16384). Baki talian di bas alamat pergi ke penyahkod If you found this book useful, donate to the Gaza fund
  • 163. 10.7. Penyahkodan Alamat 159 
 Rajah 10.11: Penyahkod alamat memilih peranti yang bertukar data dengan 68000. 
 (a) Rajah blok. Bas alamat Sah AS SEL (b) Rajah masa. Rajah 10.12: Rajah blok penyahkod alamat.If you found this book useful, donate to the Gaza fund
  • 164. 160 Bab 10. Sistem Ingatan 
 Rajah 10.13: Menyahkod bas alamat. alamat. Sebagai contoh, suatu seksyen EPROM sebesar 32Kbyte bermula dari alamat 0 perlu diantaramuka dengan sistem. Beberapa soalan perlu dijawab terlebih dahulu: 1. Apakah cip yang sesuai? 2. Apakah julat yang diliputi oleh ingatan ini? 3. Bagaimanakah pin-pin 68000 digunakan? Untuk mengadakan ingatan sebesar 32Kbyte, dua cip yang setiap satu bersaiz 16Kbyte diperlukan. Ini kerana setiap cip mempunyai bas data 8 bit sedangkan bas data 68000 besarnya 16 bit. Isyarat UDS* dan LDS* mengaktifkan salah satu atau kedua-dua cip ini. Cip yang sesuai ialah 27128 kerana cip ini berpadanan dengan saiz yang dikehendaki. Julat alamat yang diliputi oleh kedua-dua cip ialah 0 hingga 32Kbyte 1 atau $000000 hingga $007FFF. Setiap cip mengandungi 16K alamat jadi jumlah talian alamat di cip ialah 14 kerana 214 = 16384 = 16K. Talian alamat A1 hingga A14 pergi terus ke cip. Bakinya, talian A15 hingga A23 pergi ke penyahkod alamat. Semua maklumat ini diringkaskan dalam Rajah 10.13. Setelah talian-talian alamat diagih-agihkan, litar penyahkod pula perlu direka. Mereka penyahkod untuk EPROM ini bermaksud mengesan kewujudan alamat $000000 hingga $007FFF. Seperti yang diringkaskan dalam jadual berikut, alamat-alamat ini mempunyai nilai 0 di talian A23 hingga A15 (talian A14 hingga A0 pergi terus ke EPROM). Litar penyahkod untuk ingatan ini perlu mengesan kewujudan nilai-nilai ini. Litar yang terhasil ditunjukkan dalam Rajah 10.14. Apabila membina litar penyahkod sebenar, get begini memang tidak boleh didapati di pasaran. Penyelesaian pertama ialah membina get ini menggunakan beberapa get kecil. Ini tidak kemas dan memerlukan pendawaian serta get yang banyak. Penyelesaian kedua ialah menggunakan litar pembanding seperti 74LS688. Penyelesaian ketiga yang lebih padat ialah menggunakan PLA12 . Bagaimanapun, tanpa PLA, kita masih boleh mengurangkan jumlah litar melalui penyahkodan separa yang akan diterangkan kemudian. 12 programmable logic arrayIf you found this book useful, donate to the Gaza fund
  • 165. 10.8. Litar Penjana DTACK* 161 
 
 (a) Mengenalpasti bit. (b) Litar yang terhasil. Rajah 10.14: Menyahkod alamat $000000-$007FFF. 10.8 Litar Penjana DTACK* Isyarat DTACK* memberitahu pemproses bahawa operasi baca atau tulis boleh ditamatkan. Isyarat ini perlu dikembalikan ke pemproses selepas satu lengah yang sesuai apabila sesuatu peranti ingatan dicapai. Litar dalam Rajah 10.15 menunjukkan bagaimana output dari penyahkod alamat disambung ke ingatan dan litar lengah. Litar lengah menjana lengah yang diperlukan (jika ada) dan mengaktifkan DTACK* pada masa yang betul. Isyarat AS* menjamin DTACK* tidak aktif semasa AS* kembali tinggi. 
 Rajah 10.15: Rajah blok litar DTACK*. Untuk ingatan yang cukup pantas, penjana lengah tidak diperlukan. Untuk mengetahui sama ada lengah diperlukan samasekali, kita perlu mengetahui: • Tempoh untuk satu kitar jam pemproses • Masa capaian ingatan atau tAC • Lengah dalam penyahkod alamat Tempoh untuk satu kitar jam pemproses ialah masa untuk isyarat CLK menjalani satu kitar. Jika 68000 beroperasi pada 8 MHz, satu kitar jam memakan masa 1/8 MHz atau 125 nanosaat. Masa capaian, tAC , untuk ingatan EPROM yang biasa ialah di antara 150 hingga 250 ns. Rajah 10.16 menunjukkan kaitan masa capaian dengan isyarat-isyarat lain yang berkenaan. Dari rajah ini, kita bolehIf you found this book useful, donate to the Gaza fund
  • 166. 162 Bab 10. Sistem Ingatan 
 Rajah 10.16: Kaitan DTACK* dengan masa capaian. lihat pemproses memberi masa dua kitar jam untuk ingatan mengeluarkan data. Bagi pemproses yang beroperasi pada 8 MHz, ini bersamaan 125 ns x 2 = 250 ns. Jika masa capaian ingatan kurang daripada 200 ns, isyarat DTACK* tidak perlu dilengahkan. Rajah 10.17 menunjukkan satu keadaan di mana isyarat DTACK* terpaksa dilengahkan. Jumlah kitar jam yang perlu ditambah kepada kitar bas baca adalah penting kerana jika DTACK* kembali terlalu awal, ingatan belum sempat melakukan fungsinya manakala jika DTACK* kembali terlalu lewat, prestasi sistem akan jatuh. 
 Rajah 10.17: Operasi baca dengan keadaan tunggu. Langkah-langkah berikut menjelaskan pengiraan jumlah kitar jam yang ditambah kepada kitar bas: 1. Tukar masa capaian ke kiraan kitar jam. Misalnya, jika pemproses beroperasi pada 8 MHz dan tAC untuk EEPROM ialah 350 ns, maka tAC = 3.5 kitar jam. 2. Genapkan ke 4 kitar jam. Jumlah lengah DTACK* ialah nilai dari Langkah 1 di atas tolak 2. Kita boleh menolak 2 kerana pemproses memberikan 2 kitar percuma. Dalam contoh ini, jawapannya ialah 4 – 2 = 2 kitar jam. Cara termudah bagi melengahkan penjanaan DTACK* ialah dengan menggunakan flip-flop yang diatur sebagai daftar anjak. Rajah 10.18 menunjukkan litar logik yang menjana lengah sebanyak dua kitar jam. Untuk menambah jumlah lengah, sambungkan sahaja flip-flop tambahan di kanan litar ini, satu flip-flop untuk satu kitar jam tambahan. Untuk analisis bagi litar ini, rujuk Rajah 10.19. Perhatikan bahawa analisis ini hanya untuk flip-flop picuan pinggir positif sahaja.If you found this book useful, donate to the Gaza fund
  • 167. 10.9. Penyahkodan Separa 163 
 Rajah 10.18: Penjana lengah DTACK* yang dibina dengan flip-flop. 
 Rajah 10.19: Rajah masa bagi penjana DTACK* flip-flop. Jika jumlah lengah yang diperlukan lebih daripada 4 kitar jam, ada baiknya lengah dijana menggunakan daftar anjak untuk mengurangkan bilangan komponen. Rajah 10.20 menunjukkan satu penyelesaian menggunakan daftar anjak SIPO 74LS164 yang boleh menjana lengah sehingga 8 kitar jam. Penyelesaian termudah untuk penjanaan DTACK* ialah menggunakan komponen-komponen pantas supaya kita langsung tidak perlu memikirkan tentang lengah. Ini membolehkan pin DTACK* dibumikan terus. 
 Rajah 10.20: Menjana lengah dengan daftar anjak. 10.9 Penyahkodan Separa Walaupun ruang alamat 68000 adalah 16 megabyte, besar kemungkinan kita hanya menggunakan sebahagian kecil sahaja daripada ruang ini. Katakan kita menggunakan dua unit 2764 untuk EPROM. Ini bermakna hanya 2×8K atau 16 kilobyte sahaja digunakan untuk ingatan kekal. Jika kita menggunakanIf you found this book useful, donate to the Gaza fund
  • 168. 164 Bab 10. Sistem Ingatan 
 Rajah 10.21: Rajah masa untuk penjana lengah DTACK* dengan daftar anjak. 6264 pula untuk SRAM, kita hanya menggunakan 16 kilobyte lagi. Kita pula mungkin menambah satu atau dua peranti I/O jadi peta ingatan boleh dikatakan masing kosong. Oleh kerana terdapat hanya beberapa komponen sahaja dalam sistem, litar penyahkod boleh diringkaskan dengan banyaknya. Untuk mengurangkan kekompleksan litar, tidak semua talian alamat perlu dinyahkod. Penyahkodan separa membolehkan cip ingatan diaktifkan dengan perkakasan yang minimum. Untuk penyahkodan separa, jumlah peranti yang diantaramuka dengan pemproses perlu diketahui terlebih dahulu. Sebagaimana dengan penyahkodan penuh, tentukan julat alamat untuk setiap serpihan (sama ada ingatan atau peranti I/O). Selepas itu, tentukan talian-talian yang pergi terus ke peranti tersebut. Baki talian yang tinggal dimasukkan ke litar penyahkod separa. Contoh: Reka penyahkod separa untuk sistem dengan peranti ROM sebesar 32K bermula dari $000000, RAM sebesar 128K bermula di $400000, dan satu peranti I/O di alamat $800000 hingga $80001F (32 alamat). Penyelesaian: Mula-mula tentukan julat alamat setiap peranti. Senarai berikut didapati: • Alamat terakhir RAM = $400000 + 128K 1 = $49FFFF. • Alamat terakhir ROM = $000000 + 32K 1 = $007FFF. • I/O terletak di alamat $800000 hingga $80001F. Masukkan maklumat di atas ke dalam satu jadual seperti di bawah. Talian yang terus pergi ke serpihan ditandakan sebagai X. Jadi untuk ROM, talian A0 hingga A14 disambung terus ke serpihan. Untuk RAM, taliannya ialah A0 hingga A16 dan untuk I/O taliannya ialah A0 hingga A4. Setelah langkah di atas dilakukan, pilih talian alamat yang minimum untuk memilih satu daripada tiga peranti. Di sini, talian A23 dan A22 memadai untuk membezakan di antara ketiga-tiganya. Penyelesaian yang menggunakan 74LS139 iaitu penyahkod 2 kepada 4 ditunjukkan dalam Rajah 10.22. Litar dalam Rajah 10.22 boleh menampung satu lagi peranti jika perlu. Ia memadai jika jumlah peranti yang perlu disambungkan tidak akan melebihi empat. Bagaimanapun, kita hanya menggunakan setengah sahaja daripada peranti 74LS139 dan setengah lagi langsung tidak digunakan. Penyelesaian yang ditunjukkan dalam Rajah 10.23 menggunakan 74LS138 iaitu penyahkod 3 kepada 8. Kerana ia mempunyai 8 output, ia boleh memilih satu daripada lapan peranti. Ini memberikan kita pilihan pada masa akan datang sekiranya lebih banyak peranti perlu ditambah.If you found this book useful, donate to the Gaza fund
  • 169. 10.9. Penyahkodan Separa 165 
 (a) Hamparan kerja. ROM RAM I/O Tidak digunakan Tidak digunakan (b) Litar yang terhasil. Rajah 10.22: Penyahkod separa yang memilih satu daripada lapan peranti. Tidak digunakan ROM (Tidak digunakan) RAM Tidak (Tidak digunakan) digunakan 1 I/O (Tidak digunakan) 0 (Tidak digunakan) Tidak digunakan (Tidak digunakan) Tidak digunakan Tidak digunakan Rajah 10.23: Penyahkod 3 kepada 8.If you found this book useful, donate to the Gaza fund
  • 170. 166 Bab 10. Sistem Ingatan Latihan 1. Jika satu kedudukan ingatan didapati salah setelah pengilangan besar-besaran dimulakan, ingatan jenis manakah yang memerlukan masa terpanjang untuk membetulkan kesilapan? 2. Bagaimanakan ingatan EPROM dipadam? 3. Jika EPROM mengandungi 64 kilobyte, berapa jumlah pin untuk bas alamat (address bus)? 4. Apa fungsi pin OE* pada ROM? 5. Serpihan SRAM mempunyai satu pin yang tiada pada EPROM. Sebutkan nama pin dan fungsinya. 6. Ke manakah output penyahkod disambungkan di serpihan RAM? 7. Sebutkan jumlah kitar jam minimum untuk 68000 melakukan operasi baca dari ingatan. 8. Lukiskan satu litar ringkas yang mengeluarkan logik 0 apabila A23, A22, A21 dan AS* kesemuanya bernilai logik 0.If you found this book useful, donate to the Gaza fund
  • 171. Bab 11 Pengantaramukaan Input/Output Asas Objektif • Konsep Input/Output • Organisasi Peranti I/O • Output asas dengan selak dan LED • Input asas dengan penimbal dan suis • Pengantaramukaan LED 7 segmen 11.1 Prinsip Input/Output Salah satu ciri asas sistem komputer adalah keupayaan bertukar-tukar data dengan peranti luar, dan membenarkan pengguna berinteraksi dengan sistem. Contoh-contoh peranti periferal adalah: Peranti Input Peranti Output Suis Lampu Papan kekunci Paparan LCD Tetikus Skrin video Pengimbas Pembesar suara Kamera Pencetak Kelajuan antara pemproses dan peranti periferal amat berbeza. Kelajuan antara periferal juga berbeza. Pencetak boleh mencetak beratus-ratus aksara sesaat, tetapi papan kekunci hanya menghantar beberapa aksara dalam masa yang sama. Litar antaramuka input/output diperlukan bagi membolehkan peranti-peranti berbeza ini berinteraksi dengan pemproses. Fungsi litar antaramuka adalah: • Mengendalikan data antara pemproses dan periferal • Membolehkan pemproses memohon status data yang dihantar • Mengawal operasi periferal Peranti antaramuka input/output boleh dikategorikan dalam dua kelompok besar iaitu input/output asas dan input/output periferal. Input/output asas adalah operasi yang melibatkan peranti dua keadaan (tinggi/rendah) seperti LED dan suis. Input/output periferal melibatkan interaksi kompleks seperti pencetak dan papan kekunci. 167If you found this book useful, donate to the Gaza fund
  • 172. 168 Bab 11. Pengantaramukaan Input/Output Asas (a) I/O terpeta ingatan. (b) I/O terasing. Rajah 11.1: Perbezaan peta bagi I/O terpeta ingatan dengan I/O terasing. Pemetaan Input/Output Dari pandangan perisian, peranti input/output dikawal melaluidaftar periferal yang juga dikenali sebagai liang1 . Terdapat dua skima pemetaan input/output iaitu input/output terpeta ingatan2 dan input/output terasing3 . Dalam input/output terpeta ingatan, peranti ingatan dan liang input/output terletak dalam peta ingatan yang sama. Pemproses menggunakan set suruhan yang sama untuk operasi input/output. Misalnya, jika kita ingin membaca daripada suatu peranti input di alamat $8000000 dan mengeluarkan maklumat yang dibaca tadi ke peranti output di alamat $900000, turutan berikut diberikan: MOVE.B $E000,D0 ; BACA DARI PERANTI INPUT MOVE.B D0,$E010 ; TULIS KE PERANTI OUTPUT Dalam input/output terasing, pemproses mempunyai ruang alamat berasingan dan suruhan khas untuk peranti input/output. Dari aspek perkakasan, pemproses mempunyai talian kawalan khas untuk input/output. Untuk bersalingtindak dengan peranti I/O, suruhan-suruhan khas digunakan. Misalnya, jika kita ingin membaca dari peranti di liang 0 dan menuliskan data yang dibaca ke liang 1, turutan berikut digunakan (contoh untuk Intel 8086): IN AX,[00H] ; BACA DARI LIANG 0 OUT [01H],AL ; TULIS KE LIANG 1 Dalam input/output terpeta ingatan, sebahagian ruang ingatan dikhaskan untuk operasi input/output. Kesemua liang kelihatan seperti lokasi ingatan biasa. Kelebihan input/output terpeta ingatan adalah: • Kesemua mod alamat dan suruhan boleh digunakan untuk operasi I/O (contohnya olahan bit) • Pemproses menjadi mudah kerana tidak mempunyai suruhan khas Kelemahan input/output terpeta ingatan ialah: • Ruang ingatan dikurangkan kerana sebahagian diperuntukkan kepada I/O 1 port 2 memory-mapped I/O 3 isolated I/OIf you found this book useful, donate to the Gaza fund
  • 173. 11.1. Prinsip Input/Output 169 (a) I/O terpeta ingatan. (b) I/O terasing. Rajah 11.2: Skima Input/Output. • Terdapat risiko ralat jika ralat pengaturcaraan yang mencapai alamat peranti I/O • Ketiadaan isyarat I/O khusus bagi mengawal operasi I/O Secara tradisinya, pemproses Motorola/Freescale termasuk famili 68k menggunakan input/output terpeta ingatan manakala pemproses Intel menggunakan input/output terasing. Rajah 11.14 memband- ingkan pemetaan peranti I/O dalam peta ingatan dan peta I/O. Rajah 11.2 menunjukkan perbezaan antara kedua-dua pemetaan dari aspek perkakasan. Input/Output Mudah Input/output mudah adalam operasi yang melibatkan hanya dua keadaan (tinggi/rendah). Jumlah bit yang diproses mungkin lebih daripada satu bit. Contohnya, output nilai BCD memerlukan 4 bit dihantar serentak. Untuk mengadakan operasi input/output asas, dua peranti elektronik digital kerap digunakan: • Selak untuk output contohnya 74LS374 • Penimbal tiga keadaan untuk input contohnya 74LS244 Peranti sebenar yang disambungkan adalah peranti output seperti LED, lampu dan geganti dan peranti input seperti suis tekan dan suis BCD. Dalam input/output mudah, pemproses boleh terus menghantar nilai yang dikehendaki kepada peralatan. Contohnya, untuk menyalakan lampu, hantarkan nilai ‘1’ dan lampu akan terus menyala. Untuk memadam lampu, hantarkan nilai ‘0’. Input/Output Periferal Peranti periferal adalah peralatan kompleks yang bertukar-tukar data dengan pemproses seperti penc- etak, papan kekunci dan cakera. Besar kemungkinan ia sendiri mengandungi satu pemproses atau mikropengawal. Operasi periferal tidak semudah I/O dengan LED atau suis yang boleh menerima atau menghantar data pada bila-bila masa. Sebaliknya, peranti periferal memerlukan penyegerakan. Sebagai contoh, data yang diambil dari papan kekunci semasa tidak diketik tidak mempunyai apa-apa makna. Pemproses perlu memastikan ada ketikan barulah sah data yang dibaca. Pemproses perlu menyemak status papan kekunci sehingga ada ketikan sebelum membaca data. Cip antaramuka periferal memudahkan pengantaramukaan dengan periferal. Fungsi utamanya ialah penyegerakan pemindahan data antara pemproses dengan periferal. Cip antaramuka lazimnya mempunyai tiga jenis daftar dalaman: • Daftar kawalan — Mengawal operasi periferal. • Daftar status — Menyemak status periferal. • Daftar data — Tempat data dibaca atau ditulis.If you found this book useful, donate to the Gaza fund
  • 174. 170 Bab 11. Pengantaramukaan Input/Output Asas (a) Peranti I/O mudah (b) Peranti I/O periferal Rajah 11.3: I/O mudah dan I/O periferal. Pemindahan data antara peranti periferal boleh dilakukan secara bit demi bit (bersiri) atau banyak bit serentak (selari). Untuk melakukan input/output melalui cip antaramuka, terdapat dua cara asas iaitu I/O tinjauan4 dan I/O terpacu sampukan 5 . Dalam kaedah I/O tinjauan, pemproses menyemak status peranti I/O melalui daftar status hinggalah syarat ditemui. Kaedah tinjauan membazirkan masa pemproses kerana ia perlu menguji status berulangkali sebelum melakukan pemindahan data. Sebagai contoh, untuk menghantar data pencetak, pemproses menyemak bit status yang menandakan kesediaan pencetak. Apabila bit status menyatakan pencetak sedia, barulah data dihantar. Dalam kaedah I/O terpacu sampukan, pemproses disampuk atau dihentikan sementara apabila suatu keadaan berlaku. Kaedah ini sangat cekap kerana pemproses boleh membuat satu kerja lain sementara menunggu periferal bersedia. Antaramuka Selari dan Bersiri Terdapat dua bentuk utama laluan data antara cip antaramuka dengan periferal iaitu selari dan bersiri. Dalam input/output selari, cip antaramuka mempunyai beberapa liang yang lebarnya satu byte setiap satu. Satu byte penuh atau lebih boleh dihantar serentak. Contoh peranti antaramuka selari ialah PIA MC6821 dan PIT MC68230. Peranti-peranti ini kompleks dan boleh beroperasi dalam pelbagai mod. Arah data boleh ditentukan dari perisian, tidak seperti dengan selak atau penimbal. Ia mempunyai talian strob dan jabat-tangan untuk memindahkan data dengan lebih efisyen. Ia juga boleh menyampuk pemproses apabila periferal sedia. Dalam input/output bersiri, satu bit dihantar setiap kitar jam. Input/output bersiri sesuai untuk penghantaran data jauh dengan kos rendah. Ia boleh digunakan untuk menghubungkan pemproses 4 polled I/O 5 interrupt-driven I/OIf you found this book useful, donate to the Gaza fund
  • 175. 11.2. Pengantaramukaan LED 171 Isyarat data Data masuk Cip Elektronik Data keluar antaramuka periferal Cip Elektronik antaramuka periferal Talian kawalan Talian kawalan dan jam dan jam (a) I/O selari. (b) I/O bersiri. Rajah 11.4: Input/Output Selari dan Input/Output Bersiri. dengan pemproses atau dengan periferal perhubungan data seperti modem. Contoh peranti antaramuka bersiri ialah ACIA MC6850 dan DUART MC68681. Sebelum digunakan, peranti-peranti ini perlu diaturcara dengan kelajuan dan format data (jumlah bit setiap aksara, pariti, dsb). Ia juga boleh menyampuk pemproses apabila periferal sedia. 11.2 Pengantaramukaan LED Peranti output termudah ialah selak. Rajah 11.5 menunjukkan rajah blok bagi pengantaramukaan 68000 dengan selak. Disebabkan selak adalah peranti yang amat pantas, dengan lengah sekitar 20 ns berband- ing kelegaan masa 250 ns yang diberi oleh pemproses 8 MHz, input DTACK tidak perlu dilengahkan. Selain itu, rajah ini menunjukkan juga kaedah yang penyambungan input DTACK* menggunakan litar pemungut terbuka6 . Litar logik jenis membolehkan peranti-peranti yang berantaramuka ditambah dan dikurangkan dengan lebih mudah terutama jika sistem sedang dibangunkan. Dalam pemproses 68000, peranti input/output dicapai menggunakan I/O terpeta ingatan maka sebarang suruhan yang mencapai ingatan boleh digunakan untuk melakukan input/output. Selak hanya memerlukan satu alamat sahaja dalam ingatan. Jika penyahkodan penuh digunakan, litar penyahkod perlu mengesan kesemua 23 talian dalam bas alamat. Penggunaan litar penyahkodan separa akan mengurangkan logik gam ke tahap yang munasabah. Data yang dikeluarkan oleh selak boleh dihantar ke sebarang peranti yang memerlukan, contohnya 8 LED seperti dalam Rajah 11.6. Litar ini dianggap menggunakan logik negatif kerana logik ‘0’ menyalakan LED dan logik ‘1’ memadam LED. Ini berlawanan dengan kebiasaan yang mana logik ‘1’ dianggap menyalakan sesuatu. Logik negatif digunakan di sini kerana dapat menjimatkan komponen logik. Setiap LED tidak boleh disambung terus ke bumi atau bekalan kuasa. Untuk mendapatkan LED yang menyala paling terang, ia memerlukan arus 20 mA. Dengan logik TTL, kaedah menyambungkan LED ia dengan pincang balikan. Merujuk Rajah 11.7, voltan bekalan 5V memberikan arus yang dikehendaki. Perintang yang lebih tinggi akan menjadikan LED malap, manakala perintang lebih rendah akan memendekkan hayat LED dan cip selak. Aturcara berikut mengeluarkan pola “lampu berlari” di LED. Untuk aturcara ini, sistem dianggap meletakkan LED di alamat $A00001. Logik yang digunakan ialah logik negatif iaitu logik ‘0’ menyalakan LED. ; ; ATURCARA UTK MENGUJI LED ; 6 open-collectorIf you found this book useful, donate to the Gaza fund
  • 176. 172 Bab 11. Pengantaramukaan Input/Output Asas LED EQU $A00001 ;ALAMAT BERGANTUNG SISTEM ORG $1000 ;INI JUGA BERGANTUNG SISTEM START MOVE.B #%11111110,D0 ;NILAI AWAL AGAIN MOVE.B D0,LED ;HANTAR KE LED ; ; LENGAH ˜ 0.1 saat ; MOVE.L #150000,D1 WAIT SUB.L #1,D1 BNE WAIT ROL.B #1,D0 BRA AGAIN END START 11.3 Pengantaramukaan Pamer 7 segmen Pamer 7 segmen7 ialah peranti untuk memaparkan nombor perpuluhan sebagai alternatif kepada pamer matriks bintik8 yang lebih kompleks. Ia meluas digunakan dalam jam digital, meter elektronik dan peranti-peranti yang memaparkan maklumat berangka. Pamer 7 segmen mempunyai 7 komponen LED. Setiap LED boleh dikawal sama ada padam atau menyala, dan boleh digabungkan untuk membentuk nombor-nombor. Ia selalu dijumpai dalam bentuk condong untuk membantu ketampakan. Setiap segmen dirujuk oleh huruf a hingga g, seperti yang ditunjukkan dalam Rajah 11.8. Satu LED tambahan yang mewakili titik perpuluhan, dp, boleh digunakan untuk memaparkan nombor bukan integer. Terdapat dua jenis pamer 7 segmen: katod sepunya (CC9 ) dan anod sepunya (CA10 ). Beza di antara keduanya ialah katod sepunya semua katod 7 segmen dicantumkan dan untuk anod sepunya kesemua 7 7-segment display 8 dotmatrix display 9 common cathode 10 common anode Rajah 11.5: Pengantaramukaan 68000 dengan selak.If you found this book useful, donate to the Gaza fund
  • 177. 11.3. Pengantaramukaan Pamer 7 segmen 173 Rajah 11.6: Pengantaramukaan selak dengan LED. Rajah 11.7: Pengiraan arus LED. anod dicantumkan. Pamer CA menggunakan logik negatif (‘0’ = menyala, ‘1’ = padam) jadi segmen dinyalakan dengan meletakkan logik ‘0’ pada pin berkenaan. Pamer CC, sebaliknya, menggunakan logik positif. Bagi mengantaramuka dengan peranti serasi TTL seperti 74LS374, pamer CA amnya lebih sesuai kerana arus yang mengalir pada setiap LED lebih tinggi menghasilkan paparan yang lebih terang. Jadual 11.1 menunjukkan kod yang kombinasi logik yang diperlukan bagi pamer CA. Seterusnya, Rajah 11.10 menunjukkan pengantaramukaan pamer CA dengan selak 74LS374. Kuasa dibekalkan (a) Penamaan segmen. (b) Mempamerkan aksara hexa. Rajah 11.8: Pamer 7 segmenIf you found this book useful, donate to the Gaza fund
  • 178. 174 Bab 11. Pengantaramukaan Input/Output Asas (a) Anode sepunya (CA). (b) Katod sepunya (CC). Rajah 11.9: Perbandingan pamer CA dan CC. melalui pin sepunya pamer 7 segmen. Di antara output selak dengan pin segmen, perintang sekitar 220 Ω mesti ditambahkan untuk mengehadkan arus mengalir melalui setiap segmen LED. Subrutin berikut memaparkan aksara 0 hingga 9 dan A hingga F bergantung kepada 4 bit Jadual 11.1: Jadual penukaran BCD ke kod 7 segmen bagi pamer CA. Nombor dp g f e d c b a Hex 0 1 1 0 0 0 0 0 0 $C0 1 1 1 1 1 1 0 0 1 $F9 2 1 0 1 0 0 1 0 0 $A4 3 1 0 1 1 0 0 0 0 $B0 4 1 0 0 1 1 0 0 1 $99 5 1 0 0 1 0 0 1 0 $92 6 1 0 0 0 0 0 1 0 $82 7 1 1 1 1 1 0 0 0 $F8 8 1 0 0 0 0 0 0 0 $80 9 1 0 0 1 1 0 0 0 $98 A 1 0 0 0 1 0 0 0 $88 b 1 0 0 0 0 0 1 1 $83 C 1 1 0 0 0 1 1 0 $C6 d 1 0 1 0 0 0 0 1 $A1 E 1 0 0 0 0 1 1 0 $86 F 1 0 0 0 1 1 1 0 $8E Rajah 11.10: Pengantaramukaan selak dengan pamer 7 segmen.If you found this book useful, donate to the Gaza fund
  • 179. 11.4. Pengantaramukaan Suis 175 terendah D0. ; ; DISP7: subrutin memaparkan kod hex ke 7 segmen CA ; LED EQU $E000 DISP7 AND.W #$F,D0 ; simpan 4 bit terendah, padam yg lain LEA LUT,A0 MOVE.B (A0,D0.W),LED ; hantarkan kod 7 segmen ke LED MOVE.L #150000,D1 WAIT SUB.L #1,D1 BNE WAIT RTS LUT DC.B $C0,$F9,$A4,$B0,$99,$92,$82,$F8 DC.B $80,$98,$88,$83,$C6,$A1,$86,$8E END START 11.4 Pengantaramukaan Suis Jika selak mengadakan output asas bagi pemproses, penimbal pula mengadakan input asas. Rajah 11.11 menunjukkan rajah blok penyambungan antara 68000 dengan penimbal. Seperti juga dengan selak, penimbal adalah sangat pantas dan isyarat DTACK tidak perlu dilengahkan. Rajah 11.12 menunjukkan bagaimana penimbal boleh menerima input dari suis. Suis tidak boleh disambungkan terus ke bekalan kuasa kerana arus dari bekalan kuasa terlalu tinggi untuk terus dimasukkan ke input penimbal. Rajah 11.12 menunjukkan kaedah menyambungkan suis dengan penimbal. Perintang yang perlu digunakan adalah sekitar 1 kσ. Dengan perintang ini, sebarang pusuan di bekalan kuasa tidak merosakkan cip penimbal. Rajah 11.13 menunjukkan aras arus semasa suis dibuka dan ditutup. Apabila suis dibuka, nilai logik yang dibaca ialah ‘1’ kerana suis terbuka memaksa arus mengalir masuk ke input penimbal. Apabila suis ditutup, nilai logik yang dibaca ialah ‘0’ kerana tiada arus mengalir ke input. Pada masa ini, arus bertukar arah kerana galangan suis (sifar) lebih rendah daripada galangan input. Logik ini dianggap logik negatif kerana input ialah ‘0’ semasa suis ‘ON’ dan ‘1’ semasa suis ‘OFF’. Penggunaan logik negatif dengan penimbal TTL mengurangkan komponen logik. Rajah 11.11: Pengantaramukaan 68000 dengan penimbal.If you found this book useful, donate to the Gaza fund
  • 180. 176 Bab 11. Pengantaramukaan Input/Output Asas Rajah 11.12: Pengantaramukaan 68000 dengan suis. Rajah 11.13: Aras arus semasa operasi suis. Keratan aturcara berikut adalah contoh bagaimana suis boleh diuji setelah dipasang. Fungsi aturcara ini hanya untuk mengeluarkan kembali nilai suis ke LED. ; ; ATURCARA UNTUK MENGUJI SUIS ; SUIS EQU $800001 ;ALAMAT SEBENAR BERGANTUNG SISTEM LED EQU $A00001 ORG $1000 START MOVE.B SUIS,LED BRA START END Dalam suis sebenar, kita menganggap ia suatu operasi yang ‘bersih’ dengan gelombang yang cantik seperti dalam Rajah 11.14(a). Pada hakikatnya, suis mekanikal melantun apabila ditekan menghasilkan isyarat yang bergerigi seperti dalam Rajah 11.14(b). Nilai logik yang berubah dari ‘1’ ke ‘’0’ sebenarnya melantun berkali-kali antara nilai ‘0’ dan ‘1’ sebelum menetap di logik ‘0’. Berapa lamakah suis melantun? Kadangkala banyak, kadangkala langsung tidak. Kebanyakan suis akan stabil selepas 30 ms. Dua suis yang serupa pun tidak memberikan lantunan yang sama. Lantunan kekunci boleh dilakukan menggunakan kaedah perkakasan atau perisian. Satu cara menyahlantun kekunci11 ialah dengan selak SR seperti dalam Rajah 11.15. Rekabentuk 11 key debouncingIf you found this book useful, donate to the Gaza fund
  • 181. 11.4. Pengantaramukaan Suis 177 (a) Gelombang unggul dengan peralihan ‘bersih’ apabila kekunci ditekan. (b) Gelombang sebenar dengan peralihan bergerigi. Rajah 11.14: Menekan dan melepaskan kekunci menghasilkan lantunan. Rajah 11.15: Nyahlantun menggunakan selak SR. ini memerlukan suis DT12 . Dua perintang menjana logik ‘1’ untuk input get NAND; suis menarik salah satu input ke bumi. Apabila suis berada dalam keadaan yang ditunjukkan, output get atas akan bernilai ‘1’ tidak kira apa nilai input di sebelah. Keadaan ini menjadikan output get bawah menjadi ‘0’ yang menjadikan selak dalam keadaan stabil. Jika suis bergerak ke tengah-tengah di antara terminal, selak masih mengekalkan keadaannya. Suis bergerak agak jauh antara terminal. Ia mungkin melantun tetapi tidak mungkin melantun kembali ke terminal asal. Oleh itu outputnya masih ‘1’. Apabila suis tersentuh terminal bawah, output selak menjadi ‘0’. Keadaan ini kekal walaupun suis melantun sekitar terminal bawah. Output kekal ‘0’ sehinggalah suis kembali ke atas dan tersentuh terminal atas. Konfigurasi ini boleh didapati dengan cip MC14043/14044 yang mengandungi empat selak SR, jadi ini mungkin satu penyelesaian yang berkesan untuk sistem yang banyak suis. Litar SR ialah kaedah paling berkesan untuk menyahlantung tetapi ia jarang digunakan. Suis DT 12 double-throwIf you found this book useful, donate to the Gaza fund
  • 182. 178 Bab 11. Pengantaramukaan Input/Output Asas Rajah 11.16: Nyahlantun menggunakan rangkaian RC. lebih besar dan lebih mahal daripada suis ST13 biasa. Satu cara lain bagi menyahlantun ialah rangkaian RC seperti dalam Rajah 11.16. Ia nampak lebih mudah tetapi kaedah penggunaannya lebih kompleks kerana nilai perintang dan kapasitor agak sukar untuk dikira dengan tepat, kerana adanya berinteraksi dengan cip penyongsang. Kaedah terakhir untuk nyahlantun yang disebutkan di sini ialah dengan cip MC14490. Ia mengandungi 6 penyahlantun yang menggunakan gabungan rangkaian RC dan daftar anjak. Ia memerlukan suis ‘ST’ sahaja, maka ia kurang menggunakan ruang berbanding semua penyelesaian di atas. Bagaimana pun, harga cip ini masih mahal. Adalah jauh lebih murah menggunakan operasi nyahlantun secara perisian. Asas kepada teknik perisian ialah dengan menyampel input secara berkala seperti dalam Ra- jah 11.17. Algoritma asasnya ialah menunggu sehingga nilai yang sama dibaca dua kali berturut. Ini cuma berlaku setelah kekunci stabil. Subrutin berikut menayahlantun kekunci yang terletak di alamat $E00014. Andaikan terdapat 8 suis di alamat tersebut. Dengan logik negatif, nilai yang dibaca dari alamat ini ialah $FF. Apabila sebarang kekunci ditekan, nilai yang dibaca bertukar dari $FF ke sebarang nilai lain, yang mana bit 0 mewakili suis yang ditekan. Selepas nilai bukan $FF diterima, subrutin menunggu selama 30 ms sebelum menyampel suis sekali lagi. Pada bacaan kedua, jika nilai kembali ke $FF, ia kembali ke awal subrutin. Jika nilai bacaan kedua sama dengan bacaan pertama, input disahkan dan subrutine kembali ke pemanggil. Untuk lebih keboleharapan, subrutin ini boleh diubah supaya menyemak input sehingga 3 atau lebih sampel bernilai sama. ; ; DEBOUNC: subrutin menyahlantun 8 kekunci di bit terendah $E00014. ; SUIS EQU $E00014 13 single-throw Rajah 11.17: Nyahlantun perisian menggunakan penyampelan berkala.If you found this book useful, donate to the Gaza fund
  • 183. 11.5. Pengantaramukaan Papan Kekunci 179 DELAMT EQU 20 DEBOUNC MOVE.B SUIS,D0 ; tunggu mana-mana bit sifar CMP.B #$FF,D0 BEQ DEBOUNC MOVE.W #DELAMT,D1 ; tunggu 30 ms DELY SUBQ.1 #1,D1 BNE DELY MOVE.B SUIS,D1 ; baca sekali lagi CMP.B D0,D1 ; jika sama, tamat lantunan BNE DEBOUNC RTS Nilai malar DELAMT menentukan lengah antara persampelan. Untuk memudahkan pengiraan, ambil contoh 68000 yang beroperasi pada 10 MHz atau 100 ns setiap kitar jam. Satu kitar bas memakan masa 4 kitar bas atau 400 ns. Suruhan MOVE.W memerlukan 2 kitar bas atau 800 ns. Suruhan SUBQ.W #1,D1 memakan masa 1 kitar bas = 400 ns. Masa untuk suruhan BNE bergantung kepada sama ada cabang diambil, iaitu 10 kitar jika mencabang (n-1 kali), dan 8 kitar jika tidak mencabang (1 kali). Menggantikan DELAMT dengan n, masa untuk lengah 30 ms = masa untuk MOVE.W + n*[masa untuk SUBQ.W] + [n-1]*[masa untuk BNE diambil] + masa untuk BNE tidak ambil. Ini sama dengan 30 = 0.8 + n*0.4 + [n-1]*1 + 0.8. Ini menghasilkan n = (30 - 1.6)/1.4 = 20.29, maka nilai DELAMT ditetapkan ke 20. Nilai ini tidak perlu terlalu tepat kerana terdapat banyak punca variasi: jenis suis, umur suis, cara pengguna menekan suis dan sebagainya. 11.5 Pengantaramukaan Papan Kekunci Papan kekunci14 kerap digunakan di peralatan yang memerlukan input lebih banyak daripada suis biasa. Untuk mengantaramuka papan kekunci, cip 74C922 amat sesuai kerana ia mempunyai litar nyahlantun di dalamnya. Ia boleh disambungkan kepada papan kekunci 4x3 atau 4x4 dan mempunyai output DCBA yang mewakili kedudukan kekunci. Ia mempunyai satu output khas, DAV (data available) yang menjadi tinggi apabila sebarang kekunci ditekan bagi memudahkan pengaturcaraan. Output DCBA yang dikeluarkan oleh cip 74C922 ditunjukkan di bawah. X1 hingga X4 mewakili lajur dan Y1 hingga Y4 mewakili baris. Nombor di kekunci selalunya berbeza dengan output yang terhasil. Sebagai contoh, jika kekunci ‘8’ yang disambung pada lajur X2 dan baris Y3 ditekan, output ialah 1001. Suatu jadual penukaran diperlukan untuk mendapatkan kod BCD sebenar. X1 X2 X4 X4 Y1 0000 0001 0010 0011 Y2 0100 0101 0110 0111 Y3 1000 1001 1010 1011 Y4 1100 1101 1110 1111 Subrutin di bawah menunjukkan bagaimana papan kekunci yang terletak di alamat $E100 boleh dibaca. Anggapkan pin DCBA masing-masing disambung ke talian D3-D0 di bas data, dan pin DAV ke pin D7. Jika byte di alamat $E1000 dianggap bertanda, ia bernilai positif apabila tiada kekunci ditekan, dan negatif bila ditekan. ; 14 keypadIf you found this book useful, donate to the Gaza fund
  • 184. 180 Bab 11. Pengantaramukaan Input/Output Asas Rajah 11.18: Pengantaramukaan dengan papan kekunci. ; RDKEYP: Subrutin bagi membaca papan kekunci di $E100 ; Kembali dengan kod BCD di D1, bagi input 0-9, A-D; ASCII bagi * dan #. ; KEYPAD EQU $E100 RDKEYP MOVE.B KEYPAD,D0 BPL RDKEYP AND.W #$F,D0 ; simpan 4 bit terendah LEA KEYLUT,A0 MOVE.B (A0,D0.W),D1 RTS KEYLUT DC.B 1,2,3,$A,4,5,6,$B,7,8,9,$C,’*’,0,’#’,$D 11.6 Input/Output Mudah dengan EASy68K EASy68K mempunyai kemudahan input/output mudah melalui tetingkap perkakasan EASy68K yang ditunjukkan lagi sekali dalam Rajah 11.19. Jadual 11.2 meringkaskan alamat bagi setiap peranti I/O mudah EASy68K: Perkara paling berbeza di antara perkakasan EASy68k dengan perkakasan yang telah ditunjukkan dalam bab ini ialah logik yang digunakan. Dalam perkakasan sebenar, logik negatif kerap digunakan untuk mengurangkan komponen logik. Dalam EASy68K, kekangan ini tidak wujud maka logik positif digunakan untuk semua jenis peranti kecuali suis pushbutton. Gelombang input dari kesemua suis juga adalah ‘cantik’ dan tidak perlu dinyahlantun. Satu contoh penggunaan perkakasan EASy68K ialah pembilang yang mengira berapa kali suis ditekan.If you found this book useful, donate to the Gaza fund
  • 185. 11.6. Input/Output Mudah dengan EASy68K 181 Jadual 11.2: Alamat bagi peranti input/output EASy68K Alamat Peranti Makna Logik ‘1’ $E00000 Pamer 7 segmen digit 1 Segmen Menyala $E00002 Pamer 7 segmen digit 2 Segmen Menyala $E00004 Pamer 7 segmen digit 3 Segmen Menyala $E00006 Pamer 7 segmen digit 4 Segmen Menyala $E00008 Pamer 7 segmen digit 5 Segmen Menyala $E0000A Pamer 7 segmen digit 6 Segmen Menyala $E0000C Pamer 7 segmen digit 7 Segmen Menyala $E0000E Pamer 7 segmen digit 8 Segmen Menyala $E00010 LED LED Menyala $E00012 Suis rocker Suis Tutup $E00014 Suis pushbutton (momentary ON) Suis Buka (tidak ditekan) ; ; BILANG.X68 ; DIGIT7 EQU $E0000C DIGIT8 EQU $E0000E LED EQU $E00010 PUSHBTN EQU $E00014 ORG $1000 START CLR.W D7 ; kosongkan pembilang LEA $E00000,A1 MOVEP.L D7,(A1) ; padam digit 1-4 MOVEP.L D7,8(A1) ; padam digit 5-8 LEA LUT,A0 CLR.B D1 ; papar tetingkap perkakasan MOVE.B #32,D0 TRAP #15 PAMER MOVE.B D7,LED ; papar pembilang dgn LED Rajah 11.19: Input/output melalui perkakasan mudah.If you found this book useful, donate to the Gaza fund
  • 186. 182 Bab 11. Pengantaramukaan Input/Output Asas MOVE.W D7,D1 LSR.B #4,D1 ; sediakan digit puluh MOVE.B (A0,D1.W),DIGIT7 ; papar digit puluh MOVE.W D7,D0 AND.W #%1111,D0 ; sediakan digit sa MOVE.B (A0,D0.W),DIGIT8 ; papar digit sa MOVE.L #1000000,D1 ; lengahkan pameran WAIT SUB.L #1,D1 BNE WAIT ULANG MOVE.B PUSHBTN,D0 ; tunggu suis ditekan CMP.B #$FF,D0 BEQ ULANG CLR D1 MOVE #$10,CCR ABCD D1,D7 ; tokok pembilang BRA PAMER LUT DC.B $3F,$06,$5B,$4F,$66,$6D,$7D,$07,$7F,$67 END START Aturcara ini menggunakan satu tugas TRAP #15 yang belum digunakan sebelumnya iaitu membuka tetingkap perkakasan secara automatik. Dengan adanya tugas ini, pengguna tidak perlu pergi ke menu untuk membuka tetingkap setiap kali melaksanakan aturcara. Caranya ialah dengan meletakkan D0 = 0 da D1 = 32 sebelum melaksanakan suruhan TRAP #15. Satu suruhan baru yang diperkenalkan dalam aturcara ini ialah suruhan MOVEP (move peripheral). Suruhan ini mempercepat pemindahan maklumat dari daftar data ke liang-liang periferal yang jarak antara satu sama lain adalah 2 byte. Rajah 11.20 menunjukkan bagaimana MOVEP D7,(A0) mengisikan data ke LED yang terletak bermula di alamat $E000000. Hanya satu mod alamat dibenarkan iaitu daftar alamat tak langsung dengan ofset. Rajah 11.20: Suruhan MOVEP.If you found this book useful, donate to the Gaza fund
  • 187. 11.6. Input/Output Mudah dengan EASy68K 183 Latihan 1. Nyatakan perbezaan skima pemetaan I/O terpeta ingatan berbanding I/O terasing. 2. Apakah kelebihan I/O periferal berbanding I/O mudah? 3. Apakah kelebihan I/O bersiri berbanding I/O selari? 4. Nyatakan perbezaan I/O tinjauan berbanding I/O terpacu sampukan. 5. Tukarkan aturcara EASy68K dalam Seksyen 11.6 supaya membilang modulo 60. Ini bermakna paparannya ialah 00, 01, ... , 59, 00, 01, ... 6. Tukarkan aturcara EASy68K dalam Seksyen 11.6 supaya menggunakan pembilang perduaan, bukan pembilang BCD. Ini bermakna suruhan untuk menokok D7 ialah ADD bukan suruhan ABCD. 7. Tukarkan aturcara EASy68K dalam Seksyen 11.6 supaya memaparkan jumlah saat sejak tengah malam. Rujuk Jadual 7.1 untuk nilai yang D0 yang diperlukan. 8. Tukarkan aturcara EASy68K dalam Seksyen 11.6 supaya waktu semasa. Tukarkan jumlah saat sejak tengah malam ke bentuk HH:MM:SS. 9. Tukarkan subrutin untuk EASy68K yang memaparkan sebarang nilai dalam D1.L dalam bentuk hex di pamer 7 segmen.If you found this book useful, donate to the Gaza fund
  • 188. 184 Bab 11. Pengantaramukaan Input/Output AsasIf you found this book useful, donate to the Gaza fund
  • 189. Bab 12 Kekecualian & Sampukan Objektif • Keadaan pemprosesan • Mod pengguna dan penyelia • Suruhan kawalan sistem • Prosedur pemprosesan kekecualian • Sampukan Pengenalan Mikropemproses 68000 menyediakan mekanisme bagi melindungi operasi sistem apabila berlaku sesuatu ralat atau kerosakan yang teruk. Amnya, kekecualian1 ditakrifkan sebagai kejadian yang mengubah perlaksanaan aturcara secara normal. Kekecualian ada yang terjadi disebabkan ralat pengaturcaraan seperti bahagi dengan sifar dan yang disengajakan oleh pengaturcara seperti perangkap. Sampukan2 ialah pemberhentian sementara sesuatu aturcara bagi melayan peranti periferal. Ciri sampukan membolehkan sumber-sumber pemproses dioptimumkan. Sampukan boleh dianggap sejenis kekecualian, dan mekanisme bagi menangani sampukan dan kekecualian adalah serupa. 12.1 Mod Penyelia dan Pengguna Untuk melindungi sistem daripada kerosakan teruk dalam aturcara pengguna, pemproses 68000 menentukan dua keadaan keistimewaan atau mod perlaksanaan: pengguna dan penyelia. Perlindungan dicapai dengan memberikan hak penggunaan beberapa sumber sistem hanya kepada penyelia. Sistem pengendalian beroperasi dalam keadaan penyelia manakala aturcara aplikasi dalam keadaan pengguna. Jadual 13-1 meringkaskan perbezaan kedua-dua mod. Peralihan dari mod pengguna ke mod penyelia hanya berlaku apabila terjadi kekecualian, seperti sampukan atau melaksanakan suruhan TRAP. Beralih dari mod penyelia ke mod pengguna dilakukan melalui salah satu daripada lima suruhan yang boleh mengubah bit S dalam SR. Ini ialah MOVE ke SR, ANDI ke SR, EORI ke SR, ORI ke SR dan RTE. Suruhan RTE3 mengembalikan nilai SR ke nilai yang disimpan dalam tindanan. Jika mod sebelumnya ialah pengguna, pemproses diubah ke mod pengguna. Jika kekecualian berlaku semasa sistem dalam mod penyelia, pemproses kekal dalam mod penyelia. 1 exception 2 interrupt 3 return from exception 185If you found this book useful, donate to the Gaza fund
  • 190. 186 Bab 12. Kekecualian & Sampukan Jadual 12.1: Ragam pengguna dibandingkan dengan ragam penyelia. Ragam Pengguna Ragam Penyelia Kaedah memasuki ragam Padam bit S dalam SR Suruhan TRAP, istimewa, reset, sampukan Output FC2 0 1 Penunjuk tindanan USP SSP Capaian SR: baca Keseluruhan SR Keseluruhan SR tulis CCR sahaja Keseluruhan SR Suruhan yang boleh Kesemuamya. kecuali Kesemuanya digunakan RESET RTE STOP #d ANDI #d,SR EORI #d,SR ORI #d,SR MOVE ¡ea¿,SR MOVE USP,An MOVE An,USP Beberapa suruhan dikelaskan sebagai suruhan istimewa4 dan hanya boleh dilaksanakan dalam keadaan penyelia. Sebarang percubaan melaksanakan suruhan-suruhan ini dalam mod pengguna menyebabkan kekecualian perlanggaran keistimewaan. Mekanisme utama yang membolehkan aturcara pengguna menggunakan sumber sistem ialah suruhan TRAP (perangkap). Beberapa operasi asas seperti input/output disediakan oleh sistem pengoperasian dalam bentuk rutin perangkap. Menerusi TRAP, aturcara pengguna memasuki memasuki mod penyelia dengan cara yang terkawal untuk melakukan operasi sistem kemudian kembali ke mod pengguna. Operasi ini kerap dipanggil panggilan sistem. Satu perbezaan kedua-dua mod ialah masing-masing mempunyai penunjuk tindanan sendiri. Pemproses 68000 mempunyai dua penunjuk tindanan iaitu USP5 dan SSP6 . Dalam keadaan pengguna, merujuk kepada A7 atau SP menyebabkan USP digunakan. Sebaliknya, SSP digunakan sebagai A7 atau SP dalam keadaan penyelia. Penunjuk tindanan aktif digunakan untuk menyimpan PC secara automatik semasa panggilan subrutin. Dalam mod pengguna, aturcara boleh menggunakan suruhan MOVE untuk membaca keseluruhan SR, tetapi hanya boleh menulis ke CCR. Dengan bantuan litar tambahan, aturcara mod pengguna juga boleh dihalang daripada membaca atau menulis ruang ingatan tertentu. Satu peranti khusus bagi melaksanakan pemisahan ini ialah unit pengurusan ingatan (MMU7 ). Jika MMU mengesan percubaan dari aturcara pengguna untuk mencapai ingatan yang di luar haknya, suatu kekecualian diberikan. Aturcara penyelia kemudiannya boleh melakukan tindakan sewajarnya seperti menghentikan perlaksanaan aturcara tersebut. 12.2 Suruhan Kawalan Sistem Beberapa suruhan 68000 dikhaskan untuk mengawal operasi sistem. Suruhan-suruhan ini dikelaskan sebagai istimewa dan hanya boleh dilaksanakan dalam mod penyelia. Sebarang percubaan untuk 4 privilegedinstructions 5 userstack pointer 6 supervisor stack pointer 7 memory management unitIf you found this book useful, donate to the Gaza fund
  • 191. 12.2. Suruhan Kawalan Sistem 187 melaksanakan salah satu suruhan istimewa dalam keadaan pengguna menyebabkan kekecualian. Berikut ialah senarai suruhan-suruhan yang disebutkan: ANDI.W #<data>,SR ORI.W #<data>,SR EORI.W #<data>,SR MOVE.W <ea>,SR MOVE.L An,USP MOVE.L USP,An STOP #<data> RESET RTE Suruhan logikal ANDI, EORI dan ORI beroperasi seperti suruhan logikal yang diterangkan dalam Bab 3 tetapi di sini destinasinya ialah SR, menjadikannya suruhan istimewa. Suruhan MOVE ke dalam SR mengubah daftar status secara langsung. Suruhan MOVE dengan USP mengolah daftar USP. Suruhan STOP, RTE dan RESET juga tergolong sebagai suruhan istimewa. Suruhan Olahan USP Dalam mod penyelia, penunjuk tindanan yang aktif ialah SSP. Penyelia hanya perlu merujuknya sebagai SP atau A7. Jika penyelia ingin mengolah USP bagi pengendalian aturcara-aturcara pengguna, ia perlu merujuknya dengan nama USP. Suruhan istimewa MOVE.L USP,An menyalin USP ke daftar alamat An. Suruhan MOVE.L An,USP beroperasi sebaliknya dan digunakan untuk mengisikan nilai ke dalam USP. Suruhan RTE Sampukan dan kekecualian menyebabkan daftar status 16 bit dan pembilang aturcara 32 bit disimpan di tindanan penyelia untuk merekodkan keadaan aturcara semasa kekecualian berlaku. Suruhan RTE digunakan untuk memulihara nilai SR dan PC setelah rutin pengendali kekecualian tamat. Dengan kata lain, suruhan RTE terletak di hujung rutin pengendali kekecualian sementara suruhan RTS terletak dihujung subrutin. Suruhan RTE juga digunakan untuk memindahkan kawalan ke aturcara pengguna semasa sistem mula-mula dipasang. 
 Rajah 12.1: Peralihan antara mod pengguna dan penyelia.If you found this book useful, donate to the Gaza fund
  • 192. 188 Bab 12. Kekecualian & Sampukan Suruhan RESET Suruhan RESET menyebabkan pin RESET* pada cip 68000 diaktifkan selama 124 kitar jam. Talian ini biasanya disambungkan kepada kesemua cip periferal dalam sistem, dan menyebabkan kesemua peranti direset, tanpa menjejaskan pemproses. Suruhan ini boleh dilaksanakan untuk memulihkan sistem daripada kerosakan terus. Suruhan STOP Suruhan STOP menghentikan pemproses 68000. Sebagai contoh, suruhan STOP #$2700 mengisikan nilai $2700 ke dalam daftar status kemudian menghentikan pemproses. Nilai $2700 bermakna T = 0, S = 1, topeng sampukan = 7 dan XNZVC = 00000. Perlaksanaan tidak diteruskan sehingga 68000 menerima sampukan yang cukup tinggi keutamaannya, atau isyarat reset. 12.3 Pemprosesan Kekecualian Kekecualian dijana oleh sebab luar atau dalam pemproses. Kekecualian yang dijana oleh kejadian luar adalah sampukan, ralat bas dan reset. Sampukan adalah permohonan dari peranti periferal untuk perhatian pemproses. Ralat bas terjadi apabila isyarat BERR* diaktifkan. Reset berlaku apabila isyarat RESET* diaktifkan. Kekecualian dalaman dijana oleh suruhan, surihan dan ralat perlaksanaan. Misalnya, suruhan TRAP dan emulator A atau F sentiasa menjana kekecualian manakala TRAPV, CHK, DIVU dan DIVS menjana kekecualian dengan syarat. Kekecualian juga dihasilkan oleh suruhan larangan dan perlanggaran keistimewaan8 . Surihan pula menyerupai sampukan yang dihasilkan oleh perlaksanaan setiap suruhan. Kecuali untuk reset, setiap kekecualian menyebabkan 68000 melakukan kelima-lima langkah berikut: 1. Simpan SR di daftar dalaman 2. Set bit S dan padam bit T di dalam SR. Jika sampukan, topeng sampukan diubah menurut tahap sampukan. 3. Dapatkan nombor vektor untuk kekecualian kemudian darab dengan empat untuk mendapat alamat vektor. 4. Simpan PC dan SR asal disimpan ke tindanan penyelia. Tambahan empat kata disimpan jika kekecualian ialah ralat bas atau ralat alamat. 5. Isikan PC dengan nilai baru yang dibaca dari alamat vektor yang dikira dalam langkah 3. Langkah-langkah di atas dikenali juga sebagai pemprosesan kekecualian9 . Maklumat yang disimpan dalam tindanan penyelia ialah bergantung kepada jenis kekecualian. Maklumat ini dikenali sebagai bingkai tindanan10 . Rujuk Rajah 14.3 untuk melihat format bingkai tindanan. Untuk ralat bas dan ralat alamat, nilai PC tidak boleh dijangka. Lebih banyak maklumat disimpan di tindanan termasuk kata pertama suruhan yang gagal dan jenis kitar bas yang menyebabkan ralat. Ini membolehkan penentuan sebab sebenar kegagalan. Suruhan terakhir dalam rutin pengelola kekecualian ialah suruhan RTE supaya pemproses dalam kembali ke tugas yang dibuat sebelum kekecualian. 8 privilegeviolation 9 exception processing 10 stack frameIf you found this book useful, donate to the Gaza fund
  • 193. 12.3. Pemprosesan Kekecualian 189 
 Rajah 12.2: Turutan pemprosesan kekecualian. Alamat SSP Sebelum kekecualian SSP-6 Daftar status SSP-4 Pembilang aturcara (atas) SSP-2 Pembilang aturcara (bawah) SSP Sebelum kekecualian SSP 
 Bingkai tindanan bagi kesemua kekecualian kecuali ralat bas dan ralat alamat. (a) Alamat SSP Sebelum kekecualian SSP-14 Jenis capaian ingatan SSP-12 Alamat capaian (atas) SSP-10 Alamat capaian (bawah) SSP-8 Daftar suruhan 7 kata SSP-6 Daftar status SSP-4 Pembilang aturcara (atas) SSP-2 Pembilang aturcara (bawah) SSP Sebelum kekecualian SSP 
 (b) Bingkai tindanan bagi ralat bas dan ralat alamat. Rajah 12.3: Format bingkai tindanan. Vektor Sampukan Vektor sampukan11 ialah lokasi ingatan yang dibaca oleh pemproses bagi mendapat alamat suatu rutin bagi mengelolakan suatu sampukan. Setiap kekecualian dikaitkan dengan satu rutin pengelola dan vektor 11 interrupt vectorIf you found this book useful, donate to the Gaza fund
  • 194. 190 Bab 12. Kekecualian & Sampukan Jadual 12.2: Jadual vektor. Nombor Alamat Fungsi Vektor Perenambelasan 0 000 Reset: SSP awal 004 Reset: PC awal 2 008 Ralat bas 3 00C Ralat alamat 4 010 Suruhan Larangan 5 014 Bahagi dengan Sifar 6 018 Suruhan CHK 7 01C Suruhan TRAPV 8 020 Perlanggaran Keistimewaan 9 024 Surih 10 028 Emulator Baris 1010 11 02C Emulator Baris 1111 12-14 030-034 (Dikhaskan) 15 03C Sampukan Tidak Dimemulakan 16-23 040-05C (Dikhaskan) 24 060 Sampukan Rambang 25-31 064-7C Sampukan Autovektor Tahap 1-7 32-47 080-0BC Suruhan TRAP #0-TRAP #15 48-63 0C0-0FF (Dikhaskan) 64-255 100-3FC 192 Vektor Sampukan Pengguna tersendiri. Kesemua vektor sampukan panjangnya satu kata panjang (32 bit), kecuali vektor reset yang panjangnya empat kata. Terdapat 255 nombor vektor berbeza. Setiap vektor mewakili sejenis kekecualian atau sampukan. Vector 0 hingga 63 dijana dari dalam 68000, manakala vector 64 hingga 255 diberi oleh peranti periferal semasa sampukan. Vektor 1 tidak wujud kerana operasi reset memungut dua kata panjang berturut-turut. Jadual 14.2 meringkaskan jadual vektor. Daripada ruang ingatan 68000 yang sepanjang 16 megabyte, 1K pertama ($000000 hingga $0003FF) dikhususkan untuk vektor kekecualian. Perhatikan yang banyak nombor vektor disimpan oleh Motorola untuk pembaikan masa akan datang. Kekecualian Berganda Kekecualian diatur supaya sebarang keadaan yang tidak normal dikelolakan secara teratur dan boleh dijangka. Salah satu kemungkinan ialah kehadiran kekecualian semasa kekecualian sebelumnya sedang diproses. Untuk mengendalikan keadaan ini, kekecualian dikumpulkan ke dalam tiga kelompok: 0, 1, dan 2. Kekecualian kumpulan 0 diproses sebelum kekecualian kumpulan 1 dan 2. Kekecualian kumpulan 1 diproses sebelum kekecualian kumpulan 2. Agihan kumpulan-kumpulan ini ditunjukkan dalam Jadual 14.3. Jadual ini tidak sahaja menunjukkan kumpulan kekecualian tetapi juga keutamaan dalam sesuatu kumpulan. Perbezaan keutamaan antara dua kekecualian menentukan yang mana satu dipilih apabila kedua- duanya berlaku serentak. 12.4 Kekecualian yang Disebabkan Perlaksanaan Aturcara Perlaksanaan setiap suruhan boleh mengakibatkan kekecualian yang dinamai perangkap. Ia disebabkan oleh perlaksanaan aturcara secara normal. Suruhan TRAP digunakan untuk memindahkan kawalanIf you found this book useful, donate to the Gaza fund
  • 195. 12.4. Kekecualian yang Disebabkan Perlaksanaan Aturcara 191 Jadual 12.3: Kategori kekecualian. Kumpulan Kekecualian Pemprosesan Reset 0 Ralat alamat Selepas tamat kitar jam Ralat bas Suruhan larangan Selepas tamat kitar bas Perlanggaran keistimewaan 1 Surih Selepas tamat kitar suruhan Sampukan TRAP, TRAPV, CHK 2 Semasa kitar suruhan Bahagi dengan sifar Jadual 12.4: Perbezaan perangkap dan subrutin. Perangkap Subrutin Dimulakan dari mod pengguna atau penyelia mod pengguna atau penyelia Dilaksanakan dalam mod penyelia mod pengguna atau penyelia Daftar yang disimpan PC dan SR PC Daftar disimpan di tindanan sistem tindanan sistem atau pengguna Rutin ditamatkan oleh RTE RTS Mod selepasnya mod pengguna atau penyelia mod pengguna atau penyelia dari aturcara pengguna ke aturcara penyelia. Perangkap-perangkap yang disebabkan oleh suruhan DIVS/DIVU, TRAPV atau CHK menandakan ralat aturcara. Dua perangkap emulator membolahkan rekabentuk suruhan baru bagi mengembangkan set suruhan. Turutan pemprosesan setiap jenis perangkap adalah sama. Jika kekecualian dikesan, pemproses akan melalui empat langkah yang diterangkan dalam seksyen sebelumnya. Jika kawalan dikembalikan ke aturcara yang menyebabkan kekecualian, rutin perangkap melak- sanakan suruhan RTE yang memulihara nilai SR dan PC dari tindanan. Untuk suruhan emulator, nilai PC yang disimpan menuding ke suruhan yang menyebabkan kekecualian. Untuk kembali ke suruhan seterusnya, nilai PC yang terdapat dalam tindanan perlu diubah oleh rutin yang mengendalikan emulator. Suruhan TRAP Suruhan TRAP (perangkap) menjana kekecualian daripada dalam aturcara. Ia dikenali juga sebagai panggilan sistem atau sampukan perisian. Format suruhan ini ialah TRAP #<nombor> Perangkap membolehkan sistem menyediakan rutin utiliti yang dipanggil secara konsisten. Pem- proses 68000 menyediakan 16 suruhan berbentuk TRAP #<nombor> yang mana <nombor> ialah nilai 0 hingga 15. Perlaksanaan TRAP #0 memanggil pengendali TRAP #0, dan seterusnya. Penggunaan TRAP membolehkan aturcara yang sama dilaksanakan ke sistem yang mempunyai perkakasan yang sedikit berlainan. Untuk memanfaatkan suruhan ini, kedua-dua sistem perlu menye- diakan rutin pengendali yang khusus untuk perkakasan yang terdapat dalam sistem masing-masing. Misalnya, TRAP #0 boleh ditetapkan untuk operasi baca aksara dan TRAP #1 untuk tulis aksara. Dalam sistem A, operasi input/output boleh dilakukan menerusi papan kekunci dan skrin manakala untuk sistem B, operasi baca dilakukan menerusi antaramuka bersiri. Penggunaan TRAP memudahkan pengaturcara kerana tidak mengetahui perkakasan yang ada dengan terlalu terperinci. Komputer papan tunggal Motorola ECB68K menyediakan pengendali TRAP #14 untuk melakukan tugas-tugas input/output asas. Pengendali perangkap ini mempunyai pelbagai fungsi yang ditentukanIf you found this book useful, donate to the Gaza fund
  • 196. 192 Bab 12. Kekecualian & Sampukan Jadual 12.5: Vektor untuk Suruhan TRAP Suruhan Nombor Vektor Alamat Vektor TRAP #0 32 $000080 TRAP #1 33 $000084 TRAP #2 34 $000088 TRAP #3 35 $00008C TRAP #4 36 $000090 TRAP #5 37 $000094 TRAP #6 38 $000098 TRAP #7 39 $00009C TRAP #8 40 $0000A0 TRAP #9 41 $0000A4 TRAP #10 42 $0000A8 TRAP #11 43 $0000AC TRAP #12 44 $0000B0 TRAP #13 45 $0000B4 TRAP #14 46 $0000B8 TRAP #15 47 $0000BC oleh byte terendah D7 semasa perangkap dilaksanakan. Sebelum TRAP dilaksanakan, pengaturcara mesti mengisi kod fungsi dalam byte terendah D7. Contoh untuk output 1 aksara ASCII: MOVE.B #248,D7 ;ISI KOD FUNGSI DALAM D7 TRAP #14 ;JALANKAN PENGENDALI TRAP #14 Sistem yang sama digunakan dalam simulator EASy68k. Suruhan TRAPV Melaksanakan suruhan TRAPV12 semasa bendera V dalam CCR bernilai 1 akan menjana kekecualian TRAPV. Jika V bernilai 0, suruhan ini tiada kesan kecuali mengemaskini PC ke suruhan berikutnya. Berikut adalah contoh penggunaannya ADD.B D0,D1 TRAPV Suruhan TRAPV memanggil sistem pengoperasian hanya jika limpahan berlaku. Meletakkan suruhan ini selepas suruhan ADD memastikan hasil tambah yang melimpah dikesan dengan cara yang teratur. Suruhan CHK Suruhan CHK13 juga beroperasi secara bersyarat. Ia menyemak nilai dalam daftar data dan menye- babkan perangkap jika daftar Dn mengandungi nilai negatif atau melebihi kendalian suruhan. Hanya kata rendah disemak. Contohnya suruhan CHK #$300,D7 membandingkan daftar D7 dengan $300. Jika kata rendah D7 positif dan kurang daripada $300, tiada kekecualian dijana. Bahagi dengan Sifar Kekecualian ini berlaku apabila suruhan DIVU dan DIVS cuba membahagi sebarang nilai dengan sifar. Ini boleh berlaku apabila pengguna memasukkan data salah. Lihat contoh berikut: 12 trap on overflow 13 check register against boundsIf you found this book useful, donate to the Gaza fund
  • 197. 12.4. Kekecualian yang Disebabkan Perlaksanaan Aturcara 193 JSR BACA ;DAPATKAN NILAI DIBAHAGI MOVE.W D0,D1 ;INPUT DALAM D0 EXT.L D1 JSR BACA ;DAPATKAN NILAI PEMBAHAGI DIVS D0,D1 ;LAKUKANNYA! TRAPV Turutan di atas mungkin tiada masalah untuk kebanyakan kes tetapi untuk pembahagian terdapat dua kemungkinan ralat iaitu keadaan limpahan dan bahagi dengan sifar. Dua pengendali ralat diperlukan iaitu pengendali TRAPV dan pengendali pembahagian dengan sifar. Emulator A dan F Nilai perenambelasan $A atau $F dalam nibel teratas kata operasi tidak melambangkan sebarang opkod sah. Kedua-dua nilai ini mewakili kes khas suruhan larangan yang dipanggil kekecualian emulator. Ia juga dikenali sebagai perangkap suruhan belum dilaksanakan14 . Kekecualian emulator membolehkan suruhan baru ditambah kepada set suruhan yang sedia ada. Opkod $AXXX dikenali sebagai perangkap talian A (1010). Nilai XXX boleh ditakrif oleh pengguna dan merupakan parameter kepada rutin pengendali emulator. Ia mempunyai nombor vektor 10 dan alamat pengendali terletak dalam alamat $28. Opkod $FXXX ialah perangkap talian F (1111) dan ia mempunyai nombor vektor 11. Alamat pengendali emulator terletak dalam alamat $2C. Komputer Macintosh dengan pemproses famili 68k menggunakan Emulator A untuk menyediakan pustaka fungsi kepada pengaturcara. Rutin-rutin ini terletak di dalam ROM yang secara keseluruhannya dinamai Macintosh Toolbox. Terdapat lebih daripada 600 subrutin dengan pelbagai tugas seperti memaparkan objek di skrin, mencapai cakera, menguruskan ingatan dan menggunakan ciri-ciri multimedia. Untuk menggunakan kesemua subrutin ini, pengaturcara perlu merujuk set buku Inside Macintosh. Salah satu suruhan yang kerap digunakan ialah $A9C8 yang membunyikan System Beep di Macintosh. Untuk menyebabkan perangkap ini, perintah penghimpun berikut disisipkan dalam aturcara di celah-celah suruhan biasa. DC.W $A9C8 N $AXXX SR SP N+2 N 
 (a) Sebelum maklumat diambil. N $AXXX SR SP N+2 N+2 $AXXX D0 N+2 A0 
 (b) Selepas maklumat diambil. Rajah 12.4: Mengambil parameter semasa kekecualian emulator. Dalam pemproses MC68020 hingga ke MC68060, suruhan talian F melaksanakan suruhan ko- pemproses terutama bagi kawalan unit titik apung. 14 unimplemented instruction trapIf you found this book useful, donate to the Gaza fund
  • 198. 194 Bab 12. Kekecualian & Sampukan Apabila perangkap talian A atau F terjadi, nilai PC menunjuk ke suruhan $AXXX atau $FXXX, bukan kepada suruhan berikutnya. Oleh itu, parameter suruhan boleh dicapai dengan turutan berikut: MOVEA.L 2(SP),A0 ;ambil alamat pulang MOVE.W (A0)+,D0 ;ambil opkod $AXXX MOVE.L A0,2(SP) ;tunjuk ke suruhan berikut Rujuk 14.4 untuk melihat gambaran bagaimana parameter dipungut dari tindanan semasa di dalam pengendali emulator. Kekecualian Surih Untuk membantu pembangunan aturcara, pemproses 68000 mempunyai suatu kemudahan bagi menyurih perlaksanaan suruhan. Apabila surihan dibolehkan, suatu kekecualian berlaku selepas setiap suruhan. Oleh itu, aturcara penyahpepijat boleh mengawas perlaksanaan aturcara yang sedang diuji. Kemudahan surihan dikawal oleh bit T dalam SR. Jika T=0, surihan dilumpuhkan dan suruhan- suruhan dilaksanakan satu persatu secara normal. Jika T=1, kekecualian surihan dijana selepas setiap suruhan. Bit T dipadam sebaik sahaja kekecualian berlaku jadi surihan tidak berlaku di dalam rutin kekecualian surihan. Apabila rutin ditamatkan, bit T dikembalikan ke nilai asal. Ini menyebabkan CPU menjana kekecualian surih selepas suruhan berikutnya dilaksanakan. Untuk menyurih aturcara pengguna, bit T perlu diubah semasa dalam mod pengguna. Agak sukar kerana SR tidak boleh diubah semasa dalam mod pengguna. Oleh itu pengguna perlu memanggil subrutin OS (seperti melalui suruhan TRAP atau perangkap talian A). Pengendali perangkap hanya mempunyai dua suruhan: ORI.W #$8000,(SP) RTE Di sini suruhan ORI memberikan 1 kepada bendera T yang terletak dalam tindanan. Apabila kembali ke aturcara pengguna, fungsi surih telahpun dibolehkan. Kemudahan surih biasanya memaparkan isi kesemua daftar di CRT. Malangnya, jika setiap suruhan disurih, ini menghasilkan output yang melambak-lambak. Lebih praktikal : menyurih suruhan yang berlaksana di alamat tertentu (spt titik henti). 12.5 Keadaan Ralat yang Menyebabkan Perangkap Pemproses 68000 direka untuk melindungi sistem daripada kerosakan yang boleh menyebabkan operasi yang tidak menentu. Semasa aturcara sedang dibangunkan, perangkap perlanggaran keistime- waan, suruhan larangan dan ralat alamat kerap terjadi. Ralat bas dan keadaan terhenti menandakan kerosakan perkakasan. Kerosakan sedemikian jarangkali dapat dipulihkan selagi kesilapan aturcara atau perkakasan belum dibaiki. Suruhan Larangan Apabila 68000 memungut suatu opkod semasa kitar pungut dan mendapati ia tidak padan dengan sebarang opkod sah dalam set suruhan, pemproses menjana kekecualian suruhan larangan. Kekecualian ini melindungi sistem dari terkandas jika pemproses melompat ke kawasan data secara tidak sengaja. Terdapat opkod yang tidak difahami oleh 68000 tetapi merupakan opkod sah dalam pemproses yang lebih tinggi kerana suruhan-suruhan baru ditambah dalam setiap pembaikan senibina 68000. Tiga pola bit dijamin menyebabkan kekecualian suruhan larangan dalam kesemua pemproses siri 68000. Pola ini ialah $4AFA, $4AFB dan $4AFC. Dua pola pertama dikhaskan untuk produk dari Motorola manakala pola $4AFC boleh digunakan oleh pengguna untuk tujuan pengujian. Pola ini boleh didapati melalui suruhan ILLEGAL.If you found this book useful, donate to the Gaza fund
  • 199. 12.5. Keadaan Ralat yang Menyebabkan Perangkap 195 Perlanggaran Keistimewaan Untuk mewujudkan keselamatan kepada sistem, aturcara pengguna tidak dibenarkan melaksanakan suruhan kawalan sistem. Jika aturcara pengguna cuba melaksanakan suruhan istimewa, kekecualian perlanggaran keistimewaan dihasilkan. Kewujudan kekecualian ini memberitahu sistem pengoperasian bahawa terdapat kesilapan pengatur- caraan dalam aturcara atau pengguna sedang sengaja mengganggu operasi sistem. Aturcara pengguna boleh ditamatkan jika penyelia memutuskan suruhan tersebut memudaratkan keseluruhan sistem. Ralat Alamat Ralat alamat berlaku bila pemproses mencapai kata atau kata panjang di alamat ganjil. Apabila ralat alamat berlaku, kitar bas ditamatkan dan pemprosesan kekecualian ralat alamat dimulakan. Turutan pemprosesan kekecualian adalah sama dengan kekecualian ralat bas, termasuk maklumat yang disimpan di tindanan sistem. Ralat alamat biasanya disebabkan nilai yang tidak sah dalam daftar alamat. Turutan berikut akan menyebabkan ralat alamat: MOVEA.L #$1000,A1 ; tiada masalah pada awalnya MOVE.B (A1)+,D7 ; daftar alamat menjadi ganjil MOVE.W (A1),D6 ; ralat alamat sebab daftar alamat ganjil Suruhan terakhir di atas mengakibatkan ralat alamat. Semasa suruhan MOVE.W dilaksanakan, nilai A1 adalah ganjil setelah diubah oleh suruhan sebelumnya. Ralat Bas Kekecualian ralat bas disebabkan oleh kegagalan sistem menyempurnakan kitar bas. Dalam keadaan normal, kitar bas disempurnakan apabila pemproses menerima isyarat DTACK* atau VPA*. Jika salah satu pun tidak diterima disebabkan masalah perkakasan, pemproses akan tergantung iaitu menunggu sampai bila-bila. Kaedah yang lebih baik ialah menambah suatu litar bantuan yang menjana isyarat BERR* apabila pemproses telah menunggu terlalu lama. Kitar bas semasa dibatalkan dan pemproses terus melakukan pemprosesan kekecualian. Rajah 14.5 menunjukkan tiga isyarat yang patut diterima oleh pemproses setiap kitar bas. Antara sebab-sebab ralat bas adalah: • Capaian ingatan yang salah cubaan mencapai alamat yang tiada peranti atau cubaan menulis ke ROM • Perlanggaran perlindungan ingatan dalam sistem pengoperasian multipengguna dan multiaturcara seperti UNIX, ia boleh berlaku apabila aturcara cuba mencapai ruang ingatan aturcara lain atau pengguna lain. Ciri ini memerlukan bantuan cip unit pengurusan ingatan (MMU). • Capaian ke ingatan yang rosak litar pengesan ralat ingatan boleh membantu pemproses mengelak daripada menggunakan data yang salah Lebih banyak maklumat ditindan semasa ralat bas dan ralat alamat berbanding kekecualian lain. Bingkai tindanan mengandungi tujuh kata. Ini membolehkan jenis ralat ditentukan supaya kerosakan dapat dipulihkan. Rujuk Rajah 14.3. Jika ralat bas berlaku semasa memproses kekecualian ralat bas, ralat alamat atau reset, pemproses dihentikan. Ini memudahkan kerosakan dikesan dan pemproses mengasingkan dirinya daripada bas untuk mengelakkan kandungan ingatan daripada diubah. Nama lain bagi litar mengesan ralat bas ialah watchdog timer, seperti yang diterangkan dalam Bab 10. Jika aturcara mencapai alamat yang tiada ingatan atau peranti antaramuka, DTACK* tidak akan sampai. Selepas menunggu beberapa lama, katakan 40 kitar jam, watchdog timer mengaktifkan BERR* dan memulakan kekecualian ralat bas.If you found this book useful, donate to the Gaza fund
  • 200. 196 Bab 12. Kekecualian & Sampukan Rajah 12.5: BERR* merupakan jalan terakhir bagi mengelakkan pemproses tergantung. Gelinciran Bas Kembar Jika ralat bas atau ralat alamat berlaku semasa memproses ralat alamat, ralat bas atau reset, pemproses dihentikan. Ralat berganda ini dinamai gelinciran bas kembar dan menyebabkan pemproses memasuki keadaan terhenti serta mengaktifkan isyarat HALT*. Cara pemulihan pemproses yang terhenti hanyalah dengan mengaktifkan isyarat RESET* dari luar. 12.6 Reset dan Pememulaan Sistem Apabila sistem mikrokomputer dipasangkan, beberapa langkah berlaku untuk memulakan operasi sistem secara teratur dan seterusnya melaksanakan suatu aturcara. Semasa perlaksanaan aturcara, jika sistem terkandas semasa disebabkan ralat perkakasan atau perisian yang tidak boleh dipulihkan, sistem perlu direset dan turutan reset baru dimulakan. Pemproses juga boleh mereset peranti luar jika terdapat kerosakan dalam peranti antaramuka. Turutan pememulaan sistem digunakan bagi meletakkan sistem dalam keadaan tertentu sebelum sebarang aturcara aplikasi dilaksanakan. Ia bukan sahaja memulakan data yang digunakan dalam sistem tetapi boleh menyebabkan pengisian sistem pengendalian daripada peranti luar seperti cakera keras. Kekecualian reset ialah kekecualian pada tahap tertinggi dan dimulakan apabila isyarat RESET diaktifkan. Pemprosesan kekecualian reset dilakukan semasa mula-mula menghidupkan sistem dan semasa memulihkan sistem dalam kerosakan teruk. Disebabkan isi daftar-daftar tidak lagi dianggap sah, terutama SSP, PC dan SR tidak disimpan. Alamat yang terkandung dalam dua kata pertama dalam vektor kekecualian reset dipungut menjadi SSP awal. Alamat dalam dua kata terakhir vektor kekecualian reset dipungut menjadi PC awal. Akhirnya, perlaksanaan aturcara dimulakan di alamat yang ditunjukkan oleh PC. Nilai ini sepatutnya menuding ke power-up/restart code. Selepas reset dikesan, 68000 mengisi SR dengan $2700 (S=1, T=0, dan topeng sampukan = tahap 7). Kemudian SSP diisi dengan kata panjang di alamat $000000 dan PC diisi dengan kata panjang di alamat $000004. Jika kekecualian reset berlaku ketika sebarang pemprosesan, pemprosesan itu ditamatkan dan tidak akan disambung semula. (Tidak boleh kembali ke aturcara asal selepas reset.) Kekecualian reset tidak dijana secara automatik semasa pemproses mula2 hidup. Perkakasan luar mesti membumikan pin RESET* dan HALT* selama tidak kurang 100 ms. Jika ralat bas berlaku semasa memproses kekecualian ini, gelinciran bas kembar terjadi dan pemproses dihentikan. Walaupun SSP dimemulakan semasa reset, USP tidak sedangkan USP ialah penuding tindanan aktif dalam mod penyelia. Oleh itu, USP perlu diisi semasa beralih daripada ragam penyelia ke ragam pengguna.If you found this book useful, donate to the Gaza fund
  • 201. 12.6. Reset dan Pememulaan Sistem 197 MULA S←1 T←0 I2I1I0 ← 7 Ralat Ya Pungut vektor 0 bas? Tidak SSP ← Kandungan vektor 0 Ralat Ya Pungut vektor 1 bas? Ralat bas kembar PC ← Tidak Kandungan vektor 1 TAMAT TAMAT 
 Rajah 12.6: Turutan pememulaan sistem. Jadual 12.6: Contoh prosedur pememulaan sistem. Operasi Komen Memulakan alamat untuk vektor Lokasi $0008-$03FC Isikan sistem pengendalian Cari di cakera keras Memulakan lokasi ingatan kepunyaan penyelia Jika perlu Memulakan kesemua peranti periferal Suruhan RESET untuk semua periferal Memulakan USP (USP) dasar tindanan pengguna Letak alamat permulaan aturcara pengguna ((SSP)) permulaan aturcara Letak status untuk aturcara pengguna ((SSP)) daftar status pengguna Pindah kawalan ke aturcara pengguna RTE Gunakan suruhan MOVE An,USP untuk mengisi USP semasa dalam ragam penyelia. Berikut ialah contoh bagaimana aturcara pengguna boleh dilaksanakan dari ragam penyelia. MOVEA.L #USERSTK,A0 ; ISI NILAI USP AWAL MOVE.L A0,USP ; SALIN KE USP MOVE.L #MULA,-(SP) ; PC AWAL UNTUK PENGGUNA MOVE.W #0,-(SP) ; SR AWAL RTE ; MULAKAN ATURCARA PENGGUNA Dalam contoh di atas, nilai awal SR bagi pengguna ialah 0 yang bererti: S=0 ragam pengguna T=0 tiada surihan I=000 benarkan kesemua sampukan CCR=00000 padam semua bendera Jadual 14.6 menunjukkan satu contoh pememulaan sistem yang lebih kompleks melibatkan suatu sistem dengan peranti cakera dan sistem pengendalian yang lengkap.If you found this book useful, donate to the Gaza fund
  • 202. 198 Bab 12. Kekecualian & Sampukan Jadual 12.7: Kaitan topeng sampukan dengan sampukan yang dibenarkan. Topeng sampukan Tahap sampukan dibenarkan (I2 I1 I0 ) di IPL2*, IPL1*, IPL0* 000 1-7 001 2-7 010 3-7 011 4-7 100 5-7 101 6-7 110 7 111 7 12.7 Sampukan Sampukan merupakan permohonan perkhidmatan oleh periferal. Ia membolehkan pemproses digunakan dengan lebih cekap kerana ia membolehkan pemproses melakukan kerja-kerja yang lebih penting sementara menunggu periferal sedia. ISR ISR Utama Utama Utama 
 Rajah 12.7: Perlaksanaan aturcara tanpa dan dengan sampukan. Peranti luar memberi isyarat untuk perhatian dengan meletakkan kod 3 bit di input permohonan sampukan IPL0*, IPL1* dan IPL2*. Pemproses kemudiannya menghentikan kerja yang sedang dilakukan untuk memberi perhatian kepada peranti periferal. Untuk memberi khidmat kepada peranti, pemproses melaksanakan rutin khidmat sampukan (ISR15 ). Setelah ISR ditamatkan, aturcara utama disambung semula. Kod tahap 7 menyatakan keutamaan tertinggi, tahap 1 terendah dan tahap 0 keadaan biasa tanpa sampukan. Sama ada sampukan dilihat bergantung kepada bit I2 I1 I0 dalam SR. 74LS148 INT7* 7 INT6* 6 68000 INT5* 5 INT4* 4 A2 IPL2* INT3* 3 A1 IPL1* INT2* 2 A0 IPL0* INT1* 1 +5 V 0 
 Rajah 12.8: Pengekod keutamaan sampukan. 15 interrupt service routineIf you found this book useful, donate to the Gaza fund
  • 203. 12.8. Kitar Akuan Sampukan 199 12.8 Kitar Akuan Sampukan Kitar akuan sampukan16 atau kitar IACK ialah fasa setelah pemproses bersetuju melayan sesuatu sampukan. Pemproses memulakan pemprosesan kekecualian sama seperti kekecualian lain. Bezanya: 1. Bit topeng sampukan dalam SR diubah kepada nilai sampukan yang sedang diproses. Ini bermakna sampukan yang sedang diproses tidak boleh disampuk kecuali sampukan baru mem- punyai keutamaan lebih tinggi. 2. Selepas pemproses menyimpan SR dan PC di tindanan, ia melaksanakan kitar IACK. Semasa kitar IACK, 68000 mendapatkan nombor vektor daripada peranti penyampuk. Kitar IACK dikenali oleh peranti luar dengan kod 111 pada FC2, FC1 dan FC0 dan tahap sampukan di IPL2/1/0 dikeluarkan semula di A3, A2 dan A1. Setelah sampukan diproses, RTE akan mengembalikan SR lama (seterusnya topeng sampukan lama dikembalikan). 74LS138 A3 A2 7 IACK7* 68000 A2 A1 6 IACK6* A1 A0 5 IACK5* 4 IACK4* +5 V E1 3 IACK3* FC0 2 IACK2* FC1 E2A 1 IACK1* FC2 0 AS* E2B 
 Rajah 12.9: Penyahkod kitar akuan sampukan. 12.9 Sampukan Tervektor Ada 3 pilihan untuk peranti luar membalas kitar IACK iaitu dengan mengaktifkan isyarat DTACK*, VPA* atau BERR*. Jika peranti berupaya memberikan nombor vektor, ia meletakkan nombor vektor di D7-D0 serta memberikan DTACK* dan menyebabkan kitar IACK tamat. Ini ialah sampukan tervektor. Setelah periferal memberi nombor vektor, pemproses mendarabnya dengan 4 untuk merujuk jadual vektor. Sebenarnya, sebarang nilai 8 bit boleh diberi, tetapi yang disyorkan ialah vektor pengguna iaitu 64-255 (sejumlah 192 vektor). Kesemua serpihan periferal siri 68000 (spt PI/T 68230 dan DUART 68681) mempunyai daftar vektor sampukan (IVR17 ) yang mengandungi nombor vektor untuk dikeluarkan semasa kitar IACK. Semasa reset, IVR mengandungi $0F. Jika IVR tidak diubah dengan nilai lain, nilai $0F diletak di bas data semasa kitar IACK, bersamaan dengan kekecualian vektor sampukan belum dimemulakan. Kaedah sampukan tervektor pemproses 68000 memberikan keupayaan tinggi kepada sistem kerana sesuatu peranti boleh memberikan nilai vektor yang berbeza bergantung kepada operasi yang dikehen- daki. Contohnya, peranti antaramuka selari/pemasa MC68230 mempunyai dua IVR, satu untuk liang selari dan satu untuk pemasa. Jika antaramuka selari atau pemasa perlukan perhatian, kedua-duanya memberikan sampukan melalui talian sampukan yang sama. Semasa kitar akuan sampukan, bahagian yang berkenaan akan mengeluarkan nilai IVRnya dan pemproses terus memberi khidmat kepada seksyen 16 interrupt acknowledge cycle 17 interrupt vector registerIf you found this book useful, donate to the Gaza fund
  • 204. Bab 12. Kekecualian & Sampukan Nombor Memory 68000 IRQ1 Serpihan I/O vektor Jadual Vektor Address IRQ2 2 1 0 000000 keutamaan Pengekod IPL0 IRQ3 IRQ 1 000004 IPL1 IRQ4 2 000008 IRQ5 IPL2 IRQ6 IRQ7 31 00007C 6 32 000080 IACK1 7 3a IACK2 Pengekod A3 C 4 IACK3 3-ke-8 A2 B IACK 128 000200 IACK4 A1 A IACK5 129 000204 IACK6 IACK7 Daftar Vektor E1 E2 Sampukan 3b 255 0003FC FC0 Nombor vektor FC1 FC2 8 Alamat Rutin Servis Sampukan 5 Laksanakan D0-D7 If you found this book useful, donate to the Gaza fund Nombor vektor Rutin Servis DTACK Sampukan DTACK hingga tamat RTE 
 Rajah 12.10: Pemprosesan sampukan.200
  • 205. 12.9. Sampukan Tervektor 201 Jadual 12.8: Vektor untuk Sampukan Autovektor Sampukan Nombor Vektor Alamat Vektor Autovektor Tahap 1 25 $000064 Autovektor Tahap 2 26 $000068 Autovektor Tahap 3 27 $00006C Autovektor Tahap 4 28 $000070 Autovektor Tahap 5 29 $000074 Autovektor Tahap 6 30 $000078 Autovektor Tahap 7 31 $00007C berkenaan sahaja. Pemproses tidak perlu menyemak siapa di antara kedua-duanya yang menyampuk dan ini menjimatkan masa. Selain menjimatkan mas, ciri ini membolehkan lebih daripada 7 peranti periferal disambungkan ke pemproses, suatu keperluan dalam sistem-sistem besar. Sampukan AutoVektor Periferal siri pemproses famili 6800 tidak berupaya membekal nombor vektor seperti yang boleh dilakukan oleh periferal famili 68000. Namun begitu, penggunaannya menjimatkan kos dan boleh memudahkan rekabentuk litar. Pereka litar boleh menambah litar luar yang membekal nombor vektor tetapi ini tidak munasabah kerana ini menjadikan litar kompleks. Untuk periferal 6800, kaedah sampukan yang boleh diguna ialah sampukan autovektor. Dalam sampukan autovektor, nombor vektor dijana secara automatik bergantung tahap sampukan. Dengan memberi VPA* semasa kitar IACK, pemproses menganggap periferal memohon sampukan autovektor. Pemproses 68000 akan menjana nombor vektor 25 hingga 31 bersamaan tahap sampukan IRQ1*- IRQ7*. Contohnya, jika sampukan dipohon melalui IRQ2* diikuti oleh VPA* semasa kitar IACK, nombor vektor 26 dijana oleh 68000. Alamat rutin pengendali sampukan dibaca daripada alamat 26*4 = $000068. Jika lebih daripada satu permohonan sampukan autovektor dilakukan pada talian yang sama serentak, 68000 tak dapat membezakan mana satukah peranti penyampuk. Pemproses mesti meninjau daftar status dalam setiap periferal (pada tahap sampukan yang sama) untuk menentukan punca sampukan. Jika DTACK* atau VPA* tidak dikembalikan semasa kitar IACK, isyarat BERR* mesti diberi untuk memaksa kekecualian sampukan rambang. Sampukan Rambang18 Semasa kitar akuan sampukan, jika tiada peranti yang mengaktifkan DTACK* atau VPA*, suatu litar sepatutnya mengaktifkan BERR* untuk menamatkan penantian vektor. Ralat bas ini berbeza dengan ralat bas biasa. Selepas kekecualian ini dikesan, pemproses menjalankan turutan pemprosesan kekecualian biasa termasuk menindan hanya PC dan SR. Sampukan rambang boleh terjadi akibat gangguan elektrikal. Sampukan Tidak Dimemulakan19 Semasa kitar akuan sampukan, peranti yang menyampuk menyediakan suatu nombor vektor dan mengaktifkan DTACK*, VPA* atau BERR*. Peranti periferal dari Motorola (dan yang menurut piawaiannya) mengandungi daftar vektor sampukan (IVR20 ) yang diisikan dengan nombor vektor yang 18 spurious interrupt 19 uninitialized interrupt 20 interrupt vector registerIf you found this book useful, donate to the Gaza fund
  • 206. 202 Bab 12. Kekecualian & Sampukan dikehendaki. Jika daftar ini tidak dimemulakan, ia mengandungi nilai 15 bersamaan dengan vektor sampukan tidak dimemulakan. Apabila peranti periferal menyerahkan nombor ini kerana IVR tidak diisi dengan nilai lain menyediakan kaedah yang seragam untuk memulihkan sistem daripada ralat pengaturcaraan.If you found this book useful, donate to the Gaza fund
  • 207. Indeks ASCII, 90 BCC, 85 BCS, 85 daftar BEQ, 85 CCR, 14 BNE, 85 SR, 15 BRA, 82 DMA, 138 BTST, 88 DRAM, 151 BVC, 86 BVS, 86 EASy68K, 33, 40, 41 CMP, 86 emulator, 34 JMP, 81 EPROM, 33 TRAP, 110 Flight68K, 33, 39 TST, 88 Freescale, 169 System-on-Chip, 12 I/O terpeta ingatan, 168 input/output, 108 Intel, 168 isyarat BERR*, 135 BG*, 138 BR*, 138 DTACK*, 141 HALT*, 134 RESET*, 134 VPA*, 141 JEDEC, 152 keadaan tunggu, 144 kod mesin, 23 logik gam, 155 mikropengawal, 11 mod alamat, 21 penimbal, 175 penyahkod, 158 RAM, 149 ROM, 149, 150 selak, 171 sistem terbenam, 2, 202 SRAM, 151 suruhan 203If you found this book useful, donate to the Gaza fund