【好书解读】解读《汇编语言》一书

简介: 学习汇编语言的目的就是通过汇编语言进行深入地理解计算机底层的基本工作机理,达到可以随心所欲地控制计算机的目的。

✌ 作者简介:小明的Java问道之路,某大型金融互联网公司,后端研发高级工程师,擅长订单/交易领域的高安全/可用/并发/性能的架构设计与落地,专注于研究计算机底层与金融科技领域技术

🏆 CSDN博客专家/Java领域新星创作者、系统架构设计师

🔥 如果此文还不错的话,还请关注、点赞、收藏三连支持一下博主

本文导读学习汇编语言的目的就是通过汇编语言进行深入地理解计算机底层的基本工作机理,达到可以随心所欲地控制计算机的目的。

学习汇编语言的目的就是通过汇编语言进行深入地理解计算机底层的基本工作机理,达到可以随心所欲地控制计算机的目的。


一、汇编语言、机器语言与冯诺依曼体系结构

机器语言,就是0100110的二进制串

image.png


汇编语言,用来于硬件沟通,是英文代码

冯诺依曼体系结构:

1、运算器:运算单元,保存临时数据

2、控制器:控制单元

3、输入输出

4、存储器:寄存器组,用来保存指令和数据(为了加快运行速度)。寄存器按功能命名


image.png

EAX: Accumulator for operands and results data 操作数和结果数据累加器

EBX: Pointer to data in the DS segment 指向DS段中数据的指针

ECX: Counter for string and loop operations字符串和循环操作的计数器

EDX: I/O pointer I0指针

ESI: Pointer to data in the segment pointed to by the DS register; source pointer for string operations 指向DS寄存器所指向段中数据的指针,,字符串操作原指针

EDI: Pointer to data (or destination) in the segment pointed to by the ES register; destination pointer for string operations 指向ES寄存器所指向段中数据的指针,字符串操作目标指针

ESP: Stack pointer (in the SS segment) 栈指针( SS段中)

EBP: Pointer to data on the stack (in the SS segment) 指向栈上数据的指针( SS段中)

image.png


在计算机初创时代,涉及到一个问题?基础存储单元多少位最合适?8位,所以在8086时代,一个通用寄存器占16位, 8080时代是8位。 为了兼容8080,16可以拆位两个8位,同理32位可以拆违两个16位。ax(al低8位ah高8位) e(extra)ax (高16位低16位) rax=16 32 64,数据是从高到低还是低到高引入了字节序。


二、汇编语言相关硬件结构

汇编语言是直接在硬件之上工作的编程语言,首先要了解硬件系统的结构,才能有效的应用汇编语言对其编程。在本节中,对硬件系统结构的问题进行探讨

存储器:CPU是计算机的核心部件,它控制整个计算机的运作并进行运算,要想让一个CPU 工作,就必须向它提供指令和数据。指令和数据在存储器中存放,也就是平时所说的内存。磁盘不同于内存,磁盘上的数据或程序如果不读到内存中,就无法被CPU使用。

存储器相当于语言中的数组,下标从0开始,每一个元素为1字节;

image.png


寄存器:简单的讲是CPU中可以存储数据的器件,一个CPU中有多个寄存器。

CPU对存储器的读写:CPU要想进行数据的读写,必须和外部器件(标准的说法是芯片)进行三类信息的交互:一、我要干啥:读还是写命令(控制信息);二、我要的东西在哪:地址总线,存储单元的地址(地址信息);三、我的东西要放哪:数据总线,读或写的数据(数据信息)

那么CPU是通过什么将地址、数据和控制信息传到存储芯片中的呢?电子计算机能处理、传输的信息都是电信号,电信号要用导线传送。

在计算机中专门有连接CPU和其他芯片的导线,通常称为总线,物理上是一根根导线的集合,逻辑上分为地址总线、数据总线、控制总线

image.png


内存地址空间:一个CPU的地址线宽为10,那么可以寻址1024个内存单元,这1024个内存单元就构成CPU的内存地址空间。CPU对存储器进行读写的时候都通过控制总线发出读写命令。

对CPU来讲,系统中的所有存储器中的存储单元都处于一个统一的逻辑存储器中,它的容量受CPU寻址能力的限制。这个逻辑存储器即是我们所说的内存地址空间。

主板:PC机有一块主板,主板有核心器件和主要器件,这些器件通过总线(地址总线、数据总线、控制总线)相连


三、CPU工作原理(寄存器)

CPU概述:一个类型的CPU由运算器、控制器、寄存器等器件组成,这些器件靠内部总线连接,内部总线实现CPU内部各个器件之间的联系。外部总线实现CPU和主板上其它器件的联系。

寄存器概述:8086CPU所有的寄存器都是16位的,可以存放两个字节。8086CPU有14个寄存器,AX、BX、CX、DX、SI、DI、SP、BP、IP、CS、SS、DS、ES、PSW

CS和IP是8086CPU中最关键的寄存器,他们知识了CPU当前要读取指令的地址

CS:代码段寄存器(存放段地址,一个段寄存器16位、一个PC计数器是16位),IP代码段+IP偏移=指令地址

IP:指令指针寄存器(存放指针的偏移地址)

AX、BX、CX、 DX通常用来存放一般性数据被称为通用寄存器。

DS:寄存器,通常用来存放要访问的数据的段地址。

SS、 SP指示栈顶:改变SP后写内存的入栈指令;读内存后改变SP的出栈指令。

SI和DI是8086CPU中和bx功能相近的寄存器,SI和DI不能够分成两个8位寄存器来使用。

8086PC工作过程

1、从CS:IP指向内存单元读取指令,读取的指令进入指令缓冲器;2、IP= IP +所读取指令的长度,从而指向下一条指令;3、执行指令,跳转1并重复


四、一些简单地汇编指令

mov指令的几种形式:

mov 寄存器,数据

mov 寄存器,寄存器

mov 寄存器,内存单元

mov 内存单元,寄存器

mov 段寄存器;寄存器

push寄存器:将一个寄存器中的数据入栈

pop寄存器:出栈,用一个寄存器接收出栈的数据

相关文章
|
9天前
|
人工智能 JSON 供应链
畅用7个月无影 JVS Claw |手把手教你把JVS改造成「科研与产业地理情报可视化大师」
LucianaiB分享零成本畅用JVS Claw教程(学生认证享7个月使用权),并开源GeoMind项目——将JVS改造为科研与产业地理情报可视化AI助手,支持飞书文档解析、地理编码与腾讯地图可视化,助力产业关系图谱构建。
23436 9
畅用7个月无影 JVS Claw |手把手教你把JVS改造成「科研与产业地理情报可视化大师」
|
13天前
|
人工智能 缓存 BI
Claude Code + DeepSeek V4-Pro 真实评测:除了贵,没别的毛病
JeecgBoot AI专题研究 把 Claude Code 接入 DeepSeek V4Pro,跑完 Skills —— OA 审批、大屏、报表、部署 5 大实战场景后的真实体验 ![](https://oscimg.oschina.net/oscnet/up608d34aeb6bafc47f
4541 15
Claude Code + DeepSeek V4-Pro 真实评测:除了贵,没别的毛病
|
14天前
|
人工智能 JSON BI
DeepSeek V4 来了!超越 Claude Sonnet 4.5,赶紧对接 Claude Code 体验一把
JeecgBoot AI专题研究 把 Claude Code 接入 DeepSeek V4Pro 的真实体验与避坑记录 本文记录我将 Claude Code 对接 DeepSeek 最新模型(V4Pro)后的真实体验,测试了 Skills 自动化查询和积木报表 AI 建表两个场景——有惊喜,也踩
5456 13
|
1月前
|
人工智能 自然语言处理 安全
Claude Code 全攻略:命令大全 + 实战工作流(建议收藏)
本文介绍了Claude Code终端AI助手的使用指南,主要内容包括:1)常用命令如版本查看、项目启动和更新;2)三种工作模式切换及界面说明;3)核心功能指令速查表,包含初始化、压缩对话、清除历史等操作;4)详细解析了/init、/help、/clear、/compact、/memory等关键命令的使用场景和语法。文章通过丰富的界面截图和场景示例,帮助开发者快速掌握如何通过命令行和交互界面高效使用Claude Code进行项目开发,特别强调了CLAUDE.md文件作为项目知识库的核心作用。
24297 65
Claude Code 全攻略:命令大全 + 实战工作流(建议收藏)
|
2天前
|
前端开发 API 内存技术
对比claude code等编程cli工具与deepseek v4的适配情况
DeepSeek V4发布后,多家编程工具因未适配其强制要求的`reasoning_content`字段而报错。本文对比Claude Code、GitHub Copilot、Langcli、OpenCode及DeepSeek-TUI等主流工具的兼容性:Claude Code需按官方方式配置;Langcli表现最佳,开箱即用且无报错;Copilot与OpenCode暂未修复问题;DeepSeek-TUI尚处早期阶段。
638 2
对比claude code等编程cli工具与deepseek v4的适配情况