上完編譯器,最後還要用 bison/flex 產生一個compiler ,生成 mips 組合語言真的有趣
SPIM: A MIPS32 Simulator
http://spimsimulator.sourceforge.net/
https://github.com/x213212/mipsgenerator
test case
WHILE() {
int n;
n = 1;
while(n > 0)
{
write 1;
}
}
.data
n: .word 0
.text
main:
la $t0, n
li $t1, 1
sw $t1, 0($t0)
#while
L1: # endif2
la $t0, n
lw $t0, 0($t0)
li $t1, 0
bgt $t0, $t1, L2
b L3
L2: # then
li $t0, 1
move $a0, $t0
li $v0, 1
syscall
b L1
L3:
Arith4()
{
write (5 + 2) * -14 / -2 % 2
;
}
.data
.text
main:
li $t0, 5
li $t1, 2
add $t0, $t0, $t1
li $t1, 14
neg $t1, $t1
mul $t0, $t0, $t1
li $t1, 2
neg $t1, $t1
div $t0, $t0, $t1
li $t1, 2
rem $t0, $t0, $t1
move $a0, $t0
li $v0, 1
syscall
sum()
{
int n;
int s;
read n;
if(n < 0) {
write -1;
exit;
} else {
s = 0;
while(n > 0){
s = s + n;
n = n - 1;
}
}
write s;
}
.data
n: .word 0
s: .word 0
.text
main:
li $v0, 5
syscall
la $t0, n;
sw $v0, 0($t0)
la $t0, n
lw $t0, 0($t0)
li $t1, 0
blt $t0, $t1, L1
b L2
L1: # then
li $t0, 1
neg $t0, $t0
move $a0, $t0
li $v0, 1
syscall
li $v0, 10
syscall
b L3
L2: # else
la $t0, s
li $t1, 0
sw $t1, 0($t0)
#while
L4: # endif2
la $t0, n
lw $t0, 0($t0)
li $t1, 0
bgt $t0, $t1, L5
b L3
L5: # then
la $t0, s
la $t1, s
lw $t1, 0($t1)
la $t2, n
lw $t2, 0($t2)
add $t1, $t1, $t2
sw $t1, 0($t0)
la $t0, n
la $t1, n
lw $t1, 0($t1)
li $t2, 1
sub $t1, $t1, $t2
sw $t1, 0($t0)
b L4
L6:
L3:
la $t0, s
lw $t0, 0($t0)
move $a0, $t0
li $v0, 1
syscall
or
or
By clicking below, you agree to our terms of service.
New to HackMD? Sign up
Syntax | Example | Reference | |
---|---|---|---|
# Header | Header | 基本排版 | |
- Unordered List |
|
||
1. Ordered List |
|
||
- [ ] Todo List |
|
||
> Blockquote | Blockquote |
||
**Bold font** | Bold font | ||
*Italics font* | Italics font | ||
~~Strikethrough~~ | |||
19^th^ | 19th | ||
H~2~O | H2O | ||
++Inserted text++ | Inserted text | ||
==Marked text== | Marked text | ||
[link text](https:// "title") | Link | ||
 | Image | ||
`Code` | Code |
在筆記中貼入程式碼 | |
```javascript var i = 0; ``` |
|
||
:smile: | ![]() |
Emoji list | |
{%youtube youtube_id %} | Externals | ||
$L^aT_eX$ | LaTeX | ||
:::info This is a alert area. ::: |
This is a alert area. |
On a scale of 0-10, how likely is it that you would recommend HackMD to your friends, family or business associates?
Please give us some advice and help us improve HackMD.
Do you want to remove this version name and description?
Syncing