我在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
答案 0 :(得分:1)
转换为nasm非常简单,只需在gcc上使用相应的参数即可输出汇编文件。
在调用gcc之前,修改源文件以调用自己的函数。将您自己的函数附加到源代码,让您自己的函数执行必要的BIOS调用。
对于浮点数学,简单的替换将很困难。建议谷歌搜索这些功能,并将这些功能附加到您的源代码