What & How & Why

差别

这里会显示出您选择的修订版和当前版本之间的差别。

到此差别页面的链接

两侧同时换到之前的修订记录前一修订版
后一修订版
前一修订版
cs:comp_n_arch:courses:fnti_i:week_4 [2025/05/11 02:33] – [实例:drawing an rectangle] codingharecs:comp_n_arch:courses:fnti_i:week_4 [2025/05/11 03:11] (当前版本) – [实例:keyboard] codinghare
行 508: 行 508:
     goto END     goto END
 </code> </code>
 +实现如下:
 +<code bash>
 +@SCREEN 
 +D = A
 +@addr # 使用 SCREEN 地址初始化 addr, 16384 号寄存器
 +M = D
 +@R0
 +D = M
 +@n
 +M = D # 使用 R0 内容初始化 n
 +@i
 +M = 0 # 初始化 i 为 0
 +
 +(LOOP)
 +    @i
 +    D = M
 +    @n
 +    D = D - M
 +    @END
 +    D;JGT # 如果 i > n, 结束循环
 +
 +    @addr
 +    A = M 
 +    M = -1 # RAM[addr] = 1111 1111 1111 1111
 +
 +    # 更新循环状态
 +    @i 
 +    M = M + 1
 +
 +    @32
 +    D = A # 注意,所有的常量都需要用 A 类寄存器获取
 +    @addr 
 +    M = M + D
 +    
 +    @LOOP
 +    0;JMP
 +
 +(END)
 +    @END
 +    0;JMP
 +</code>
 +==keyboard==
 +  - 读取 RAM[24576] 内的内容
 +  - 如果内容为 ''0'' ,那么没有键被按下
 +  - 否则,搜寻对应值的 key 值