Skip to content
The Elements of Computing Systems
Python Assembly
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.

The Elements of Computing Systems

nand2tetris course work


Compiler (.jack -> .vm)

usage: python Software/Compiler/ [options] source[.jack]
        sourceFile(s) may be file or directory.
        -m mutes status messages
        -x creates syntax analysis xml file

VM Translator (.vm -> .asm)

usage: python Software/VMTranslator/ [options] source[.vm]
        sourceFile(s) may be file or directory.
        -m mutes status messages
        -c writes vm commands as comments in .asm file
        -b doesn't generate bootstrap code
        -l creates source.debug with adjusted line numbers

Assembler (.asm -> .hack)

usage: python Software/ sourceFile[.asm]
        -m mutes status messages
        -p prints output to stdout


  • Add16(a= ,b= ,out= );
  • ALU(x= ,y= ,zx= ,nx= ,zy= ,ny= ,f= ,no= ,out= ,zr= ,ng= );
  • And16(a= ,b= ,out= );
  • And(a= ,b= ,out= );
  • ARegister(in= ,load= ,out= );
  • Bit(in= ,load= ,out= );
  • CPU(inM= ,instruction= ,reset= ,outM= ,writeM= ,addressM= ,pc= );
  • DFF(in= ,out= );
  • DMux4Way(in= ,sel= ,a= ,b= ,c= ,d= );
  • DMux8Way(in= ,sel= ,a= ,b= ,c= ,d= ,e= ,f= ,g= ,h= );
  • DMux(in= ,sel= ,a= ,b= );
  • DRegister(in= ,load= ,out= );
  • FullAdder(a= ,b= ,c= ,sum= ,carry= );
  • HalfAdder(a= ,b= ,sum= , carry= );
  • Inc16(in= ,out= );
  • Keyboard(out= );
  • Memory(in= ,load= ,address= ,out= );
  • Mux16(a= ,b= ,sel= ,out= );
  • Mux4Way16(a= ,b= ,c= ,d= ,sel= ,out= );
  • Mux8Way16(a= ,b= ,c= ,d= ,e= ,f= ,g= ,h= ,sel= ,out= );
  • Mux(a= ,b= ,sel= ,out= );
  • Nand(a= ,b= ,out= );
  • Not16(in= ,out= );
  • Not(in= ,out= );
  • Or16(a= ,b= ,out= );
  • Or(a= ,b= ,out= );
  • Or8Way(in= ,out= );
  • PC(in= ,load= ,inc= ,reset= ,out= );
  • RAM16K(in= ,load= ,address= ,out= );
  • RAM512(in= ,load= ,address= ,out= );
  • RAM4K(in= ,load= ,address= ,out= );
  • RAM64(in= ,load= ,address= ,out= );
  • RAM8(in= ,load= ,address= ,out= );
  • Register(in= ,load= ,out= );
  • ROM32K(address= ,out= );
  • Screen(in= ,load= ,address= ,out= );
  • Xor(a= ,b= ,out= );

Project 13

A list of all additions and modifications made outside the domain of the course.
  • Add modulus functionality to jack with Math.mod() and make the compiler properly interpret the % symbol
  • Add pseudo-random number generation to jack (via a linear congruential generator) with Math.seedRandom(), Math.rand(), and Math.randRange()
  • Add >=, <=, ~=, and == to the legal jack comparisons (the latter is equivalent to '=')
  • Add break statements for while loops
You can’t perform that action at this time.