Skip to content

Commit

Permalink
feat(vmtranslator): finished
Browse files Browse the repository at this point in the history
  • Loading branch information
qazwsxedckll committed Feb 5, 2024
1 parent b44b7d0 commit cb6c4d9
Show file tree
Hide file tree
Showing 5 changed files with 464 additions and 58 deletions.
10 changes: 5 additions & 5 deletions vmtranslator/code_writer.go
Original file line number Diff line number Diff line change
Expand Up @@ -229,16 +229,16 @@ func (c *CodeWriter) WriteCall(functionName string, numArgs int) {
buffer.WriteString("@THAT\n")
buffer.WriteString("D=M\n")
push(&buffer)
// ARG = SP - (n + 5)
buffer.WriteString("@" + strconv.Itoa(numArgs+5) + "\n")
buffer.WriteString("D=D-A\n")
buffer.WriteString("@ARG\n")
buffer.WriteString("M=D\n")
// LCL = SP
buffer.WriteString("@SP\n")
buffer.WriteString("D=M\n")
buffer.WriteString("@LCL\n")
buffer.WriteString("M=D\n")
// ARG = SP - (n + 5)
buffer.WriteString("@" + strconv.Itoa(numArgs+5) + "\n")
buffer.WriteString("D=D-A\n")
buffer.WriteString("@ARG\n")
buffer.WriteString("M=D\n")
// goto function
buffer.WriteString("@" + functionName + "\n")
buffer.WriteString("0;JMP\n")
Expand Down
4 changes: 3 additions & 1 deletion vmtranslator/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,9 @@ func main() {
return err
}
parse(in, codeWriter, path)
} else {
}

if d.IsDir() {
if codeWriter != nil {
codeWriter.Close()
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,14 +37,14 @@ A=M
M=D
@SP
M=M+1
@5
D=D-A
@ARG
M=D
@SP
D=M
@LCL
M=D
@5
D=D-A
@ARG
M=D
@Sys.init
0;JMP
(_Sys.init_RETURN_0)
Expand Down Expand Up @@ -201,14 +201,14 @@ A=M
M=D
@SP
M=M+1
@6
D=D-A
@ARG
M=D
@SP
D=M
@LCL
M=D
@6
D=D-A
@ARG
M=D
@Main.fibonacci
0;JMP
(_Main.fibonacci_RETURN_1)
Expand Down Expand Up @@ -269,14 +269,14 @@ A=M
M=D
@SP
M=M+1
@6
D=D-A
@ARG
M=D
@SP
D=M
@LCL
M=D
@6
D=D-A
@ARG
M=D
@Main.fibonacci
0;JMP
(_Main.fibonacci_RETURN_2)
Expand Down Expand Up @@ -370,14 +370,14 @@ A=M
M=D
@SP
M=M+1
@6
D=D-A
@ARG
M=D
@SP
D=M
@LCL
M=D
@6
D=D-A
@ARG
M=D
@Main.fibonacci
0;JMP
(_Main.fibonacci_RETURN_3)
Expand Down
74 changes: 62 additions & 12 deletions vmtranslator/testdata/FunctionCalls/NestedCall/NestedCall.asm
Original file line number Diff line number Diff line change
@@ -1,3 +1,53 @@
@256
D=A
@SP
M=D
@_Sys.init_RETURN_0
D=A
@SP
A=M
M=D
@SP
M=M+1
@LCL
D=M
@SP
A=M
M=D
@SP
M=M+1
@ARG
D=M
@SP
A=M
M=D
@SP
M=M+1
@THIS
D=M
@SP
A=M
M=D
@SP
M=M+1
@THAT
D=M
@SP
A=M
M=D
@SP
M=M+1
@SP
D=M
@LCL
M=D
@5
D=D-A
@ARG
M=D
@Sys.init
0;JMP
(_Sys.init_RETURN_0)
(Sys.init)
@4000
D=A
Expand Down Expand Up @@ -33,7 +83,7 @@ D=M
@R13
A=M
M=D
@_Sys.main_RETURN_0
@_Sys.main_RETURN_1
D=A
@SP
A=M
Expand Down Expand Up @@ -68,17 +118,17 @@ A=M
M=D
@SP
M=M+1
@5
D=D-A
@ARG
M=D
@SP
D=M
@LCL
M=D
@5
D=D-A
@ARG
M=D
@Sys.main
0;JMP
(_Sys.main_RETURN_0)
(_Sys.main_RETURN_1)
@R6
D=A
@R13
Expand Down Expand Up @@ -226,7 +276,7 @@ A=M
M=D
@SP
M=M+1
@_Sys.add12_RETURN_1
@_Sys.add12_RETURN_2
D=A
@SP
A=M
Expand Down Expand Up @@ -261,17 +311,17 @@ A=M
M=D
@SP
M=M+1
@6
D=D-A
@ARG
M=D
@SP
D=M
@LCL
M=D
@6
D=D-A
@ARG
M=D
@Sys.add12
0;JMP
(_Sys.add12_RETURN_1)
(_Sys.add12_RETURN_2)
@R5
D=A
@R13
Expand Down
Loading

0 comments on commit cb6c4d9

Please sign in to comment.