컴공 일기226
게시글 주소: https://orbi.kr/00061721309
// This file is part of www.nand2tetris.org
// and the book "The Elements of Computing Systems"
// by Nisan and Schocken, MIT Press.
// File name: projects/04/Mult.asm
// Multiplies R0 and R1 and stores the result in R2.
// (R0, R1, R2 refer to RAM[0], RAM[1], and RAM[2], respectively.)
//
// This program only needs to handle arguments that satisfy
// R0 >= 0, R1 >= 0, and R0*R1 < 32768.
// Put your code here.
//programming : R1 * R0 값을 새로운 메모리 공간 R2에 저장
//R2 값을 0으로 초기화 해보셔.
@R2
M=0
//R0에 저장된 값을 데이터 레지스터로 옮기셔.
@R0
D=M
//D값이 0보다 크면 Mul로 분기(Branch)
@Mul
D; JGT
//D값이 0보다 작으면 분기 멈추고, 무한 루프 돌릴 준비하셔. -> 프로그램 종료기법
@END
0; JMP
//기본적으로 곱 연산 지원이 안 되는 Assembly이므로 덧셈의 반복으로 곱셈을 정의해야 되셔.
(Mul)
@R2
D=M
//R1 값에 R0번을 계속 더하면 곱 논리가 되셔. ex) 1*5 = 1+1+1+1+1
@R1
D=D+M
//R2값 업데이트
@R2
M=D
//R1값을 더했으니, -1을 빼셔.
@R0
D=M-1
M=D
//0이 될 때까지 반복문 돌리셔.
@Mul
D; JGT
//무한루프 섹션. 여기로 들어오는 순간 프로그램 종료.
(END)
@END
0; JMP
Nand2Tetris.. 프로젝트 4장까지 완료입니다.
ALU와 PC(program counter), RAM, register 등 CPU 구성에 필요한 장치들을 시뮬레이터로 구현하고, 거기에 맞는 어셈블리를 이용해서 간단한 연산 예제까지 만들어 봤습니다.
Nand2Assembly 까지는 완성이네요.
컴퓨터아키텍쳐가 남긴 했지만.. 이건 금방 해볼 수 있을 듯 합니다.
0 XDK (+0)
유익한 글을 읽었다면 작성자에게 XDK를 선물하세요.
화이팅이에용! 히히