【问题标题】:translating C into ARM assembly将 C 翻译成 ARM 程序集
【发布时间】:2014-05-31 17:06:58
【问题描述】:

所以我有这个解决数独板的 C 代码,我想把它翻译成一个汇编程序,从文件 board.txt 中读取一个板输出应该是已解决的板,格式与打印到 stdout 输出的格式相同.我正在使用 Jgrasp,所以我想知道是否有一种方法可以转换它,还是我必须在我的代码中逐行转换并将其转换为 ARM?

这里是c代码:

int rowOK(int board[9][9], int row) {
   int index;
   int count[10];

   for (index=0; index<10; index++)
      count[index] = 0;

   for (index=0; index<9; index++)
      count[board[row][index]]++;

   for (index=1; index<10; index++)
      if (count[index] > 1)
         return 0;

   return 1;
}

int colOK(int board[9][9], int col) {
   int row;
   int seen=0x0;

   for (row=0; row<9; row++){
      if ((board[row][col] != 0) &&
           (seen&(0x1<<board[row][col] == 1)))
         return 0;
      else
         seen=seen|(0x1<<board[row][col]);
   }

   return 1;
}

int boxOK(int board[9][9], int row, int col) {
   int roff;
   int coff;
   int seen = 0x0;

   for (roff=0; roff<3; roff++)
      for (coff=0; coff<3; coff++)
         if ((board[row+roff][col+coff] != 0) &&
              ((seen & (0x1 << board[row+roff][col+coff])) != 0))
            return 0;
         else
            seen = seen | (0x1 << board[row+roff][col+coff]);

   return 1;
}

int status(int board[9][9]) {
   int index;
   int row;
   int col;

   for (index=0; index<9; index++)
      if ((rowOK(board,index) == 0) ||
           (colOK(board,index) == 0))
         return 0;

   for (row=0; row<9; row=row+3)
      for (col=0; col<9; col=col+3)
         if (boxOK(board,row,col) == 0)
            return 0;

   return 1;
}

int solve(int board[9][9]) {
   int guess;
   int row;
   int col;
   int emptyrow = -1;
   int emptycol = -1;

   for (row=0; row<9; row++)
      for (col=0; col<9; col++)
         if (board[row][col] ==0) {
            emptyrow = row;
            emptycol = col;
         }

   if (emptyrow < 0)
      return 1;

   for (guess = 1; guess<10; guess++) {
      board[emptyrow][emptycol] = guess;
      if (status(board) == 1)
         if (solve(board) == 1)
            return 1;
   }

   return 0;
}

【问题讨论】:

    标签: c assembly arm translate


    【解决方案1】:

    有可用的免费编译器(例如 GCC)可以获取 ARM 代码并将其转换为程序集。如果您使用 GCC,我认为您只需要使用 -S 选项即可。

    【讨论】:

    • 我认为大卫上面的回答是“足够可接受的”,因为他指出了一种将上面的源代码直接转换为汇编程序的方法。如果 OP 要求 SO 成员完全手动翻译代码,那么这不是一个真正的问题。
    • 我只是想知道那里是否有编译器,所以我不必自己做这一切,让它变得更容易一些,但如果我必须自己编写所有代码,那很好
    • 你认为编译器是做什么的?
    猜你喜欢
    • 1970-01-01
    • 2017-08-01
    • 2016-02-10
    • 1970-01-01
    • 2023-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-11
    相关资源
    最近更新 更多