Καλησπέρα!

Έχω ένα εργαστήριο αύριο στην assemply και πρέπει να κάνω ένα πρόγραμμα το οποίο μέσω ενώς interrupt handler να διαβάζει έναν χαρακτήρα
από το πληκτρολόγιο και μετά να τον εμφανίζει στην οθόνη. Μας έχουν πει στον μάθημα ότι ο καταχωρητής $12 είναι ο status register, ο $13 ο
cause register και ο $14 EPC. Δεν έχω καταλάβει όμως πως να τους χρησιμοποιήσω για να κάνω αυτήν την δουλειά που θέλω. Επίσης μας είπαν ότι
το bit 11 στον $12 είναι ο receiver controller για το πληκτρολόγιο και αν το αλλάξω από 0 σε 1 τότε έχω ενεργοποιήση την συσκευή του πληκτρολογίου να μπορεί να διακόπτει τον επεξεργαστή. Σε παραδείγματα είδα αυτό το πράγμα "mfc0 $k0, $12". Ωραία, αυτό μεταφέρει κάτι (δεν ξέρω αν είναι διεύθηνση η κάτι άλλο) και μετά κάπως με κάποιο συγκεκριμένω andi αλλάζουν την τιμή του $k0 και την ξανά επιστρέφουν στον
$12 με την εντολή "mtc0 $k0, $12". Λογικά με το andi κάπως αλλάζουν το bit 11 απο 0 σε 1 αν δεν κάνω λάθος. Μετά είδα κάτι για .kdata και .ktext
μέσα στα οποία πρέπει να γίνεται το interupt handling.

Γενικά τα έχω κάνει "κουβάρει" στο μυαλό μου.

Μπορεί κάποιος να μου εξηγήσει την διαδικασία και να μου δώσει σε κώδικα ένα παράδειγμα ανάγνωσης και εμφάνισης χαρακτήρα χρησιμοποιόντας
interrupt handler;

Ευχαριστώ!

PS:
Έχω ήδη καταλάβει την διαδικασία του polling, και την έχω υλοποιήση ως εξής:

Κώδικας:
#This function waits until a key press
#and the it stores the character tha has
#been pressed into the register $v0.
read_char:
			
	li $t0, 0xffff0000 #Load keyboard control memory.
	
	
	#Polling
	rd_poll:
		lw $v0, 0($t0) #Load the ready bit.
		
	beq $v0, $zero, rd_poll #If ready is zero continue to wait.
	
	lw  $v0, 4($t0) #Else read the character from keyboard.
	
	j $ra
	

	
#This function waits until the trasmission is ready
# and then it prints into the screen the character
# which is inside the register $a0($a0 is parameter of this function).
write_char:
	li $t0, 0xffff0008 #Load display ready bit.
	
	#Polling
	wr_poll:
		lw $v0, 0($t0) #Read the ready bit.
		
	beq $v0, $zero, wr_poll #Not ready, so continue waiting.
	sw $a0, 4($t0) #Display is ready so print the char.
	
	j $ra