cmu15213 L5 Machine-Level Programming I: Basics

大部分知识都学过了,这里快速过一下PPT,主要是 64 位的那一套不太熟悉。
cmu15213 L5 Machine-Level Programming I: Basics_第1张图片

文章目录

    • History of Intel processors and architectures
    • Assembly Basics: Registers, operands, move
    • Arithmetic & logical operations
    • C, assembly, machine code

History of Intel processors and architectures

cmu15213 L5 Machine-Level Programming I: Basics_第2张图片
cmu15213 L5 Machine-Level Programming I: Basics_第3张图片
cmu15213 L5 Machine-Level Programming I: Basics_第4张图片
cmu15213 L5 Machine-Level Programming I: Basics_第5张图片
cmu15213 L5 Machine-Level Programming I: Basics_第6张图片
cmu15213 L5 Machine-Level Programming I: Basics_第7张图片

Assembly Basics: Registers, operands, move

cmu15213 L5 Machine-Level Programming I: Basics_第8张图片
cmu15213 L5 Machine-Level Programming I: Basics_第9张图片
cmu15213 L5 Machine-Level Programming I: Basics_第10张图片
cmu15213 L5 Machine-Level Programming I: Basics_第11张图片
cmu15213 L5 Machine-Level Programming I: Basics_第12张图片
这一页很重要。前面加 e 的表示 extended,有 4 个字节,也就是 32 位。前面带 r 的有 8 个字节,也就是 64 位。
cmu15213 L5 Machine-Level Programming I: Basics_第13张图片
这一页也很重要
cmu15213 L5 Machine-Level Programming I: Basics_第14张图片
cmu15213 L5 Machine-Level Programming I: Basics_第15张图片
重要:movq 中的 q 指的是 8 个字节。%rax,%eax,%ax 依次是 8、4、2 个字节,也就是 64、32、16 位。
cmu15213 L5 Machine-Level Programming I: Basics_第16张图片
在这里都是 movq src dst$0x4, $-147 是立即数, 加括号表示寄存器中存的是一个地址,访问的是该地址中的元素:(%rax)
cmu15213 L5 Machine-Level Programming I: Basics_第17张图片
cmu15213 L5 Machine-Level Programming I: Basics_第18张图片
cmu15213 L5 Machine-Level Programming I: Basics_第19张图片
cmu15213 L5 Machine-Level Programming I: Basics_第20张图片
cmu15213 L5 Machine-Level Programming I: Basics_第21张图片
cmu15213 L5 Machine-Level Programming I: Basics_第22张图片
cmu15213 L5 Machine-Level Programming I: Basics_第23张图片
cmu15213 L5 Machine-Level Programming I: Basics_第24张图片
cmu15213 L5 Machine-Level Programming I: Basics_第25张图片
cmu15213 L5 Machine-Level Programming I: Basics_第26张图片
cmu15213 L5 Machine-Level Programming I: Basics_第27张图片
cmu15213 L5 Machine-Level Programming I: Basics_第28张图片

Arithmetic & logical operations

cmu15213 L5 Machine-Level Programming I: Basics_第29张图片
这个啊,我还真试了一下,但是需要开 -O2 才能有这样的优化:

在这里插入图片描述
如果不开优化的话(是首先加了两次得到 3x ,然后再向左移两位,但是我不明白他为什么非要把 %rdi 中的东西借助内存移到 %rdx 中呢?):
cmu15213 L5 Machine-Level Programming I: Basics_第30张图片
所以 lea 的好处就是可以用来计算类似 x+k*y ,其中 k=1,2,4,8 的情况。另外一个好处就是不用访问内存就可以计算地址。

cmu15213 L5 Machine-Level Programming I: Basics_第31张图片
这个顺序是真的hhh,有时候真的不知道啥时候 src 在前,啥时候 dst 在前。

cmu15213 L5 Machine-Level Programming I: Basics_第32张图片
cmu15213 L5 Machine-Level Programming I: Basics_第33张图片
ok 从这个例子我可以大致推测出:函数的参数依次由 %rdi,%rsi,%rdx 来存储(为什么 s 不在 d 前面!摔!)。

嗯。。你们城里人计算 y*48 都是先用 lea 算出一个 y*3 然后再左移四位的啊,社会社会。

cmu15213 L5 Machine-Level Programming I: Basics_第34张图片

C, assembly, machine code

cmu15213 L5 Machine-Level Programming I: Basics_第35张图片
gcc -Og -S-Og 的话能够使进行优化之后尽可能地不影响调试:

在这里插入图片描述
cmu15213 L5 Machine-Level Programming I: Basics_第36张图片
cmu15213 L5 Machine-Level Programming I: Basics_第37张图片
cmu15213 L5 Machine-Level Programming I: Basics_第38张图片
cmu15213 L5 Machine-Level Programming I: Basics_第39张图片
cmu15213 L5 Machine-Level Programming I: Basics_第40张图片
cmu15213 L5 Machine-Level Programming I: Basics_第41张图片
cmu15213 L5 Machine-Level Programming I: Basics_第42张图片
cmu15213 L5 Machine-Level Programming I: Basics_第43张图片
cmu15213 L5 Machine-Level Programming I: Basics_第44张图片
cmu15213 L5 Machine-Level Programming I: Basics_第45张图片
cmu15213 L5 Machine-Level Programming I: Basics_第46张图片
cmu15213 L5 Machine-Level Programming I: Basics_第47张图片

你可能感兴趣的:(cmu,15-213)