如何生成汇编指令流
![](https://i-blog.csdnimg.cn/blog_migrate/8bb7c26d4c8b98cdedbdbeb47c2da6db.png)
增加directed stream
![](https://i-blog.csdnimg.cn/blog_migrate/b2b3eb8c18d77e3a5f5d320cb6243adb.png)
主要指令流
![](https://i-blog.csdnimg.cn/blog_migrate/9efb0b6d258ffe7250fb9d9d9bd6ed35.png)
![](https://i-blog.csdnimg.cn/blog_migrate/73720d09c0b29f1bf7751acad7f702e2.png)
![](https://i-blog.csdnimg.cn/blog_migrate/d7d053ae8672bbfe50c96ea559b3e1de.png)
insert_jump_instr
![](https://i-blog.csdnimg.cn/blog_migrate/d481279e6f6892a693d010d7c8eb9ff7.png)
![](https://i-blog.csdnimg.cn/blog_migrate/5771555e0dc6c4b14e1cd709e2801daf.png)
![](https://i-blog.csdnimg.cn/blog_migrate/5b6b16ad835e16e1bb81ad59b8fa6158.png)
![](https://i-blog.csdnimg.cn/blog_migrate/4394a074b44593b1805cc7eaa137aa6d.png)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
栈的长度
![](https://i-blog.csdnimg.cn/blog_migrate/cfb9a8869565bd5fd6d7b72141392591.png)
这里注意一下,栈的长度,是每一次都会随机在这个范围,所以每一次都会减去随机生成的栈的长度,留下的空间就为指令流里面的load store空间。
栈是为了跳转子程序使用的,保存原来的pc。等到子程序运行完,再把pc load出去,Jalr跳。如果stack_len的值变小,随机的值就会小一点。但是也许需要压栈的子程序会很多,可能会有问题。两外mem的空间大小随机也是小于此就可以,如果栈的空间太大,,占去一部分,这样load store的地址随机可能也会有问题。
所以总地址就需要减去每一次随机的栈的长度后,load/store空间为大致需要随机几次栈的空间,即调用子程序的等级,大致估算一个空间
![](https://i-blog.csdnimg.cn/blog_migrate/46fe938e9734539a1373b255290e8d24.png)
![](https://i-blog.csdnimg.cn/blog_migrate/7e1f4c508a28e76c54e74ee26db26dad.png)