Contents
  1. 1. 第3章 程序的机器级表示
    1. 1.1. 访问信息
    2. 1.2. 控制
    3. 1.3. 过程

第3章 程序的机器级表示

这章主要是讲程序编译成汇编是什么样的,各种不同指令是如何对应的,如何与硬件交互的
掌握汇编就是掌握了C语言的底层能力,是c语言如何操作底层硬件的基础,可以很好的理解c语言的行为,从根源上理解不同的操作,如果遇到不能理解的C语言行为,可以检查汇编,从底层去解释,这个也是唯一能从更深层次了解C语言的方法。
了解汇编也是了解计算机组成的开端
汇编指令分为几种

访问信息

操作数指示符
数据传送指令
压入和弹出栈数据

一共16个存储64位值的通用目的寄存器
63 31 15 7 0
%rax %eax %ax %al 返回值
%rbx %ebx %bx %bl 被调用者保存
%rcx %ecx %cx %cl 第4个参数
%rdx %edx %dx %dl 第3个参数
%rsi %esi %si %sil 第2个参数
%rdi %edi %di %dil 第1个参数
%rbp %ebp %bp %bpl 被调用者保存
%rsp %esp %sp %spl 栈指针
%r8 %r8d %r8w %r8b 第5个参数
%r9 %r9d %r9w %r9b 第6个参数
%r10 %r10d %r10w %r10b 调用者保存
%r11 %r11d %r11w %r11b 调用者保存
%r12 %r12d %r12w %r12b 被调用者保存
%r13 %r13d %r13w %r13b 被调用者保存
%r14 %r14d %r14w %r14b 被调用者保存
%r15 %r15d %r15w %r15b 被调用者保存
操作数被分为3种,立即数(immediate),寄存器(register),内存引用
内存引用,又有绝对寻址、间接寻址、变址寻址,基址寻址,比例变址寻址
传送指令:movb,movw,movl,movq,movabsq
零扩展:movzbw,movzbl,movzwl,movzbq,movzwq
符号扩展:movsbw,movsbl,movswl,movsbq,movswq,movslq,cltq
压入和弹出栈:pushq,popq
算术和逻辑操作
加载有效地址
一元和二元操作
移位操作
特殊的算术操作
加载有效地址:leaq S,D
一元:INC D,DEC D,NEG D,NOT D
二元:ADD S,D SUB S,D IMUL S,D XOR S,D OR S,D AND S,D
移位:SAL k,D SHL k,D SAR k,D SHR k,D

控制

条件码
访问条件码
跳转指令
用条件控制来实现条件分支
用条件传送实现条件分支
循环
switch语言

条件码
CF:进位标志
ZF:零标志
SF:符号标志
OF:溢出标志
CMP S1, S2
cmpb,cmpw,cmpl,cmpq
TEST S1,S2
testb,testw,testl,testq
访问条件码
sete D,setne D,sets D,setns D,setg D,setge D,setl D,setle D,seta,setae,setb,setbe
跳转指令
jmp,je,jne,js,jns,jg,jge,jl,jle,ja,jae,jb,jbe
条件控制实现条件分支:goto风格
条件传送实现条件分支:计算各个分支结构,根据数据返回结果,有限制,但效率高
循环
do-while:条件+goto
while:jump to middle,guarded-do
for:同while
switch:跳转表(jump table)

过程

运行时栈
转移控制
数据传送
栈上的局部存储
寄存器中的局部存储空间
递归过程
转移控制

call Label,call * Operand ,ret
数据传送,最大6个,使用寄存器,其他使用栈帧

Contents
  1. 1. 第3章 程序的机器级表示
    1. 1.1. 访问信息
    2. 1.2. 控制
    3. 1.3. 过程