课程对应的汇编样例
//原代码段(c)
/*
arr=100;
n=10;
for(i=0; i<n; i++)
{
arr[i] = -1;
}
*/
//第一部分,arr=100
@100 //将100存入A寄存器
D=A //将A寄存器的值赋值到D寄存器(A是地址寄存器,D是数据寄存器)
@arr //在ROM中为arr开辟一个空间,并将arr的地址赋予A寄存器
M=D //将D寄存器的值赋予上述地址
//第二部分 n=10
@10
D=A
@n
M=D
//第三部分 初始化i=0
@i
M=0 //将0赋予上述地址(i)
//第四部分 循环
(LOOP)
//判断i是否=n,是的话跳转至END
@i
D=M //D中存i的值
@n
D=D-M //i-n
@END
D;JEQ //如果D=0,跳转至END
//arr[i]=-1(RAM[arr+i]=-1)
@arr
D=M //令D为上述地址的值
@i
A=D+M //arr地址+i(令A为D(arr)+M(上述地址,也就是i))
M=-1 //给上述地址(arr地址+i)赋值-1
//i++
@i
M=M+1
//继续循环
@LOOP
0;JMP
//结束循环
(END)
@END
0;JMP
标签:10,arr,样例,原代码,nand2tetris,week4
From: https://www.cnblogs.com/yhish/p/17734800.html