NJU OS Note

一直以来被忽略的本科教学

  • ld, GNU Linker
  • gcc支持对汇编代码的预编译(还会定义__ASSEMBLER__宏)。
  • wget url下载URL的文件内容。
  • gcc -E foo.c在预处理阶段后停止。
  • volatile声明的变量不能优化。
  • asmGNU的拓展。可以从汇编程序中读取和写入C变量。
  • Extended asm:
    1
    2
    3
    asm asm-qualifiers ( AssemblerTemplate  
    :OutputOperands
    [:InputOperands[: Clobbers]])
    • Qualifier: volatile, inline, goto。
    • AssemblerTemplate: 包含汇编程序指令的文字字符串。
    • OutputOperands(允许使用空列表): [[asmSymbolicName]] constraint(c_variablename),输出约束必须以=作为开头, 常见的约束r for register, m for memory。约束后还需要有个C的变量名,括号是语法的必须部分。
    • InputOperands(允许使用空列表)。
    • eample
      1
      2
      3
      4
      5
      6
      7
      int src = 1;
      int dst;

      asm ("mov %1, %0\n\t"
      "add $1, %0"
      : "=r" (dst)
      : "r" (src));
    • Clobbers: memory( Further, the compiler does not assume that any values read from memory before an asm remain unchanged after that asm;), Compiler barrier.
  • strace追踪当前程序或者进程执行过的系统调用。