Ejemplo n.º 1
0
        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)
");
        }
Ejemplo n.º 2
0
        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)));
        }
Ejemplo n.º 3
0
        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
");
        }