您好目前正在尝试 在NASM中发挥高斯函数, 但是当我尝试编译它时我可以在C中使用这个函数, 我收到了错误..
我得到的错误:
ISO C does not support the 'I64' ms_printf length modifier [-Wformat=]
我的NASM代码:
global gauss
section .text
gauss:
mov rax, rdi
imul rax, rax
add rax, rdi
mov dl, 2
div dl
ret
我的gauss.c文件:
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <inttypes.h>
#define RED "\033[31m"
#define DEFAULT "\033[39m"
#define BOLD "\033[1m"
#define RESET "\033[0m"
extern uint64_t gauss(uint64_t n);
int main(int argc, char* argv[]) {
if(argc < 2) {
fputs(BOLD RED "Not enough arguments!\n" RESET, stderr);
return EXIT_FAILURE;
}
char* test = NULL;
uint64_t val = strtoull(argv[1], &test, 10);
if(*test) {
fprintf(stderr, BOLD RED "Invalid Argument: %s\n" RESET, argv[1]);
return EXIT_FAILURE;
}
uint64_t res = gauss(val);
printf("gauss(%"PRIu64") = %"PRIu64"\n", val, res);
return EXIT_SUCCESS;
}
我输入的命令:
> nasm -f elf64 gauss.asm
> gcc -std=c11 -Wall -Wextra -pedantic -O2 -o prog gauss.c
gauss.o