본문 바로가기

[Chapter 4] project 04

 

 

(밑바닥부터 만드는 컴퓨팅 시스템 2판, 인사이트(insight), 2023)을 학습하고 개인 학습용으로 정리한 내용입니다.

 

 

 

 

 

  • 목표 : 저수준 프로그래밍을 맛보고, 핵 시스템에 익숙해지자.

핵 기계어는 CPUEmulator를 이용해서 실행할 수 있고, Assembler를 이용하면 2진 버전으로 만들 수 있다.

Assembler로 번역된 2진 파일은 .hack 확장자를 가지는 텍스트 파일로 저장된다.

핵 기계어는 .asm 확장자를 가지는 텍스트 파일로 저장한다.

CPU Emulator Assembler

 

 

 

  • 곱셈 프로그램(Mult.asm)

R0 * R1 곱셈을 계산하고, 그 결과를 R2에 저장한다.

더보기

// This file is part of http://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.
// Assumes that R0 >= 0, R1 >= 0, and R0 * R1 < 32768.
// (R0, R1, R2 refer to RAM[0], RAM[1], and RAM[2], respectively.)

@i
M=0
@sum
M=0

//for i to R1
(LOOP)
@i
D=M
@R1
D=D-M
@STOP
D;JEQ
//sum = sum + R0
@sum
D=M
@R0
D=D+M
@sum
M=D
//i = i + 1
@i
D=M+1
M=D
@LOOP
0;JMP

//R2 = sum
(STOP)
@sum
D=M
@R2
M=D
(END)
@END
0;JMP

 

  • I/O 처리 프로그램(Fill.asm)

키보드에서 입력을 받는 무한 루프를 실행한다.

어떤 키든 눌렀을 때 이 프로그램은 모든 픽셀에 검은색을 기록해서 스크린을 검게 만든다.

아무 키도 눌리지 않으면 모든 픽셀에 흰색을 기록해서 스크린을 지운다.

더보기

// This file is part of http://www.nand2tetris.org
// and the book "The Elements of Computing Systems"
// by Nisan and Schocken, MIT Press.
// File name: projects/04/Fill.asm

// Runs an infinite loop that listens to the keyboard input.
// When a key is pressed (any key), the program blackens the screen
// by writing 'black' in every pixel;
// the screen should remain fully black as long as the key is pressed. 
// When no key is pressed, the program clears the screen by writing
// 'white' in every pixel;
// the screen should remain fully clear as long as no key is pressed.

@pos
M=0

(LOOP)
@KBD
D=M
@ERASE
D;JEQ
@SCREEN
D=A
@pos
D=D+M
M=M+1
A=D
M=-1
@LOOP
0;JMP

(ERASE)
@i
M=0
(CLEAR_SCREEN)
@pos
D=M
@i
D=D-M
@ALL_CLEAR
D;JLE
@SCREEN
D=A
@i
D=D+M
M=M+1
A=D
M=0
@CLEAR_SCREEN
0;JMP

(ALL_CLEAR)
@pos
M=0
@LOOP
0;JMP