Pemproses menjalankan atur cara dengan mengulang satu kitaran: fetch (ambil) arahan seterusnya daripada memori, decode (nyahkod) arahan itu, kemudian execute (laksana) arahan itu. Jejak kitaran ini menunjukkan apa yang disimpan daftar selepas setiap langkah.
Kemahiran ini tergolong dalam perkakasan dan pemprosesan. Ia asas kepada pelajaran seterusnya tentang kegunaan setiap daftar, dan berkait rapat dengan jadual jejak dalam soalan algoritma.
Apa yang berlaku dalam setiap peringkat?
Kita menggunakan model yang dipermudah dengan lima daftar: pembilang atur cara (PC), daftar alamat memori (MAR), daftar data memori (MDR), daftar arahan semasa (CIR) dan penumpuk (ACC).
Fetch
- Alamat dalam PC disalin ke MAR.
- PC ditambah 1, supaya menunjuk kepada arahan seterusnya.
- Kandungan lokasi memori dalam MAR disalin ke MDR.
- Kandungan MDR disalin ke CIR.
Decode. Unit kawalan (control unit) memahami maksud arahan dalam CIR: operasi apa, dan alamat mana.
Execute. Arahan dilaksanakan. Arahan muat (load) menyalin nilai ke dalam ACC, arahan aritmetik menggunakan unit logik aritmetik (ALU) dan meninggalkan hasil dalam ACC, dan arahan simpan (store) menyalin ACC ke memori.
Dalam pseudokod, fetch kelihatan seperti ini:
MAR ← PC
PC ← PC + 1
MDR ← Memory[MAR]
CIR ← MDR
Contoh berlangkah
Memori menyimpan atur cara dan data ini. LDA 200 memuatkan nilai pada alamat 200 ke dalam ACC, ADD 201 menambah nilai pada alamat 201 kepada ACC, STO 202 menyimpan ACC pada alamat 202, dan END berhenti.
| Alamat | Kandungan |
|---|---|
| 100 | LDA 200 |
| 101 | ADD 201 |
| 102 | STO 202 |
| 103 | END |
| 200 | 7 |
| 201 | 5 |
| 202 | 0 |
PC bermula pada 100. ACC kosong pada permulaan, ditunjukkan dengan sengkang.
| Langkah | PC | MAR | MDR | CIR | ACC |
|---|---|---|---|---|---|
| Mula | 100 | - | - | - | - |
| Fetch 1 | 101 | 100 | LDA 200 | LDA 200 | - |
| Execute 1 | 101 | 200 | 7 | LDA 200 | 7 |
| Fetch 2 | 102 | 101 | ADD 201 | ADD 201 | 7 |
| Execute 2 | 102 | 201 | 5 | ADD 201 | 12 |
| Fetch 3 | 103 | 102 | STO 202 | STO 202 | 12 |
| Execute 3 | 103 | 202 | 12 | STO 202 | 12 |
| Fetch 4 | 104 | 103 | END | END | 12 |
Semak nilai utama dua kali. Dalam Execute 2, ALU menambah 7 + 5 = 12. Dalam Execute 3, nilai 12 ditulis pada alamat 202, jadi lokasi 202 berubah daripada 0 kepada 12.
Setiap fetch membaca alamat yang disimpan PC sebelum ia ditambah: 100, 101, 102, 103.
Kitaran yang sama dalam Python, menggunakan kamus (dictionary) sebagai memori:
memory = {100: "LDA 200", 101: "ADD 201", 102: "STO 202", 103: "END",
200: 7, 201: 5, 202: 0}
pc = 100
acc = 0
while True:
mar = pc
pc = pc + 1
mdr = memory[mar]
cir = mdr
op = cir.split()[0]
if op == "END":
break
address = int(cir.split()[1])
if op == "LDA":
acc = memory[address]
elif op == "ADD":
acc = acc + memory[address]
elif op == "STO":
memory[address] = acc
print(memory[202]) # 12
Ini model pengajaran, bukan cara pemproses sebenar dibina, dan kotak pasir penaakulan Python yang selamat membolehkan anda menjalankan contoh kecil seperti ini.
Kesilapan yang perlu diawasi
Kesilapan yang kerap berlaku ialah mengemas kini PC selepas peringkat execute, atau membiarkannya pada alamat arahan yang sedang dijalankan.
Baris Fetch 1 yang salah: PC 100, MAR 100, MDR LDA 200, CIR LDA 200
Pelajar membiarkan PC pada 100 kerana “di situlah arahan itu berada”.
PC ditambah semasa fetch, jadi selepas Fetch 1 ia sudah menyimpan 101. Kesilapan ini merebak: setiap MAR kemudian salah satu, dan seluruh jejak gagal. Betulkan dengan menulis penambahan PC sebagai baris kedua dalam setiap fetch.
Semak kendiri
1. Pada permulaan satu fetch, PC menyimpan 300. Tulis nilai MAR dan PC selepas dua langkah pertama fetch.
Lihat jawapan
Langkah 1 menyalin PC ke MAR, jadi MAR = 300. Langkah 2 menambah PC, jadi PC = 301.
2. Daftar manakah menyimpan arahan semasa unit kawalan menyahkodnya?
Lihat jawapan
CIR (daftar arahan semasa). MDR hanya menyimpannya sebentar dalam perjalanan dari memori.
3. Arahan JMP 150 disimpan pada alamat 120. Nyatakan PC selepas fetch dan selepas execute.
Lihat jawapan
Selepas fetch, PC = 121. Melaksanakan arahan lompat menulis ganti PC dengan alamat baharu, jadi selepas execute PC = 150. Fetch seterusnya menggunakan MAR = 150.
Ke mana selepas ini
Setelah boleh menjejak kitaran ini, kaitkan setiap daftar dengan peranannya dan cuba set latihan perkakasan dan pemprosesan. Pelatih jejak pseudokod terhad berguna untuk membina tabiat melangkah nilai yang sama.
Sesetengah pelajar mengikut jejak di dalam kelas tetapi hilang arah apabila berseorangan di atas kertas kosong. Guru dalam tuisyen Computer Science dalam talian satu dengan satu boleh menjejak bersama anda, satu daftar demi satu, sehingga coraknya mantap.