Nand2tetris-project-04

该程序是一个无限循环,检测键盘输入并执行填充或清除屏幕的操作。当检测到键盘有输入时,程序会填充屏幕,将地址中的值设为-1。如果屏幕已全黑,则跳过填充。当无键盘输入时,程序会清屏,将所有地址的值设为0。程序使用预定义的SCREEN和KBD指针,并通过RAM基地址进行操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Nand2tetris-project-04

I/O处理程序(Fill.asm)

屏幕对应RAM基地址16384-24575
键盘对应RAM基地址24576

程序通过无限循环监测键盘输入,即地址24576存储的值,若为0,则说明没有键按下,跳转至CLEAR功能;若大于0,则说明有键按下,跳转至FILL功能。
FILL:在开始填黑前,判断屏幕是否已经全部变黑,变黑则直接进入下一次循环;每次循环只填充一个地址,填充只需将-1存入该地址(-1的补码为全1),填充完后将R0存储的当前地址+1,进入下一轮训环。
CLEAR:首先判断屏幕是否为空屏,为空屏则直接进入下一轮循环;不为空就进行清屏操作,M = 0,然后再将R0中存储的当前地址-1,进入下一轮循环。

预定义符号
SCREEN:指针
KED:键盘

//将当前地址存储R0
@SCREEN
D = A
@0
M = D

//将屏幕最大地址存入R1
@24575
D = A
@1
M = D
//一个无限循环,监测键盘输入
(LOOP)
@KBD
D = M
//根据D判断填入还是清屏
@FILL
D;JGT
@CLEAR
0;JMP
//实现FILL功能
(FILL)
@0
D = M
@1
D = D - M
@LOOP
D;JGT	//如果当前地址大于最大地址,说明屏满,开始下一次循环
@0
D = M
A = D
M = -1
@0
M = D + 1

@LOOP
0;JMP	//每次循环填充一个地址,填充完后开始下一次循环
//实现CLEAR功能
(CLEAR)
@0
D = M
@SCREEN
D = D - A
@LOOP
D;JLT	//如果已经是空屏,直接开始下一次循环
@0
D = M
A = D
M = 0
@0
M = D - 1
@LOOP
0;JMP
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值