Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # Overwrites existing exception handler
- .ktext 0x80000180
- .set noat # tell assembler not to use $at (assembler temporary)
- # and hence not to complain when we do
- move $k0, $at # save $at in $k0
- # $k0 and $k1 are reserved for
- # OS and Exception Handling
- # programmer should not use them, so not saved
- .set at # tell assembler it may use $at again
- li $a0, 0xFFFF0004 # Receiver data address (interrupt based, so don't need to check Receiver control)
- lw $v0, 0($a0) # Receiver data
- addi $t1,$0,'x'
- addi $t2,$0,'p'
- addi $t3,$0,'o'
- addi $t4,$0,'e'
- addi $t5,$0,'f'
- la $t6,player1win
- la $t7,player2win
- la $t8,printtabuleiro
- la $t9,printwinsandpoints
- #lb $t1,0($t0) #x
- #lb $t2,4($t0) #p
- #lb $t3,8($t0) #o
- #lb $t4,12($t0) #e
- #lb $t5,16($t0) #f
- loopx: bne $t1,$v0,loopp #primeiro vencedor ganha
- jalr $t6
- loopp: bne $t2,$v0,loopo #estado atual do tabuleiro
- jalr $t8
- loopo: bne $t3,$v0,loope #segundo vencedor ganha
- jalr $t7
- loope: bne $t4,$v0,loopf #numero de partidas ganhas
- jalr $t9
- loopf: bne $t5,$v0,loop6 #finalizar programa
- li $v0,10
- syscall
- loop6: li $v0,10
- syscall
- eret # return from exception, PC <- EPC
- .text
- .globl main
- main:
- li $a0, 0xFFFF0000 # Receiver control
- lw $t0, 0($a0)
- ori $t0, 0x02 # set bit 1 to enable input interrupts
- # such a-synchronous I/O (handling of keyboard input in this case)
- # this is much more efficient than the "polling" we use for output
- # In particular, it does not "block" the main program in case there is no input
- sw $t0, 0($a0) # update Receiver control
- mfc0 $t0, $12 # load coprocessor0 Status register
- ori $t0, 0x01 # set interrupt enable bit
- forever:
- j forever
- player1:
- #Imprime a label player1_msg
- li $v0,4
- la $a0,player1_msg
- syscall
- li $v0,5 #Scan da posição
- syscall
- addi $v0,$v0,-1 #remove 1, para poder ser de 1-9 e não de 0-8(input mais intuitivo)
- mul $t0,$v0,4 #multiplica por 4 por causa da memora c inteiros saltar de 4 em 4
- move $a0,$v0
- jal posicaovalida
- beq $v0,0,posinvalidap1
- li $t1,1 #t1=1=>x
- sw $t1, tabuleiro($t0) #guarda na posição obtida do output
- jal printtabuleiro
- j player2
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement