0296-Nand-机器语言
环境
- Time 2023-07-07
前言
说明
参考:https://www.nand2tetris.org/
目标
接上一节,通过模拟的 CPU 实现 mult 和 fill 程序。
mult
// r2 = 0
@2
M=0
// loop r1 > 0
(LOOP)
@1
D=M
@END
D;JLE
// r1 = r1 - 1
D=D-1
@1
M=D
// r2 = r2 + r0
@0
D=M
@2
M=M+D
// goto LOOP
@LOOP
0;JMP
// end
(END)
fill
// r0 = screen start address
@SCREEN
D=A
@0
M=D
// r1 = screen end address
@24575
D=A
@1
M=D
(LOOP)
// D = key code
@KBD
D=M
// 有按键按下,跳到 FILL
@FILL
D;JGT
// 没有键按下,跳到 CLEAR
@CLEAR
0;JMP
(FILL)
// D = 屏幕最大地址
@1
D=M
// D = 屏幕最大地址 - 当前屏幕地址
@0
D=D-M
// 如果小于 D 小于 0,跳转到 LOOP
@LOOP
D;JLT
// 将当前屏幕地址变黑
@0
D=M
A=D
M=-1
// 将当前屏幕地址+1
@0
D=M
D=D+1
M=D
@LOOP
0;JMP
(CLEAR)
// 当前屏幕地址-1
@0
D=M
D=D-1
M=D
// 如果当前地址小于屏幕开始地址,跳转到 LOOP
@SCREEN
D=D-A
@LOOP
D;JLT
// 屏幕变白
@0
D=M
A=D
M=0
@LOOP
0;JMP
总结
通过汇编语言,编写了 mult 和 fill 两个程序。

浙公网安备 33010602011771号