← SEARCHABLE ARCHIVE
Nand2Tetris · 2026-05-22

Nand2Tetris — Capítulo 12

El sistema operativo de Jack

INTERACTIVE READING MODE →

// Math.jack
//Ejemplo de implementación del sistema operativo
//multiplicar implementa la multiplicación con suma repetida.
//dividir implementa la división con resta repetida.

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
//Implementación parcial del objeto de cadena
//Almacene caracteres en una matriz interna y administre la longitud por separado

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 asigna memoria igual al tamaño del montón.
//La matriz Jack es en realidad un bloque de memoria con una dirección base.

class Array {
    function Array new(int size) {
        return Memory.alloc(size);
    }

    method void dispose() {
        do Memory.deAlloc(this);
        return;
    }
}