[AC1] Finish aula03
Signed-off-by: TiagoRG <tiago.rgarcia@ua.pt>
This commit is contained in:
parent
6706fad2e4
commit
57368425d8
|
@ -0,0 +1,51 @@
|
|||
.data
|
||||
str1: .asciiz "Introduza um numero: "
|
||||
str2: .asciiz "\nValor em codigo gray: "
|
||||
str3: .asciiz "\nValor em binario: "
|
||||
.eqv print_int, 1
|
||||
.eqv print_string, 4
|
||||
.eqv read_int, 5
|
||||
.text
|
||||
.globl main
|
||||
|
||||
# Mapa de registos
|
||||
# gray: $t0
|
||||
# bin: $t1
|
||||
# mask: $t2
|
||||
|
||||
main: li $v0, print_string
|
||||
la $a0, str1
|
||||
syscall # print_string("Introduza um numero: ");
|
||||
|
||||
li $v0, read_int
|
||||
syscall # read_int();
|
||||
move $t0, $v0 # gray = read_int();
|
||||
|
||||
srl $t2, $t0, 1 # mask = gray >> 1;
|
||||
move $t1, $t0 # bin = gray;
|
||||
|
||||
while: beq $t2, 0, done # while (mask != 0) {
|
||||
|
||||
xor $t1, $t1, $t2 # bin = bin ^ mask;
|
||||
srl $t2, $t2, 1 # mask = mask >> 1;
|
||||
|
||||
j while # }
|
||||
|
||||
done:
|
||||
li $v0, print_string
|
||||
la $a0, str2
|
||||
syscall # print_string("\nValor em codigo gray: ");
|
||||
|
||||
li $v0, print_int
|
||||
move $a0, $t0
|
||||
syscall # print_int(gray);
|
||||
|
||||
li $v0, print_string
|
||||
la $a0, str3
|
||||
syscall # print_string("\nValor em binario: ");
|
||||
|
||||
li $v0, print_int
|
||||
move $a0, $t1
|
||||
syscall # print_int(bin);
|
||||
|
||||
jr $ra
|
|
@ -0,0 +1,55 @@
|
|||
.data
|
||||
str1: .asciiz "Introduza dois numeros: "
|
||||
str2: .asciiz "Resultado: "
|
||||
.eqv print_int, 1
|
||||
.eqv print_string, 4
|
||||
.eqv read_int, 5
|
||||
.text
|
||||
.globl main
|
||||
|
||||
# Mapa de registos
|
||||
# $t0: res
|
||||
# $t1: mdor
|
||||
# $t2: mdo
|
||||
# $t3: i
|
||||
|
||||
main: la $a0, str1
|
||||
li $v0, print_string
|
||||
syscall # print_string("Introduza dois numeros: ");
|
||||
|
||||
li $v0, read_int
|
||||
syscall # read_int()
|
||||
move $t1, $v0 # mdor = read_int();
|
||||
andi $t1, $t1, 0x0000FFFF # mdor = mdor & 0x0000FFFF;
|
||||
|
||||
li $v0, read_int
|
||||
syscall # read_int()
|
||||
move $t2, $v0 # mdo = read_int();
|
||||
andi $t2, $t2, 0x0000FFFF # mdo = mdo & 0x0000FFFF;
|
||||
|
||||
li $t0, 0 # res = 0;
|
||||
li $t3, 0 # i = 0;
|
||||
|
||||
while: beq $t1, 0, endw # while (mdor != 0)
|
||||
bge $t3, 16, endw # while (i < 4) {
|
||||
|
||||
if: andi $t4, $t1, 0x00000001 # $t4 = mdor & 0x00000001;
|
||||
beq $t4, 0, else
|
||||
|
||||
add $t0, $t0, $t2 # res = res + mdo;
|
||||
|
||||
else: sll $t2, $t2, 1 # mdo = mdo << 1;
|
||||
srl $t1, $t1, 1 # mdor = mdor >> 1;
|
||||
|
||||
addi $t3, $t3, 1 # i++;
|
||||
j while # }
|
||||
|
||||
endw: la $a0, str2
|
||||
li $v0, print_string
|
||||
syscall # print_string("Resultado: ");
|
||||
|
||||
li $v0, print_int
|
||||
move $a0, $t0 # print_int(res);
|
||||
syscall
|
||||
|
||||
jr $ra # return
|
|
@ -0,0 +1,13 @@
|
|||
# Alinea b)
|
||||
|
||||
| mdor | mdo | i | res | |
|
||||
|:----:|:----:|:-:|:----:|:-------------------|
|
||||
| 0x0B | 0x06 | 0 | 0x00 | Valores iniciais |
|
||||
| 0x05 | 0x0C | 1 | 0x06 | Fim da 1ª iteração |
|
||||
| 0x02 | 0x18 | 2 | 0x12 | Fim da 2ª iteração |
|
||||
| 0x01 | 0x30 | 3 | 0x12 | Fim da 3ª iteração |
|
||||
| 0x00 | 0x60 | 4 | 0x42 | Fim da 4ª iteração |
|
||||
|
||||
# Alinea c)
|
||||
|
||||
Tudo o que é necessário fazer é alterar a condição do `if` para comparar o `i` a 16 em vez de 4 ([linha 34 no código de assembly](https://github.com/TiagoRG/uaveiro-leci/tree/master/2ano/1semestre/ac1/aula03/ex2-addicional.asm))
|
Loading…
Reference in New Issue