예제 #1
0
        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));
        }
예제 #2
0
        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)
");
        }