public void NewStackFrame_IsUsedToCalculateAddresses_InANewStackFrame_ForACaller() { // new stackframe beginning at address 20, with 3 arguments var offset = new NewStackFrame(20, 3); Assert.That(offset.ReturnValue, Is.EqualTo(20)); Assert.That(offset.Argn(0), Is.EqualTo(21)); Assert.That(offset.Argn(1), Is.EqualTo(22)); Assert.That(offset.Argn(2), Is.EqualTo(23)); Assert.That(() => offset.Argn(3), Throws.Exception.InstanceOf <ArgumentOutOfRangeException>()); Assert.That(offset.ReturnAddress, Is.EqualTo(24)); Assert.That(offset.Register0, Is.EqualTo(25)); Assert.That(offset.Register1, Is.EqualTo(26)); Assert.That(offset.Register2, Is.EqualTo(27)); Assert.That(offset.Register3, Is.EqualTo(28)); Assert.That(offset.Register4, Is.EqualTo(29)); Assert.That(offset.Register5, Is.EqualTo(30)); Assert.That(offset.Register6, Is.EqualTo(31)); Assert.That(offset.NewStackPointer, Is.EqualTo(32)); }
public static string Param(ref int lineNumber, StackFrame stackFrame, NewStackFrame newStackFrame, string variable, int argNum) { return($@"{lineNumber++}: LD 2, {stackFrame.Address(variable)}(6) ; param{argNum} := {variable} {lineNumber++}: ST 2, {newStackFrame.Argn(argNum)}(6) "); }