Prosesor TTA. Bagian 2

Kata pengantar


Ini adalah bagian kedua dari upaya untuk membuat prosesor TTA di Logisim. Dalam proses pembuatan, ada kebutuhan untuk memori tambahan di mana beberapa nilai menengah dapat disimpan, dan untuk memori ini ada kebutuhan untuk mengubah perangkat kontrol.

Bagian 1
Bagian 2

Memori tambahan


Karena perintah dan konstanta sulit untuk disimpan dalam memori, akan sulit untuk membuat memori yang dapat dialamatkan sepenuhnya, sehingga Anda memerlukan sesuatu yang lebih sederhana, tumpukan atau antrian yang baik untuk ini.

Antriannya tidak terlihat sangat nyaman, dan bahasa Forth ditemukan untuk stack , yang ingin saya tulis sebagai kompiler. Kami menerapkan tumpukan sebagai perangkat fungsional:


Kelihatannya membingungkan, tetapi pada kenyataannya, perangkat ini melakukan fungsi sederhana: penghitung menunjuk ke sel berikutnya, ketika data tiba, mereka ditulis ke sel yang ditunjukkan oleh penghitung dan meningkat, ketika data diambil, mereka diberikan dari sel sebelumnya ke satu ditunjukkan oleh penghitung dan penghitung berkurang. Kemudian masalah lain muncul, bagaimana Anda tahu data apa yang diambil dari tumpukan, Anda perlu bendera untuk ini, maka perangkat kontrol (UU) akan terlihat seperti ini:


Untuk kemudahan koneksi, output akan terletak di sebelah kiri, dan input di sebelah kanan, kemudian unit kontrol dan perangkat fungsional lainnya (stack, adder, AND, OR, register, dll.):


Mari kita susun sebuah rangkaian sederhana dengan memori perintah, dua tumpukan, dua register, satu penambah, negator, Dan, Atau dan beberapa konstanta (misalkan 5):


Tetap membuat memori untuk konstanta dan Anda dapat menulis compiler Forth, tetapi untuk sekarang mari kita coba menulis beberapa kata langsung dari memori.

Dup


Kata dup melakukan hal yang sederhana: duplikat data sel atas tumpukan kembali ke tumpukan. Pertama, Anda perlu memuat, misalnya, konstanta kami (in6 -> o1) ke stack, sekarang kami memiliki data di sel pertama stack, tetapi ketika Anda mengambil data, itu semacam menghilang dari stack, apa yang harus saya lakukan? Ada register untuk ini, memuat sel stack ke dalam register dan menyimpannya di sana, setelah itu kita memuatnya dua kali, dengan demikian menduplikatnya, kodesemu terlihat seperti ini:

1. in6 -> o1 // Memuat konstanta ke dalam stack
2. in1 -> o3 // Muat sel dari tumpukan ke register
3. in3 -> o1
4. in3 -> o1 // Dua kali memuat konten register ke tumpukan.

Itu saja, dalam memori terlihat seperti ini:


Dan setelah eksekusi, tumpukan terlihat seperti ini:


Seperti yang diharapkan, dua konstanta kami. Itu saja, dengan cara serupa Anda bisa melakukan drop, swap, membusuk, dll.

Terima kasih atas perhatiannya, semoga tidak membosankan!

Github Link: GitHub

All Articles