-
## 简明 X86 汇编语言教程
原创:司徒彦南 2002 年 4 月 8 日
徐远超于2010-02-25收集整理 2010-03-10第2次补充 2010-03-25第3次补充
目录
第0章写在前面.....2
第一章汇编语言简介.....3
第二章认识处理器.....4
2.1寄存器.....4
2.2使用寄存器.....6
第三章操作内存.....12
3 3全局寄存器优化.....38
5.4x86体系结构上的并行最大化和指令封包.....40
5.5存储优化.....42
第六章Linux X86汇编程序设计.....46
6.1编译和链接.....46
6.2基本示例.....46
第七章X86汇编指令集汇总.....47
一.数据传输指令.....47
二、算术运算指令.....49
三、逻辑运算指令.....49
四、串指令 instructions.....54
第八章GCC内联汇编基础.....54
1.GCC汇编格式.....55
2.内联汇编基本形式.....56
3.扩展形式内联汇编.....56
4. 深入constra.....59
5. 结束语.....63
## 第 0 章 写在前面
我不想夸大或者贬低汇编语言。但我想说,汇编语言改变了20世纪的历史。与前辈相比,我们这一代编程人员
0 码力 |
63 页 |
598.28 KB
| 2 年前 3
-
## Better x86 Assembly Generation with Go
Michael McLoughlin
Gophercon 2019
Uber Advanced Technologies Group
Go provides the ability to write functions in assembly language.
Assembly language is a
0 码力 |
155 页 |
13.54 MB
| 2 年前 3
-
## AMD
# 从汇编角度看编译器优化
by 彭于斌 (@archibate)
往期录播:https://www.bilibili.com/video/BV1fa411r7zp
课程 PPT 和代码:https://github.com/parallel101/course

## I ❤️ C
第 0 章:汇编语言
## x64 架构下的寄存器模型

## 通用寄存器:32 位时代
• 32 位 x86 架构中的通用寄存器有:
• eax, ecx, edx, ebx,
0 码力 |
108 页 |
9.47 MB
| 2 年前 3
-
const expect = std.testing.expect;
const WINAPI: std.builtin.CallingConvention = if (native_arch == .x86) .Stdcall else
extern "kernel32" fn ExitProcess(exit_code: c_uint) callconv(WINAPI) noreturn; calling convention of the function.
const WINAPI: std.builtin.CallingConvention = if (native_arch == .x86) .Stdcall el;
extern "kernel32" fn ExitProcess(exit_code: u32) callconv(WINAPI) noreturn;
extern // kernel syscall does not preserve these registers.
: "rcx", "r11"
);
For x86 and x86_64 targets, the syntax is AT&T syntax, rather than the more popular Intel syntax. This
0 码力 |
238 页 |
7.80 MB
| 2 年前 3
-
5a42790309bfa0aff5b7/p2_2.jpg)
· 我是作者之一
- 这本书在写的时候国内的 Go 语言书很少
• 现在销量约 2w+
- 直到现在,CGO 和 plan9 汇编的内容依然是独一份
## 目录
为什么要读书 01
带着问题读书 02
怎么样读书 03
应该读哪些书 04
## 第一部分 为什么要读书
## 为什么要读书
- 完整的知识和上下文
0 码力 |
16 页 |
9.09 MB
| 2 年前 3
-
存储系统的发明者之一
RISC-V 是学生学习指令集架构和汇编语言编程的不错选择,二者是后续使用高级语言的基础。本书清晰地介绍了 RISC-V,还包含对其演化历史的深刻见解,以及与其他常见架构的对比。以过去的指令集架构为鉴,RISC-V 的设计者能规避一些不必要、不合理的特性,使其易于教学。虽然它很简洁,但它的强大足以在实际应用中广泛使用。很久以前我教过汇编编程的入门课,如果我现在去教这门课,我很乐意用本书作为教材。 ——迈克尔·贝德福特·泰勒(Michael B. Taylor),华盛顿大学教授
本书对于 RISC-V ISA 的所有从业人士来说是十分宝贵的参考。操作码按几种有用的格式呈现,便于快速查阅,也易于汇编代码的开发和解释。此外,书中关于如何使用 RISC-V 的阐释和示例能让程序员的工作更轻松。书中 RISC-V 和其他 ISA 的对比很有趣,也展示了 RISC-V 设计者做出设计决策的原因。
——梅根·瓦克斯(Megan 的生产、测试、封装等环节。近年来包含微处理器的 SoC(系统级芯片)产品在芯片产品中的比重已达到 70% 以上,这表明芯片应用与 CPU 架构之间的关联性正在增强。历史上,在 PC 和互联网时期,x86 架构芯片占据优势,而在移动互联网时期,ARM 架构芯片占据优势,今后,在智能互联时期,CPU 架构格局也会随之发生变化。
近年来,国际上一种新兴的开源精简指令集架构 CPU(RISC-V),为全
0 码力 |
223 页 |
15.31 MB
| 2 年前 3
-
32
2.10 结束语 ..... 32
2.11 扩展阅读 ..... 33
第三章 RISC-V 汇编语言 ..... 41
3.1 导言 ..... 41
3.2 函数调用规范 (Calling convention) ..... 41
3.3 汇编器 ..... 43
3.4 链接器 ..... 46
3.5 静态链接和动态链接 ..... 49
3.6 RISC-V 是学生学习指令集架构和汇编级编程的理想选择,而它们是以后用高级语言工作的基础。这本写得很清楚的书提供了对 RISC-V 的很好的介绍,再加上一些对其演化历史的深刻见解及与其它常见架构的比较。以过去的指令集架构为鉴,RISC-V 的设计者能够避免一些不必要的、不合理的特征,这让教学过程变得容易。即使它很简洁,它也足够强大,能在实际应用中广泛使用。很久以前我教过汇编编程的入门课,如果我现在去教这门课的话,我会很乐意用这本书作为教材。
——John Mashey,MIPS 指令集架构的设计者之一
这本书对于任何使用 RISC-V ISA 的人来说都是十分宝贵的参考。为了便于快速查阅,操作码按几种有用的格式呈现,这让编写和解释汇编代码变得简单。此外,对于如何使用这个 ISA 的解释和示例也让程序员的工作更容易。和其他 ISA 比较的部分很有意思,它们解释了 RISC-V 设计者们做出他们的设计决策的原因。
——Megan Wachs,博士,SiFive
0 码力 |
164 页 |
8.85 MB
| 2 年前 3
-
条件跳转指令
- 让不占用相同资源的任务同时进行,这也是CPU流水线的初衷。但理想是美好的,现实是骨感的,对于程序来说,指令不只是一个简单的任务,有时候我们需要做判断,来决定要执行的具体任务,这就是分支,在
汇编语言中体现为条件跳转指令。
- 例如我们这里给任务清单加一个,如果烧开水时被烫伤,则直接去医院的特殊任务。
- 特点:一旦触发去医院这个支线,则后面的任务都不用做了,直接跳过。
汇编看 if-else
int func(int x) {
if (x > 0) {
return 1;
} else {
return 2; DWORD PTR -4[rbp], 0
jle .L2
mov eax, 1
jmp .L3
.L2:
mov eax, 2
.L3:
pop rbp
ret
## 归纳得出 if-else 转换成汇编后的固定格式
• if (条件 > 0) { // 大于才执行 A,否则 B
• cmp 条件, 0
• 分支 A;
• } else {
- jle .L2 // 小于等于才跳到 0 码力 |
47 页 |
8.45 MB
| 2 年前 3
-
4.8.2 采用 NFS 共享文件 ..... 48
4.8.3 通过 tftp 传输文件 ..... 49
4.8.4 通过 9p virtio 共享文件 ..... 49
4.9 学习汇编 ..... 50
4.10 学习 C 语言 ..... 51
4.10.1 本地编译和运行 ..... 51
4.10.2 交叉编译和运行 ..... 51
4.11 运行任意的 make labs/linux-0.11-lab 后,可直接在 Linux Lab 内使用
– https://tinylab.org/linux-0.11-lab
## • CS630 QEMU Lab
– 用于 X86 Linux 汇编学习,今后仅集成到 Linux Lab Disk,即泰晓 Linux 实验盘
— 下载到 labs/cs630-qemu-lab 后,可直接在 Linux Lab 内使用
– https://tinylab arm/ebf-imx6ull 支持
— 新增命令行自动补全脚本,允许直接在命令行补全板子信息,提升使用效率
### • v0.6 rc1
- 修复插件中的 BSP 包下载功能
- 修复 x86 架构的内核编译问题
- 修复 aarch64/virt 开发板 U-Boot 引导问题
####### 1.6.7 v0.7 @ 2021.06.03
v0.7 开发并发布首个 Linux Lab
0 码力 |
73 页 |
1.54 MB
| 2 年前 3
-
4.8.2 采用 NFS 共享文件 ..... 47
4.8.3 通过 tftp 传输文件 ..... 48
4.8.4 通过 9p virtio 共享文件 ..... 48
4.9 学习汇编 ..... 49
4.10 学习 C 语言 ..... 50
4.10.1 本地编译和运行 ..... 50
4.10.2 交叉编译和运行 ..... 50
4.11 运行任意的 make labs/linux-0.11-lab 后,可直接在 Linux Lab 内使用
– https://tinylab.org/linux-0.11-lab
## • CS630 QEMU Lab
– 用于 X86 Linux 汇编学习,今后仅集成到 Linux Lab Disk,即泰晓 Linux 实验盘
— 下载到 labs/cs630-qemu-lab 后,可直接在 Linux Lab 内使用
– https://tinylab arm/ebf-imx6ull 支持
— 新增命令行自动补全脚本,允许直接在命令行补全板子信息,提升使用效率
### • v0.6 rc1
- 修复插件中的 BSP 包下载功能
- 修复 x86 架构的内核编译问题
- 修复 aarch64/virt 开发板 U-Boot 引导问题
####### 1.6.7 v0.7 @ 2021.06.03
v0.7 开发并发布首个 Linux Lab
0 码力 |
70 页 |
1.53 MB
| 2 年前 3