如何解决只有1个参数和偏移量的JALR有什么作用?
所以我正在看一些riscv汇编代码,基本上是在试图找出问题所在。 但是,我偶然发现了以下代码:
80001a2: 00000097 auipc ra,0x0
80001a6: 62e080e7 jalr 1582(ra) # 80007d0 <memset>
我认为我了解auipc,即将pc添加到我的寄信人地址,但是我不理解这里的jalr。
当我查找它时,它的用法是:
jalr xD,xL(偏移量)
我想在我的代码中(ra)是偏移量,但是1582在这里是什么?来源?目的地?都是吗?
解决方法
大概反汇编程序假定正常的默认目标寄存器(<table class="table">
<thead>
<tr>
<th id="ctl00_cphCEShop_colColore" class="text-left" colspan="2">Colore</th>
<th>S</th>
<th>M</th>
<th>L</th>
</tr>
</thead>
<tbody>
<tr>
<td id="x">
<b>White</b>
<input type="hidden" name="data" value="3230/201">
</td>
<td id="avail">
Avail:
</td>
<td id="1">
<div>
<input name="cell" type="text" class="form-control">
<div class="text-center">179</div>
</div>
</td>
<td id="2">
<div>
<input name="cell" type="text" class="form-control">
<div class="text-center">360</div>
</div>
</td>
etc etc
)会将返回地址写入其中,因此将其保留为隐式。
因此ra
将显示目标地址计算的方式,例如加载或存储的寻址模式1582(ra)
。 RISC-V offset(reg)
支持一些立即偏移量,从而可以用2指令序列jalr
调用任何目标地址以获得20位相对偏移量,并auipc
提供其他12.显然这是怎么回事。 std::identity
如果要仔细检查,请自行拆卸。
(jalr
指令中的0x0
偏移量可能是由于auipc
已在附近结束。这些地址看起来像“真实”地址,因此它不是未链接的memset
我猜这是一个静态链接的可执行文件吗?.o
如此接近的事实直到链接时间才被人知道;为时已晚,无法优化到memset
相对分支。)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。