Skip to content

SharpRISCV is an implementation of RISC-V assembly in C#. First RISC V Assembly that build windows executable file

License

Notifications You must be signed in to change notification settings

Nuaatk/SharpRISCV-add_pim-

 
 

Repository files navigation

SharpRISCV补丁,解决了以下问题

增加数据段对.half类型的支持

img2

​ 测试.s代码位于Example

增加指令中立即数对16进制数据的支持

​ 在MachineCode对立即数处理的ProcessSource函数中增加

else if (Immediate.StartsWith("0x"))
{
    value = Convert.ToInt32(Immediate, 16);
}

opcode与寄存器之间不能存在制表符

  • 原因:string op = instruction.Split(' ')[0];在解析opcode的时候通过空格划分,识别不了制表符

  • 解决:在IdentifyInstructionType中对输入的指令进行"\t"与" "的转换

load类指令不支持负数寻址

  • 原因:I型指令的正则匹配没有包含匹配负的立即数

  • 解决:

    //原I型指令匹配
    iTypeRegex = new Regex(@"^(\w+)\s+(\w+)\s*,\s*([\w.%()]*)$");
    var iSourceRegex = new Regex(@"^(([\w%]*\([^)]+\))|\d+)\(([^)]+)\)$");
    
    //修改后
    iTypeRegex = new Regex(@"^(\w+)\s+(\w+)\s*,\s*(-?[\w.%()]*)$");
    var iSourceRegex = new Regex(@"^(([\w%]*\([^)]+\))|-?\d+)\(([^)]+)\)$");
    

    im3

正则表达式:

  • \w对应word,\s对应空格,+表示匹配一项或多项,*表示匹配零项或多项,?表示可有可无,|表示或
  • 一个括号对应一个匹配项,匹配项即iTypeMatch.Groups,第0项为整体,第二项为第一个括号,以此类推

反码与补码:

  • 用补码表示负数,第一位表示正负。以4bit有符号数为例,正数与负数一一对应,除了0和8,0和8的补码为自己
  • 为什么不用反码,因为0的反码不是0,会出现正零和负零

About

SharpRISCV is an implementation of RISC-V assembly in C#. First RISC V Assembly that build windows executable file

Resources

License

Code of conduct

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C# 79.4%
  • HTML 6.6%
  • Assembly 5.7%
  • C 2.7%
  • JavaScript 2.2%
  • CSS 2.1%
  • Other 1.3%