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 两个程序。

附录

posted @ 2025-10-30 17:47  jiangbo4444  阅读(5)  评论(0)    收藏  举报