2021年2月

c 代码调用汇编代码

汇编 world.asm

SECTION .TEXT
    GLOBAL calc

calc:
    mov rax,rdi
    add rax,r9
    ret

编译:

 $ nasm -f elf64 world.asm -o world.o

C 代码:

#include <stdio.h>

int main(int argc, char *argv[]) {
    extern int calc(int, int, int, int, int, int);
    printf("%d\n", calc(1, 3, 5, 7, 9, 11));
    return 0;
}

合在一块编译成目标文件 并执行

 $ gcc hello.c world.o -o hello
 $ ./hello
  1. 从 C 代码产生汇编代码:

    gcc -S  -Og test.c
  2. 汇编特殊指令:

      .LC0 local constant, e.g string literal.
      .LFB0 local function beginning,
      .LFE0 local function ending,
  3. 源代码只预处理, 编译, 汇编, 链接

      gcc -E -o hello.i hello.c
      gcc -S -o hello.s hello.c
      gcc -c -o hello.o hello.c
      gcc -o hello hello.c

C 语言参考

函数: 表达式 (操作符 + 操作数(变量 + 常量))
数据: 变量 + 常量

预处理

  1. #include <stdio.h>
  2. #define STEP 20 //符号常量

数据类型

signed + unsigned

  1. char
  2. short (short int)
  3. int
  4. long (long int)
  5. float
  6. double (浮点默认)
  7. long double

函数

  1. if the return type is omitted, int is assumed -> dummy(){}
  2. C does not allow functions to be defined inside other functions.

Input/Output

char c = getchar();
putchar(c);

编译

  1. cc main.c getline.c strindex.c
  2. c main.c getline.o strindex.o