✨컴공주✨ [1052682] · MS 2021 · 쪽지

2023-01-30 15:24:07
조회수 742

컴공 일기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)

  1. 유익한 글을 읽었다면 작성자에게 XDK를 선물하세요.