added syscall and jalr to assembler, also fixed v1 value
parent
a7979dfeab
commit
0989bd54f0
20
assembler.rb
20
assembler.rb
|
@ -6,7 +6,7 @@ def r0() 0 end # zero
|
||||||
def at() 1 end # assembler temporary
|
def at() 1 end # assembler temporary
|
||||||
|
|
||||||
# subroutine return values, may be changed by subroutines
|
# subroutine return values, may be changed by subroutines
|
||||||
def v0() 2 end ; def v0() 3 end
|
def v0() 2 end ; def v1() 3 end
|
||||||
|
|
||||||
# subroutine arguments, may be changed by subroutines
|
# subroutine arguments, may be changed by subroutines
|
||||||
def a0() 4 end ; def a1() 5 end
|
def a0() 4 end ; def a1() 5 end
|
||||||
|
@ -193,6 +193,24 @@ class Assembler
|
||||||
word op
|
word op
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# TODO: actually encode "comment" argument
|
||||||
|
def syscall(comment)
|
||||||
|
# iiiiii ccccc ccccc ccccc ccccc iiiiii
|
||||||
|
op = 0b000000_00000_00000_00000_00000_001100
|
||||||
|
word op
|
||||||
|
end
|
||||||
|
|
||||||
|
# TODO: expose the return address storage register
|
||||||
|
# NOTE: cannot use the same register for both operands
|
||||||
|
def jalr(reg)
|
||||||
|
# jumps to addr in j and stores return adr in r
|
||||||
|
# iiiiii jjjjj ----- rrrrr ----- iiiiii
|
||||||
|
op = 0b000000_00000_00000_00000_00000_001001
|
||||||
|
op |= (reg & 0b11111) << 21
|
||||||
|
op |= (ra) << 11 # ra
|
||||||
|
word op
|
||||||
|
end
|
||||||
|
|
||||||
# # # PSEUDO-INSTRUCTIONS # # #
|
# # # PSEUDO-INSTRUCTIONS # # #
|
||||||
def nop
|
def nop
|
||||||
word 0x00000000
|
word 0x00000000
|
||||||
|
|
Loading…
Reference in New Issue