简明 X86 汇编语言教程
简明 X86 汇编语言教程 原创:司徒彦南 2002 年 4 月 8 日 徐远超于 2010-02-25 收集整理 2010-03-10 第 2 次补充 2010-03-25 第 3 次补充 目录 第 Ο 章 写在前面............................................................................ .......................................2 第一章 汇编语言简介.............................................................................................................3 第二章 认识处理器........................... .............................................................63 第 Ο 章 写在前面 我不想夸大或者贬低汇编语言。但我想说,汇编语言改变了 20 世纪的历史。与前辈相 比,我们这一代编程人员足够的幸福,因为我们有各式各样的编程语言,我们可以操作键盘、 坐在显示器面前,甚至使用鼠标、语音识别。我们可以使用键盘、鼠标来驾驭“个人计算机”,0 码力 | 63 页 | 598.28 KB | 1 年前3RISC-V 开放架构设计之道 1.0.0
指令集架构所有的基本要素,是学生和从 业者的完美参考指南。 ——兰迪·卡茨(Randy Katz),加州大学伯克利分校教授,RAID 存储系统的 发明者之一 RISC-V 是学生学习指令集架构和汇编语言编程的不错选择,二者是后续使用高 级语言的基础。本书清晰地介绍了 RISC-V,还包含对其演化历史的深刻见解,以 及与其他常见架构的对比。以过去的指令集架构为鉴,RISC-V 的设计者能规避 示例对比,都深刻地阐释了 RISC-V 指令系统架构设计的先进性。 对于计算机专业和电子工程专业师生及计算机系统架构师和处理器设计者来说, 本书具有极好的参考价值。书中简明扼要地介绍了 RISC-V 各指令模块、汇编语言程 序及汇编指示符和伪指令、过程调用约定、链接与加载、浮点运算指令、原子指令、 压缩指令、向量指令、特权模式与特权指令等内容。通过阅读本书,读者可以快速了 解 RISC-V 指令集架构最基础 程围绕 指令集开展教学,但主要介绍指令的格式和功能,以及汇编程序的阅读和设计,未与 计算机系统中的其他抽象层建立关联,使得学生无法理解指令集的意义及其在计算机 系统中的作用,甚至认为指令集和汇编语言是过时的底层知识。因此,“一生一芯” 计 划1尝试从另一个角度讲解指令集:向学生展示 RISC-V 指令集的设计对程序和硬件 有何影响,而不是按照指令集手册机械地讲解指令的格式和功能。 本书高度契合上述需求。原书的两位作者均为0 码力 | 223 页 | 15.31 MB | 1 年前3RISC-V 手册 v2(一本开源指令集的指南)
................................................................................. 33 第三章 RISC-V 汇编语言 ................................................................................................. 评判一个指令集架构,不仅要看它 包括了什么,而且要看它省略了什么。 随后我们会按顺序介绍这个模块化架构的每个组成部分。每一章都会包含一个用 RISC- V 汇编语言写成的程序,这是为了展示那一章所述的指令的用法,这样有助于汇编语言程序 员学习 RISC-V 汇编。有时,我们还会列出用 ARM,MIPS 和 x86 写成的同样的程序,从而 突出 RISC-V 在简洁性,以及成本、功耗、性能方面的优势。 5年在英特尔的博客上有着 3600条指令的统计结果[Rodgers and Uhlig 2017],这意味着x86指令的增长速率提高到了(在1978年到 2015年之内)每四天增长一条。我们是用汇编语言指令计算的,他们想必算入了机器语言指令。正如第八 章所解释的那样,这个增长的很大一部分是因为x86 ISA依赖于SIMD指令来实现数据级并行。 图1.3:x86-32 ASCII0 码力 | 164 页 | 8.85 MB | 1 年前3C++高性能并行编程与优化 - 课件 - 04 从汇编角度看编译器优化
及以上( 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, ebp • 位机器相比,除了内存突破 4GB 限制外,也有一定性能优势。 8 位, 16 位, 32 位, 64 位版本 al, ax, eax, rax r15b, r15w, r15d, r15 AT&T 汇编语言 GCC 编译器所生成的汇编语言就属于这种 返回值:通过 eax 传出 movl $42, %eax 相当于: eax = 42; 前 6 个参数:分别通过 edi , esi , edx , ecx , r8d0 码力 | 108 页 | 9.47 MB | 1 年前3Object Pascal 参考手册(Ver 0.1)
external; 现在,你就能调用来自 BLOCK.OBJ 或 block.o 的 MoveWord 和 FillWord 例程了。 像上面的声明,经常用来访问由汇编语言编写的外部例程,你也可以直接在 Object Pascal 源代码中放置 汇编语言写的例程。关于这方面的信息,请参考 Inline assembler code。 从库导入函数 要从一个动态调入库(.so 或.DLL)导入例程,把如下格式的指示字 Integer; local; 它不刷新 EBX 寄存器,因此 • 它不能从一个库输出; • 它不能在单元的接口部分声明; • 不能取得它的地址或赋给一个过程类型的变量; • 若它完全是一个汇编语言例程,除非调用者设置了 EBX 寄存器,否则不能从其它单元调用它 The exports clause(exports 子句) 当一个例程在 exports 子句中列出时,它将被输出,它的格式如下 ECX;C 和 E 作 为双字和指针被压入栈,和它们声明的顺序一样。 寄存器保存约定 过程和函数必须保留 EBX、ESI、EDI 和 EBP 寄存器,但可以修改 EAX、EDX 和 ECX。当在汇编语言 中实现构造和销毁时,保证预留 DL 寄存器。过程和函数被调用时,是假定 CPU 的 direction 标志是清除 的(对应于 CLD 指令),并且返回时,direction 标志也必须是清除的。0 码力 | 168 页 | 868.25 KB | 1 年前3跟我一起写 Makefile (PDF 重制版)
令相关的,如 CC ;一种是参数相的关,如 CFLAGS 。下面是所有隐含规则中会用到的变量: 9.3.1 关于命令的变量。 • AR : 函数库打包程序。默认命令是 ar • AS : 汇编语言编译程序。默认命令是 as • CC : C 语言编译程序。默认命令是 cc • CXX : C++ 语言编译程序。默认命令是 g++ • CO : 从 RCS 文件中扩展文件程序。默认命令是 关于命令参数的变量 下面的这些变量都是相关上面的命令的参数。如果没有指明其默认值,那么其默认值都是空。 • ARFLAGS : 函数库打包程序 AR 命令的参数。默认值是 rv • ASFLAGS : 汇编语言编译器参数。(当明显地调用 .s 或 .S 文件时) • CFLAGS : C 语言编译器参数。 • CXXFLAGS : C++ 语言编译器参数。 • COFLAGS : RCS 命令参数。0 码力 | 81 页 | 628.51 KB | 1 年前3Service Mesh 发展趋势(续) 蚂蚁金服 | 骑士到中盘路向何方?
Part 2:ServiceMesh灵魂拷问二:性能有了,架构怎么办? Mozilla官方定义: WebAssembly是一种新的编码方式,可以在现代的网络浏览器中运行 - 它是一种低级的类汇编语言,具有 紧凑的二进制格式,可以接近原生的性能运行,并为诸如C / C ++等语言提供一个编译目标,以便它们可以 在Web上运行。它也被设计为可以与JavaScript共存,允许两者一起工作。 W0 码力 | 43 页 | 2.90 MB | 5 月前3C++高性能并行编程与优化 - 课件 - 11 现代 CMake 进阶指南
project( 项目名 LANGUAGES 使用的语言列表 ...) 指定了该项目使用了哪些编程语言。 • 目前支持的语言包括: • C : C 语言 • CXX : C++ 语言 • ASM :汇编语言 • Fortran :老年人的编程语言 • CUDA :英伟达的 CUDA ( 3.8 版本新增) • OBJC :苹果的 Objective-C ( 3.16 版本新增) • OBJCXX0 码力 | 166 页 | 6.54 MB | 1 年前3Rust 语言学习笔记
M:N 模型:M 个绿色线程对应 N 个 OS 线程,这里 M 和 N 不必相同。 在当前上下文中,运行时 代表二进制文件中包含的由语言自身提供的代码。 这些代码根据语言的不同可大可小,不过任何非汇编语言都会有一定数量的运 行时代码。为此,通常人们说一个语言 “没有运行时”,一般意味着 “小运 行时”。更小的运行时拥有更少的功能不过其优势在于更小的二进制输出,这 使其易于在更多上下文中与其他语言相结合。虽然很多语言觉得增加运行时来0 码力 | 117 页 | 2.24 MB | 1 年前32021 中国开源年度报告
153.16% 3 Rust 115.01% 4 Verilog 84.54% 5 TypeScript 81.12% 6 Tex / LaTex 80.68% 7 R 69.64% 8 汇编语言 60.9% 9 PowerShell 60.65% 10 Kotlin 59.96% Rust 连续三年保持高速增长,增长率均超过 110%。 2021 年基础软件在国内热度持续走高,Verilog0 码力 | 132 页 | 14.24 MB | 1 年前3
共 24 条
- 1
- 2
- 3