汇编语言循环

问题描述:

我怎么在装配使用循环翻译此C#代码和/或跳跃汇编语言循环

 int sum = 0; 
     int count = 15; 

     while (count != 0) 
     { 
      if (count % 2 != 0) 
       sum = sum + count; 
      count--; 
     } 

     Console.WriteLine(sum); 
+3

最好的地方是研究指定的期望平台的指令集,然后使用适当的汇编程序来生成代码。 –

+0

我有点想知道这是什么令你困惑,因为这可以几乎1:1转换为x86 ASM指令(我假设x86,因为你没有指定目标CPU),所以它只是缺乏信心尝试去做,或者甚至根本没有看到指令集(试着先找到80286或80386,它包含了所有的基本指令,不需要学习整个现代x86集合以及所有扩展的东西,比如SSE或开始时的浮点数)。你会尝试至少一些东西,并描述你做了什么,它可能会更容易看到问题在哪里,以及建议什么...... – Ped7g

+0

对此问题的另一种答案是:将其写为有效的C++(只是删除控制台)并用“汇编”开关进行编译。 C/C++编译器在生产汇编方面非常出色。 – Ped7g

一个“而”通常是

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: