Nand2Tetris — 第 12 章
Jack 作業系統
// Math.jack
//作業系統實作範例
//乘法透過重複加法實現乘法。
//除法透過重複減法實現除法。
class Math {
function void init() {
return;
}
function int multiply(int x, int y) {
var int result;
let result = 0;
while (y > 0) {
let result = result + x;
let y = y - 1;
}
return result;
}
function int divide(int x, int y) {
var int result;
let result = 0;
while (~(x < y)) {
let x = x - y;
let result = result + 1;
}
return result;
}
}
// String.jack
//String物件部分實現
//將字元儲存在內部數組中並單獨管理長度
class String {
field Array data;
field int length;
field int capacity;
constructor String new(int maxLength) {
let capacity = maxLength;
let length = 0;
let data = Array.new(maxLength);
return this;
}
method void dispose() {
do data.dispose();
do Memory.deAlloc(this);
return;
}
method int length() {
return length;
}
method String appendChar(char c) {
let data[length] = c;
let length = length + 1;
return this;
}
method char charAt(int index) {
return data[index];
}
}
// Array.jack
//Array.new 分配與堆中大小相等的記憶體。
//Jack數組實際上是一個帶有基底位址的記憶體區塊。
class Array {
function Array new(int size) {
return Memory.alloc(size);
}
method void dispose() {
do Memory.deAlloc(this);
return;
}
}