示例#1
0
        public override void PrintASM(string levelTabulatiion, bool isNewLine = false)
        {
            IdentificatorAST identificatorRight = (IdentificatorAST)SymTable.symTabls.FindNode((id as IdentificatorAST).GetName());
            int startInStack = identificatorRight.GetAddresInStack();

            ASM.WriteASMCode(levelTabulatiion + ASMregisters.GetCrement(crement) + "\t" + ASMregisters.GetNameType(identificatorRight.GetTypeId()) + " [ebp-" + startInStack + "], 1");
        }
示例#2
0
        private string IdentificatorPrint(string levelTabulatiion, IdentificatorAST sideNodeIdentificatorAST)
        {
            string           reigster          = "";
            IdentificatorAST identificatorSide = (IdentificatorAST)SymTable.symTabls.FindNode(sideNodeIdentificatorAST.GetName());

            if (sideNodeIdentificatorAST.IsArray)
            {
                sideNodeIdentificatorAST.PrintArrayIterationASM(levelTabulatiion, isPushResult: true);
            }
            else
            {
                reigster = ASMregisters.GetFreeRegister(ASMregisters.Register.DATA);
                int offsetInStack = sideNodeIdentificatorAST.GetOffseIfTtArray();
                int startInStack  = identificatorSide.GetAddresInStack() + offsetInStack;
                ASM.WriteASMCode(levelTabulatiion + "mov\t" + reigster + ", " + ASMregisters.GetNameType(identificatorSide.GetTypeId()) + " [ebp-" + startInStack + "]");
            }
            return(reigster);
        }