Skip to content

Instantly share code, notes, and snippets.

@Hogeyama
Last active February 10, 2017 18:04
Show Gist options
  • Select an option

  • Save Hogeyama/4ada42c79d37c908f6d7e2a95bf531a6 to your computer and use it in GitHub Desktop.

Select an option

Save Hogeyama/4ada42c79d37c908f6d7e2a95bf531a6 to your computer and use it in GitHub Desktop.

命令

opcode mnemonic operands info
000000 sqrt f f
000001 move r r
000010 neg r r
000011 add r r r
000100 addi r r i
000101 sub r r r
000110 subi r r i
000111 mult r r r
001000 multi r r i
001001 div r r r
001010 divi r r i
001011 mov.s f f
001100 neg.s f f
001101 add.s f f f
001110 sub.s f f f
001111 mul.s f f f
010000 div.s f f f
010001 srl r r r
010010 sll r r r
010011 li r i
010100 la r l 1
010101 lwl r l
010110 lwr r r i
010111 l.sl f l
011000 l.sr f r i
011001 sw r r i
011010 s.s f r i
011011 beq r r l
011100 bne r r l
011101 blt r r l
011110 bgt r r l
011111 c.eq.s f f l
100000 c.le.s f f l
100001 c.lt.s f f l
100010 j l
100011 jr r
100100 jal l
100101 jalr r
100110 srli r r i
100111 slli r r i 1
101000 print_c r
101001 read_i r
101010 read_f f
101011 beqi r i' l
101100 and r r r
101101 or r r r
101110 xor r r r
101111 andi r r i
110000 ori r r i
110001 xori r r i
110010 exit
110011 swap r r
110100 swap.s f f
110101 select r r r r
110110 select.s f r f f
110111 cmp r r r p
111000 cmpi r r i'p
111001 cmp.s r f f p
111010 cvt.s.w f r mov f←r
111011 cvt.w.s r f mov r←f
111100 madd.s f f f f muladd
111101 bnei r i' l
111110 blti r i' l
111111 bgti r i' l
  • 1 = レイトレでは使われない
  • muladd f1 f2 f3 f4 = f1 := f2 + f3 * f4

各operandのbit幅

kind n 説明
opcode 6 オペコード
r 5 汎用レジスタ
f 5 浮動小数点レジスタ
l 16 ラベル(16bit unsigend)
i 16 即値 (16bit signed)
i' 5 即値 ( 5bit signed)
p 3 述語

p

アセンブリでの表現 機械語での表現
eq 000
ne 001
le 010
ge 011
lt 100
gt 101

例: \tcmpi\teq,$v0,$v1,3

その他注意

  • 余ったbitはdon't care

  • labelは2種類ある(float定数用, jump用)のでそれぞれlf,liと書き分けてます lに統合しました

  • 即値はsigned short, labelはunsigend short

  • mipsだとb系は相対ジャンプ, j系は絶対ジャンプと決まってるけど全部絶対ジャンプにします(2^16=65536あれば十分のはず)

レジスタ

dec bin mnemonic
00 00000 $zero
01 00001 $at
02 00010 $v0
03 00011 $v1
04 00100 $a0
05 00101 $a1
06 00110 $a2
07 00111 $a3
08 01000 $t0
09 01001 $t1
10 01010 $t2
11 01011 $t3
12 01100 $t4
13 01101 $t5
14 01110 $t6
15 01111 $t7
16 10000 $s0
17 10001 $s1
18 10010 $s2
19 10011 $s3
20 10100 $s4
21 10101 $s5
22 10110 $s6
23 10111 $s7
24 11000 $t8
25 11001 $t9
26 11010 $k0
27 11011 $k1
28 11100 $gp
29 11101 $sp
30 11110 $fp
31 11111 $ra

2016-12-20

  • sin,cos,atan,floor,sqrt,ftoi,itof,print_bを削除

  • beqi,and(i),or(i),xor(i),cmp系,swap系,select系,cvt系を追加

2016-12-26

  • fix typo

  • わかりにくい記述を修正

  • i'の定義を8bit unsignedから5bit unsignedに変更

2017-2-6

  • bnei,blti,bgti,madd.sを追加

2017-2-7

  • srl,sllの第二オペランドをレジスタに変更
  • srli,slliを追加
  • 代わりにprint_i, print_fを削除

2017-2-10

  • cmp系命令の述語の位置を変更
  • sqrtを追加
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment