예제 #1
0
        /// <summary>
        /// 变量赋值
        /// </summary>
        /// <param name="varName"></param>
        /// <param name="Value"></param>
        public void AssignmentVar(string varName, dynamic Value)
        {
            LocalVariable.VarInfo varInfo = LifeCycle.GetVarInfo(varName);
            byte[]      bytes             = BitConverter.GetBytes(Value);
            List <byte> tmpByteList       = bytes.ToList();

            for (int i = 0; i < 4 - ((bytes.Length % 4 == 0) ? 4 : (bytes.Length % 4)); i++)
            {
                tmpByteList.Add(0x00);
            }
            bytes = tmpByteList.ToArray();
            List <Int32> _Values = new List <Int32>();

            for (int i = 0; i < bytes.Length / 4 + bytes.Length % 4; i++)
            {
                _Values.Add(BitConverter.ToInt32(bytes, i * 4));
            }

            OutputObject asnFile = new OutputObject();

            asnFile.Asn($";set variable value");
            for (int i = 0; i < (varInfo.Size > _Values.Count ? _Values.Count : varInfo.Size); i++)
            {
                asnFile.Asn($"mov r0,{varInfo.Offset - i}");
                asnFile.Asn($"sub r0,dptr,r0");
                asnFile.Asn($"mov r1,{_Values[i]}");
                asnFile.Asn($"str r1,r0");
            }
            asnFile.Out();
        }
예제 #2
0
        /// <summary>
        /// 将函数返回值存储到变量varName中
        /// </summary>
        /// <param name="varName"></param>
        public void ReturnAsignVar(string varName)
        {
            LocalVariable.VarInfo varInfo = LifeCycle.GetVarInfo(varName);
            OutputObject          asnFile = new OutputObject();

            asnFile.Asn($";set return variable value");

            for (int i = 0; i < varInfo.Size; i++)
            {
                asnFile.Asn($"mov r0,{varInfo.Offset - i}");
                asnFile.Asn($"sub r0,dptr,r0");
                asnFile.Asn($"ldr r1,r0");
                asnFile.Asn($"mov r0,{i}");
                asnFile.Asn($"add r0,dptr,r0");
                asnFile.Asn($"str r1,r0");
            }
        }
예제 #3
0
        /// <summary>
        /// 变量对变量赋值
        /// </summary>
        /// <param name="destName"></param>
        /// <param name="srcName"></param>
        public void VarAsignVar(string destName, string srcName)
        {
            LocalVariable.VarInfo destVarInfo = LifeCycle.GetVarInfo(destName);
            LocalVariable.VarInfo srcVarInfo  = LifeCycle.GetVarInfo(srcName);

            OutputObject asnFile = new OutputObject();

            asnFile.Asn($";set variable value");
            for (int i = 0; i < destVarInfo.Size; i++)
            {
                asnFile.Asn($"mov r0,{srcVarInfo.Offset - i}");
                asnFile.Asn($"sub r0,dptr,r0");
                asnFile.Asn($"ldr r1,r0");
                asnFile.Asn($"mov r0,{destVarInfo.Offset - i}");
                asnFile.Asn($"sub r0,dptr,r0");
                asnFile.Asn($"str r1,r0");
            }
            asnFile.Out();
        }