简明 X86 汇编语言教程简明 X86 汇编语言教程 原创:司徒彦南 2002 年 4 月 8 日 徐远超于 2010-02-25 收集整理 2010-03-10 第 2 次补充 2010-03-25 第 3 次补充 目录 第 Ο 章 写在前面............................................................................ .......................................2 第一章 汇编语言简介.............................................................................................................3 第二章 认识处理器........................... ................................................................................42 第六章 Linux X86 汇编程序设计 ........................................................................................46 60 码力 | 63 页 | 598.28 KB | 1 年前3
C++高性能并行编程与优化 - 课件 - 04 从汇编角度看编译器优化从汇编角度看编译器优化 by 彭于斌( @archibate ) 往期录播: https://www.bilibili.com/video/BV1fa411r7zp 课程 PPT 和代码: https://github.com/parallel101/course 高性能并行编程与优化 - 课程大纲 • 分为前半段和后半段,前半段主要介绍现代 C++ ,后半段主要介绍并行编程与优化。 1 课程安排与开发环境搭建: cmake 与 git 入门 2.现代 C++ 入门:常用 STL 容器, RAII 内存管理 3.现代 C++ 进阶:模板元编程与函数式编程 4.编译器如何自动优化:从汇编角度看 C++ 5.C++11 起的多线程编程:从 mutex 到无锁并行 6.并行编程常用框架: OpenMP 与 Intel TBB 7.被忽视的访存优化:内存带宽与 cpu 缓存机制 8 9 及以上( Linux 用户) CMake 3.12 及以上(跨平台作业) Git 2.x (作业上传到 GitHub ) CUDA Toolkit 10.0 以上( GPU 专题) 第 0 章:汇编语言 x64 架构下的寄存器模型 通用寄存器: 32 位时代 • 32 位 x86 架构中的通用寄存器有: • eax, ecx, edx, ebx, esi, edi, esp, ebp0 码力 | 108 页 | 9.47 MB | 1 年前3
RISC-V 开放架构设计之道 1.0.0发明者之一 RISC-V 是学生学习指令集架构和汇编语言编程的不错选择,二者是后续使用高 级语言的基础。本书清晰地介绍了 RISC-V,还包含对其演化历史的深刻见解,以 及与其他常见架构的对比。以过去的指令集架构为鉴,RISC-V 的设计者能规避 一些不必要、不合理的特性,使其易于教学。虽然它很简洁,但它的强大足以在实 际应用中广泛使用。很久以前我教过汇编编程的入门课,如果我现在去教这门课, 我很乐意用本书作为教材。 ——迈克尔·贝德福特·泰勒(Michael B. Taylor),华盛顿大学教授 本书对于 RISC-V ISA 的所有从业人士来说是十分宝贵的参考。操作码按几种有 用的格式呈现,便于快速查阅,也易于汇编代码的开发和解释。此外,书中关于 如何使用 RISC-V 的阐释和示例能让程序员的工作更轻松。书中 RISC-V 和其他 ISA 的对比很有趣,也展示了 RISC-V 设计者做出设计决策的原因。 RISC-V 指令系统架构设计的先进性。 对于计算机专业和电子工程专业师生及计算机系统架构师和处理器设计者来说, 本书具有极好的参考价值。书中简明扼要地介绍了 RISC-V 各指令模块、汇编语言程 序及汇编指示符和伪指令、过程调用约定、链接与加载、浮点运算指令、原子指令、 压缩指令、向量指令、特权模式与特权指令等内容。通过阅读本书,读者可以快速了 解 RISC-V 指令集架构最基础的内容和0 码力 | 223 页 | 15.31 MB | 1 年前3
RISC-V 手册 v2(一本开源指令集的指南).................................................................................. 33 第三章 RISC-V 汇编语言 ................................................................................................ convention) ................................................................................. 41 3.3 汇编器 ................................................................................................. RISC-V 是学生学习指令集架构和汇编级编程的理想选择,而它们是以后用高级语言工 作的基础。这本写得很清楚的书提供了对 RISC-V 的很好的介绍,再加上一些对其演化 历史的深刻见解及与其它常见架构的比较。以过去的指令集架构为鉴,RISC-V 的设计 者能够避免一些不必要的、不合理的特征,这让教学过程变得容易。即使它很简洁,它 也足够强大,能在实际应用中广泛使用。很久以前我教过汇编编程的入门课,如果我现 在0 码力 | 164 页 | 8.85 MB | 1 年前3
2.1.3 如何用Go模拟CPU计算机的演化历史 – 硬件计算到冯诺伊曼架构 • 构建虚拟世界 – MOS 6502 • 控制单元(control unit) • 运算逻辑单元(arithmetic logic unit) • 6502汇编器与链接器 • 未来目标 1970年程序员 CPU 80KHz 单核 内存 64KB 手编磁芯 老娘把你送上月球 2021年程序员 CPU 2,400,000KHz 4核 内存 8,000 虚拟内存?不存在的 • 都是用汇编编写程序 Go模拟Apple II • ZHUOS = Zhuo’s Hardly Usable Operating System for fun • 小结 • 早期电脑都是直接读写内存/硬件 • 操作系统仅仅是帮助处理IO • 进程?不存在的 • 用户?不存在的 • 虚拟内存?不存在的 你说汇编? 可GCC 不支持6502啊 Go 编写汇编器 • 破除迷信 • processing https://www.youtube.com/watch?v=KINIAgRpkDA Go 编写汇编器 • 如何开始? • http://www.appleoldies.ca/anix/ • 先读读前人的工作 • 然后用Go实现! Go 编写汇编器等工具 • 用Go编写的汇编器编写ZHUOS • Tokenizer + Parser(可以参加比赛) • 解析语句 • 几乎不用的就直接不实现0 码力 | 42 页 | 7.10 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 性能优化之无分支编程 Branchless ProgrammingA 的吧,所以他只是把分支 A 的比例下调到 80% ,直到第二次又被打脸,下调到最初 的起点 50%…… 从汇编看 if-else jle .L2 :如果上一次 cmp 的结果为小于等于,则跳转到 .L2 jmp .L3 :无条件跳转到 .L3 归纳得出 if-else 转换成汇编后的固定格式 • if ( 条件 > 0) { // 大于才执行 A ,否则 B • 分支 A; equal ne 不等于 not equal http://unixwiz.net/techtips/x86-jumps.html 手动进行无分支优化的方法 无分支优化:从汇编角度分析 • 发生了什么?让我们把源码和汇编逐个对应。 • x 是第一个参数(通过 edi 传入,被存入 rbp 指向的堆 栈) • 比较 x 和 0 的大小( cmp 命令把刚存入堆栈的 x 和 0 比较) ifelse 的。 “ 摆大烂”的效果和 ifelse 几乎一样,也就是说根本没用,三目运算符还是生成了 低效的跳转指令,自己不上进,还指望编译器来救你?你还不如坐等天上掉馅饼。 从汇编角度分析( -O0 ) 从汇编角度分析( -O3 ) 因为 clamp 用了两次分支, if-else-if-else ,刚才 -O0 时是需要连续两次条件跳转指令的。 但是在 -O3 的淫威下,编译器把其中一个条件跳转自动优化掉了(0 码力 | 47 页 | 8.45 MB | 1 年前3
ffmpeg基本杂谈_20171116
mingw + ms交叉编译 4.Intel + ms 本地化编译(部分) 5.VS直接编译需要改源码。 FFmpeg 汇编 在linux上开发,gcc编译的,分为2类,嵌⼊式汇编格式(.c/.S);汇编⽂件 格式(.asm).gcc 使⽤AT&T语法格式的汇编⾮Intel. 指令⽀持: 1.ppc 2.x86(IA芯⽚) 3.arm 4.Sparc(Sun) 5.bfin、sh4(DSP芯⽚) FFmpeg Framework AVCodec AVInputFormat SwsContext AVOutputFormat AVUtil库函数 IO、NetWork、Memory、汇编、算法、数据结构 AVAudioResample AVFilter Protocol FFmpeg 转码流程 av_format_read ff_format_read 协议、⽂件格式0 码力 | 55 页 | 20.91 MB | 1 年前3
尝试用RUST写教学操作系统尝试用RUST写教学操作系统 向勇、陈渝 清华大学计算机系 20181123 1 背景 • 用什么语言写操作系统? – 汇编 – C – C++ – GO – RUST – … 2 3 各位老师所教的课程信息统计 计算机组成原理 编译原理 操作系统 其他 A B C D 提交 多选题 1分 此题未设答案 此题未设答案 面临的问题 • 教学的要求 – 简洁 • 实验环境:Nachos、XV6、ucore • CPU:X86、MIPS、ARM、RISC-V • 语言:汇编、C、… – 真实 • QEMU、开发板、真实系统 – 开放 • 树莓派、Edison、FPGA 4 已有的尝试 • 用C语言写OS – MIT 6.828 – Harvard cs161 形成一组基于RustOS的操作系统课实验 https://rucore.gitbook.io/rust-os-docs/bootloader 20 后续工作 • 适合操作系统开发的语言剪裁 – 汇编 – C – Rust – … – 什么是适合内核开发的语言特征? 21 22 您认为系统软件教学应该选择什么程序设计语言? 作答 正常使用主观题需2.0以上版本雨课堂0 码力 | 23 页 | 1.53 MB | 1 年前3
WebAssembly 简介 - 陈思衡局限于某一种语言) • 无法与现有生态配合 缺点 Async 的 Wasm 基于 fiber / ucontext Async Wasm 解决方案 wasmtime-fiber 是一个通过内联汇编,保存当前寄存 器和栈数据来实现有栈协程的 rust 库。 wasmtime-fiber Ucontext 和 fiber 功能相同,但是 linux 的系统库。 ucontext 执行流程 • 与 WASM 的语言无关。 • 可以复用 WASM 编写语言本身的生态。 • 不会对 WASM 执行产生性能损失 基于 fiber / ucontext 优点 • 实现困难,涉及到汇编。容易出错。 • 需要极其注意内存安全。 缺点 Async Wasm 解决方案 效果示例 Async Wasm 解决方案 基于 Asyncify(Binaryen) Async Wasm Photo / image / chart Asyncify 原理示意 Async Wasm 解决方案 执行流程 Async Wasm 解决方案 • 与 WASM 的语言无关。 • 与 CPU 汇编指令无关。 • 可以跨机器调度。 Asyncify(Binaryen) 优点 • 运行效率有所下降。 缺点 Async Wasm 解决方案 Asyncify 跨机器调度 Async0 码力 | 24 页 | 773.46 KB | 1 年前3
Nim 2.0.2 中文手册语句会使循环结构进⾏下⼀次迭代,其只允许在循环中使⽤。continue 语句是嵌套 block 的语法糖: 等价于: 汇编语句 不安全的 asm 语句⽀持将汇编代码直接嵌⼊到 Nim 代码中。 在汇编代码中引⽤ Nim 的标识符需要包含在特定字符中,该字符可 以在语句的编译指示中指定。默认特定字符是 '`' : 如果使⽤ GNU 汇编器,则会⾃动插⼊引号和换⾏符: 替代: echo "Please tell me your 出语句。 根据所⽤的 C 编译器,⽣成的 C 函数会被声明成 __declspec(naked) 或者 __attribute__((naked)) 。 注意: 这个编译指示应该只⽤于完全由汇编语句构成的过程。 error 编译指示 error 编译指示可使编译器输出⼀条包含指定内容的错误消息。但是输出了这个错误消息后,编译过程并不⼀定会中⽌。 type Node = ref NodeObj 编译指示 linearScanEnd 编译指示⽤来告知编译器如何处理 Nim case 语句。这个编译指示在语法上必须是⼀个语句: 在这个例⼦⾥, 0 和 1 分⽀⽐其它情况更加常⻅。所以,⽣成的汇编代码应该⾸先测试这两个值以使 CPU的分⽀预测器有更⼤的 ⼏率预测成功(避免出现开销⾼昂的 CPU 流⽔线停滞)。 其它的情况则可以放到跳转表⾥,其开销为 O(1),但代价是⼀次(很可能出 现的)流⽔线停滞。0 码力 | 127 页 | 7.05 MB | 1 年前3
共 86 条
- 1
- 2
- 3
- 4
- 5
- 6
- 9













