ios - 在 iOS 上将 x86 asm 代码转换为 arm 代码
<p><p>谁能帮我将以下 x86 内联 asm 代码转换为 arm 格式?</p>
<pre><code>bool N_FLAG = 0;
bool C_FLAG = 0;
bool Z_FLAG = 0;
bool V_FLAG = 0;
asm("sub %1, %%ebx;"\
"setsb N_FLAG;"\
"setzb Z_FLAG;"\
"setncb C_FLAG;"\
"setob V_FLAG;"\
: "=b" (reg.I)\
: "r" (reg.I), "b" (value));
</code></pre></p>
<br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
<p><p><strong>把它转换成 C 怎么样?</strong></p>
<p>看起来代码减去两个数字<code>(value - reg.I)</code>,将结果存储到<code>reg.I</code>,然后检查各种标志。</p>
<p>所以有些东西(粗略,未经测试),例如:</p>
<pre><code>reg.I = value - reg.I;
Z_FLAG = (reg.I == 0);
N_FLAG = (reg.I < 0);
/* repeat for: carry, overflow */
</code></pre>
<p>然后让编译器发挥它的魔力? ARM gcc 编译器在将这类东西映射到正确的 ARM 指令方面也不错。</p>
<p>如果您想进行 ARM 汇编,您可能正在考虑使用条件移动指令,例如(快速编写 - 未经测试):</p>
<pre><code>__asm__ (
"subs %, %, %\n\t"
"movmi %, #1\n\t"
"moveq %, #1\n\t"
"movcs %, #1\n\t"
"movvs %, #1\n\t"
: "+r"(N_FLAG), "+r"(Z_FLAG), "+r"(C_FLAG), "+r"(V_FLAG), "=r" (reg.I)
: "r" (reg.I), "r"(value))
: "cc"
);
</code></pre></p>
<p style="font-size: 20px;">关于ios - 在 iOS 上将 x86 asm 代码转换为 arm 代码,我们在Stack Overflow上找到一个类似的问题:
<a href="https://stackoverflow.com/questions/7375937/" rel="noreferrer noopener nofollow" style="color: red;">
https://stackoverflow.com/questions/7375937/
</a>
</p>
页:
[1]