11.1 C语言编译系统 11.1.2汇编器 GCC系统的编译器cc1产生汇编代码 最简单的汇编器对输入进行两遍扫描
11.1 C语言编译系统 11.1.2 汇编器 • GCC系统的编译器cc1产生汇编代码 • 最简单的汇编器对输入进行两遍扫描
11.1 C语言编译系统 ·例 一段汇编代码 .L2: 第一编扫描建立符号表, cmpl $0,-4(%ebp) 包括代码标号.L2、.L11 jne .L6 等 jmp .L11 第二遍扫描依据符号表 L11: 中的信息来产生可重定 cmpl $0,-8(%ebp) 位代码 jne .L6 jmp .L12 L12: jmp .L5 .p2align 4,,7 L6:
11.1 C语言编译系统 • 例 一段汇编代码 .L2: 第一编扫描建立符号表, cmpl $0,-4(%ebp) 包括代码标号.L2、.L11 jne .L6 等 jmp .L11 第二遍扫描依据符号表 .L11: 中的信息来产生可重定 cmpl $0,-8(%ebp) 位代码 jne .L6 jmp .L12 .L12: jmp .L5 .p2align 4,,7 .L6:
11.1 C语言编译系统 11.1.2汇编器 GCC系统的编译器cc1产生汇编代码 最简单的汇编器对输入进行两遍扫描 一遍扫描完成汇编代码到可重定位目标代码 的翻译也是完全可能的
11.1 C语言编译系统 11.1.2 汇编器 • GCC系统的编译器cc1产生汇编代码 • 最简单的汇编器对输入进行两遍扫描 • 一遍扫描完成汇编代码到可重定位目标代码 的翻译也是完全可能的
11.1 C语言编译系统 。例 一段汇编代码 .L2: cmpl $0,-4(%ebp) ine .L6 建.L6的▣填链 jmp .L11 L11: cmpl $0,-8(%ebp) jne .L6 加入.L6的回填链 jmp .L12 L12: jmp .L5 .p2align 4,,7 .L6: 顺L6回填链进行回填
11.1 C语言编译系统 • 例 一段汇编代码 .L2: cmpl $0,-4(%ebp) jne .L6 建.L6的回填链 jmp .L11 .L11: cmpl $0,-8(%ebp) jne .L6 加入.L6的回填链 jmp .L12 .L12: jmp .L5 .p2align 4,,7 .L6: 顺.L6回填链进行回填
11.1 C语言编译系统 11.1.2汇编器 GCC系统的编译器cc1产生汇编代码 最简单的汇编器对输入进行两遍扫描 一遍扫描完成汇编代码到可重定位目标代码 的翻译也是完全可能的 。用gcc-main.c 可以得到汇编文件main.s 用as-o main.o main.,s 可以将main.s汇编成可重定位目标文件main.o
11.1 C语言编译系统 11.1.2 汇编器 • GCC系统的编译器cc1产生汇编代码 • 最简单的汇编器对输入进行两遍扫描 • 一遍扫描完成汇编代码到可重定位目标代码 的翻译也是完全可能的 • 用 gcc −S main.c 可以得到汇编文件main.s • 用 as −o main.o main.s 可以将main.s汇编成可重定位目标文件main.o