汇编语言循环
问题描述:
我怎么在装配使用循环翻译此C#代码和/或跳跃汇编语言循环
int sum = 0;
int count = 15;
while (count != 0)
{
if (count % 2 != 0)
sum = sum + count;
count--;
}
Console.WriteLine(sum);
答
一个“而”通常是
L_repeat:
compare while_condition
jumpIfFalse L_exit
... loop body ...
jump L_repeat
L_exit:
也是一个如果,你有反转条件:
compare if_condition
jumpIfFalse L_skip
... inside if
L_skip:
,那么你需要寄存器,一个牵你的计数,一个总和,像这样的东西出来:
mov Rsum,0
mov Rcount,15
L_repeat:
cmp Rcount,0
jz L_exit ; jump if not (Rcount != 0) gets jump if Rcount==0
mov Rtemp, Rcount
and Rtemp, 1
jz L_skip
add Rsum, Rcount
L_skip:
dec Rcount
jmp L_repeat
l_exit:
最好的地方是研究指定的期望平台的指令集,然后使用适当的汇编程序来生成代码。 –
我有点想知道这是什么令你困惑,因为这可以几乎1:1转换为x86 ASM指令(我假设x86,因为你没有指定目标CPU),所以它只是缺乏信心尝试去做,或者甚至根本没有看到指令集(试着先找到80286或80386,它包含了所有的基本指令,不需要学习整个现代x86集合以及所有扩展的东西,比如SSE或开始时的浮点数)。你会尝试至少一些东西,并描述你做了什么,它可能会更容易看到问题在哪里,以及建议什么...... – Ped7g
对此问题的另一种答案是:将其写为有效的C++(只是删除控制台)并用“汇编”开关进行编译。 C/C++编译器在生产汇编方面非常出色。 – Ped7g