将闰年C程序转换为Asm

时间:2013-07-07 16:28:51

标签: assembly

所以我想将这个C语言程序转换为Assembly:

  void main
  {
    int year;
    printf("Enter the year: ");
    scanf("%d",&year);

     if(year%400 ==0 || (year%100 != 0 && year%4 == 0))
    {
        printf("Year %d is a leap year",year);
    }
    else
    {
        printf("Year %d is not a leap year",year);
    }
  }

你能帮我弄清楚它是如何在Asm中映射的吗?我尝试使用此链接转换它:http://assembly.ynh.io/但我遇到错误:错误:命令失败:/tmp/test683852013.c:2:1:错误:预期'=',',',' ;','asm'或'属性'在'{'标记

之前

我很乐意感谢你的帮助。感谢。

1 个答案:

答案 0 :(得分:1)

正如评论中指出的那样,您的程序甚至无效。

应该看起来像:

// Include for printf and scanf
#include <stdio.h>

// Main should return an int
int main()
{
    int year;
    printf("Enter the year: ");
    scanf("%d",&year);

    if(year%400 ==0 || (year%100 != 0 && year%4 == 0))
    {
        printf("Year %d is a leap year",year);
    }
    else
    {
        printf("Year %d is not a leap year",year);
    }

    return 0;
}

现在它可以使用您的链接进行转换。

但您也可以使用编译器进行翻译。例如,如果您有gcc,则可以使用以下命令:

gcc -S test_asm.c

它会将其转换为test_asm.s

注意:有时您必须使用gcc -S -masm=intel test_asm.c,但它适用于我而无需其他选项。 关于此选项的手册页说:

-masm=dialect
          Output asm instructions using selected dialect.  Supported choices
          are intel or att (the default one).  Darwin does not support intel.

但如果它在我的Mac上不起作用。您可能需要在您的平台上使用它。