NJU OS Note
一直以来被忽略的本科教学
ld, GNU Linkergcc支持对汇编代码的预编译(还会定义__ASSEMBLER__宏)。wget url下载URL的文件内容。gcc -E foo.c在预处理阶段后停止。volatile声明的变量不能优化。asm是GNU的拓展。可以从汇编程序中读取和写入C变量。Extended asm:1
2
3asm asm-qualifiers ( AssemblerTemplate
:OutputOperands
[:InputOperands[: Clobbers]])- Qualifier: volatile, inline, goto。
- AssemblerTemplate: 包含汇编程序指令的文字字符串。
- OutputOperands(允许使用空列表):
[[asmSymbolicName]] constraint(c_variablename),输出约束必须以=作为开头, 常见的约束rfor register,mfor memory。约束后还需要有个C的变量名,括号是语法的必须部分。 - InputOperands(允许使用空列表)。
- eample
1
2
3
4
5
6
7int 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追踪当前程序或者进程执行过的系统调用。