-3

所以我想把这个C语言程序转换成汇编:

  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' 或 '<strong>attribute' 在 '{' 标记之前

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

4

1 回答 1

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 上不起作用。您可能需要在您的平台上使用它。

于 2013-07-07T21:21:23.837 回答