public static string Divide(ref int lineNumber, StackFrame stackFrame, string leftOperand, string rightOperand, string resultVariable) { return($@"{lineNumber++}: LD 2, {stackFrame.Address(leftOperand)}(6) ; {resultVariable} := {leftOperand} / {rightOperand} {lineNumber++}: LD 3, {stackFrame.Address(rightOperand)}(6) {lineNumber++}: DIV 2, 2, 3 {lineNumber++}: ST 2, {stackFrame.Address(resultVariable)}(6) "); }
public void StackFrame_IsUsedToCalculateAddresses_InTheCurrentStackFrame_RelativeToTheStackFramePointer_r6() { var stackFrame = new StackFrame(3); Assert.That(stackFrame.Register6, Is.EqualTo(-1)); Assert.That(stackFrame.Register5, Is.EqualTo(-2)); Assert.That(stackFrame.Register4, Is.EqualTo(-3)); Assert.That(stackFrame.Register3, Is.EqualTo(-4)); Assert.That(stackFrame.Register2, Is.EqualTo(-5)); Assert.That(stackFrame.Register1, Is.EqualTo(-6)); Assert.That(stackFrame.Register0, Is.EqualTo(-7)); Assert.That(stackFrame.ReturnAddress, Is.EqualTo(-8)); Assert.That(stackFrame.Argn(2), Is.EqualTo(-9)); Assert.That(stackFrame.Argn(1), Is.EqualTo(-10)); Assert.That(stackFrame.Argn(0), Is.EqualTo(-11)); Assert.That(stackFrame.ReturnValue, Is.EqualTo(-12)); Assert.That(stackFrame.Address("t0"), Is.EqualTo(0)); Assert.That(stackFrame.Address("t1"), Is.EqualTo(1)); Assert.That(stackFrame.Address("t2"), Is.EqualTo(2)); Assert.That(stackFrame.Address("arg0"), Is.EqualTo(stackFrame.Argn(0))); Assert.That(stackFrame.Address("arg1"), Is.EqualTo(stackFrame.Argn(1))); Assert.That(stackFrame.Address("arg2"), Is.EqualTo(stackFrame.Argn(2))); }
public static string PrintVariable(ref int lineNumber, StackFrame stackFrame, string variable) { return($@"{lineNumber++}: LD 2, {stackFrame.Address(variable)}(6) ; print variable '{variable}' {lineNumber++}: OUT 2, 0, 0 "); }