|
I apologize for not understanding what you were telling me. I have learned and important lesson today.
The Hack assembly language can interpret how it uses the 6-bit instruction code based on the value of the instruction bit designated "a". The are 18 basic C-instructions. For some of these, the ALU requires no operands. For some instructions, a single operand is required. For example, negating an integer value. For some, two operands are needed. Example, adding two numbers.
Where one operand is required, there are three possibilities: the operand is the value contained in the D register or the operand is the value contained in the A register or the operand in the value contained the the RAM location whose address is the value contained in the A register. In Hack mnemonic code, this last case is denoted by pseudo-register M.
The bit value of "a" tells the CPU whether to use the A register value or the value denoted by pseudo-register M as a operand in a computation. If "a" equals zero, the value in A register is used. If "a" equals 1, the value references by M is used.
If no operand is required by the ALU to perform a computation, the "a" bit is set to zero. Three machine language instructions require no operand.
For instructions that require only one operand, the machine code bit patterns are different for using D register or using either A register or M. In this case the "a" bit determined which as previously described.
When two operands are used, on of these is always the D register. The other is determined by the "a" bit.
For example, to add two integers, the machine code bit pattern is zero-zero-zero-zero-one-zero. If the "a" bit is zero, the ALU emits the sum of D register and A register. If the "a" bit is one, the ALU emits the sum of the D register and the M pseudo-register.
If this last part seems to work, let me know and I'll convert the whole table this way.
|