使用objconv和ld而不是gcc

时间:2015-04-21 16:04:25

标签: c nasm

我在C中有一组代码,我需要在linux中将它转换为nasm 64位。但是,我不能使用任何C函数或printf。有没有办法使用objconv代替使用BIOS调用?

// plot_64.c  simple plot of sin(x)
#include <stdio.h>

#define ncol 41
#define nrow 21
int main(int argc, char *srgv[])
{
  char points[nrow][ncol]; // char == byte
  char point = '*';
  char space = ' ';
  long int i, j, k, rcx;
  double af[] = {0.0, 1.0, 0.0, -0.166667,
                 0.0, 0.00833, 0.0, -0.000198};
  long int N = 7;
  double x, y;
  double dx = 0.15708; // 6.2832/40.0

  // clear points to space ' '
  for(i=0; i<nrow; i++)
    for(j=0; j<ncol; j++)
      points[i][j] = space;

  // compute points
  x = -3.14159;
  for(j=0; j<ncol; j++)
  {
    y = af[N]*x + af[N-1]; // horners h5loop
    for(rcx=N-2; rcx>=0; rcx--) y = y*x + af[rcx];
    k = (20.0 - (y+1.0)*10.0); // scale 1.0 to -1.0, 0 to 20
    points[k][j] = point;
    x = x + dx;
  }

  // print points
  for(i=0; i<nrow; i++)
  {
    for(j=0; j<ncol; j++)
      printf("%c", points[i][j]);
    printf("\n");
  }
  return 0;
} // end plot_64.c

1 个答案:

答案 0 :(得分:1)

转换为nasm非常简单,只需在gcc上使用相应的参数即可输出汇编文件。

在调用gcc之前,修改源文件以调用自己的函数。将您自己的函数附加到源代码,让您自己的函数执行必要的BIOS调用。

对于浮点数学,简单的替换将很困难。建议谷歌搜索这些功能,并将这些功能附加到您的源代码