2.1 机器级编程:基础
一、汇编 / 机器语言📌
1、基本概念📌
- 指令集架构(ISA):Instruction Set Architecture
- 微结构:架构的具体实现
2、将C
代码转换成汇编📌
Info
※ 汇编中的数据类型
-
整数:
- 可以是1、2、4或8字节
- 用于存储数据值。
- 也用于存储地址(无类型指针)
-
浮点:
- 可以是4、8或10字节
-
代码:
- 是一系列指令的字节序列
-
没有聚合类型:
- 如数组或结构体
- 内存中只有连续分配的字节
- 对比
二、汇编基础📌
1、×86-64
寄存器📌
2、移动数据📌
-
立即数(Immediate)
- 类似于 C 语言中的常量,但前面加上
$
符号,e.g.$0x400
- 类似于 C 语言中的常量,但前面加上
-
寄存器(Register)
- 注:
%rsp
保留做特殊用处
- 注:
-
内存(Memory)
- 由寄存器给出地址的连续 8 字节的内存,e.g.
(%rax)
- 由寄存器给出地址的连续 8 字节的内存,e.g.
Note
寄存器寄存地址,(%rax)
相当于解指针操作
三、数学 / 逻辑运算📌
1、地址运算📌
Expression | Address Computation | Address |
---|---|---|
0x8(%rdx) | 0xf000 + 0x8 | 0xf008 |
(%rdx, %rcx) | 0xf000 + 0x100 | 0xf100 |
(%rdx, %rcx, 4) | 0xf000 + 4*0x100 | 0xf400 |
0x80(, %rdx, 2) | 2*0xf000 + 0x80 | 0x1e080 |
2、指令📌
Example
类似movq
,但是专门用于地址计算,不涉及数据移动,结果储存在寄存器中
(1)双目运算📌
指令 | 计算 |
---|---|
addq | Dest = Dest + Src |
subq | Dest = Dest - Src |
imulq | Dest = Dest * Src |
salq | Dest = Dest << Src |
sarq | Dest = Dest >> Src |
shrq | Dest = Dest >> Src |
xorq | Dest = Dest ^ Src |
andq | Dest = Dest & Src |
orq | Dest = Dest | Src |
(2)单目运算📌
指令 | 计算 |
---|---|
incq | Dest = Dest + 1 |
decq | Dest = Dest - 1 |
negq | Dest = - Dest |
notq | Dest = ~Dest |