nand2tetris week4

发布时间 2023-09-28 09:28:00作者: yhish

课程对应的汇编样例

 

//原代码段(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