【游戏开发】cmu11313 C6 Machine-Level Primramming I: Sosics
大部分知识都学过了,这里快速过一下PPT,主要是 64 位的那一套不太熟悉。
文章目录
- History of Intel processors and architectures
- Assembly Basics: Registers, operands, move
- Arithmetic & logical operations
- C, assembly, machine code
History of Intel processors and architectures






Assembly Basics: Registers, operands, move





这一页很重要。前面加 e 的表示 extended,有 4 个字节,也就是 32 位。前面带 r 的有 8 个字节,也就是 64 位。
这一页也很重要

重要:movq 中的 q 指的是 8 个字节。%rax,%eax,%ax 依次是 8、4、2 个字节,也就是 64、32、16 位。
在这里都是 movq src dst ,$0x4, $-147 是立即数, 加括号表示寄存器中存的是一个地址,访问的是该地址中的元素:(%rax)











Arithmetic & logical operations

这个🐂🍺啊,我还真试了一下,但是需要开 -O2 才能有这样的优化:

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

这个顺序是真的hhh,有时候真的不知道啥时候 src 在前,啥时候 dst 在前。


ok 从这个例子我可以大致推测出:函数的参数依次由 %rdi,%rsi,%rdx 来存储(为什么 s 不在 d 前面!摔!)。
嗯。。你们城里人计算 y*48 都是先用 lea 算出一个 y*3 然后再左移四位的啊,社会社会。

C, assembly, machine code

用 gcc -Og -S ,-Og 的话能够使进行优化之后尽可能地不影响调试:













以上是 【游戏开发】cmu11313 C6 Machine-Level Primramming I: Sosics 的全部内容, 来源链接: utcz.com/a/70993.html


