编译NASM程序时出错 - 汇编程序

时间:2017-11-02 17:11:21

标签: c gcc assembly nasm

您好目前正在尝试 在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

0 个答案:

没有答案