【汇编】二、预备知识(一只 Assember 的成长史)

嗨~你好呀!

我是一名初二学生,热爱计算机,码龄两年。最近开始学习汇编,希望通过 Blog 的形式记录下自己的学习过程,也和更多人分享。

这篇文章主要讲述学习汇编所需的基础知识。

话不多说~我们开始吧!


目录

二 1. 汇编语言是什么

二 2. 汇编语言的产生及组成

二 3. 存储器、内存(地址空间)及 CPU 对内存的读写

1. 存储器

2. 内存(地址空间)

3. CPU 对内存的读写

二 4. 总线

1. 地址总线

2. 控制总线

3. 数据总线


二 1. 汇编语言是什么

先上概括:

汇编是一种低级语言。它直接和计算机硬件打交道,直接描述和控制了 CPU 的运行。

我们都知道,计算机是听不懂 int main(),cout,cin 等一类的高级语言中的语句的,它们最终都或会被 g++(或 gcc)编译成二进制指令,编译器再把这串二进制指令交给 CPU,让它去执行.......

那,我们知道这个过程中计算机到底做了些什么吗?cout << "Hello Assembly!"; 到底是怎么被计算机理解并执行的?(忽然发现这个问题有点像 “从按下 Enter 键到浏览器把网页显示出来之间都发生了什么”...)

这时候就要汇编上场啦~

汇编可以让我们了解 CPU 的到底做了些什么,有助于我们理解高级语言代码的运行步骤。也可以把汇编和计算机组成原理 “配套学习”,全面地了解计算机的底层原理。

在写高级语言代码的时候,如果真的遇到一些难以理解的问题,用汇编看一看是一个非常好的选择呀!

不过汇编能做的事可不仅仅限于这些......

汇编主要用于底层开发,如操作系统驱动程序、内核、嵌入式等。几乎所有大型系统(包括硬件和软件)的底层都是汇编。

我最初决定学汇编,是因为我在学网络安全,汇编是逆向工程的基础,也是 re 和 pwn 的基础(或者说成为黑客的基础哈哈哈哈哈哈)。

(不过学了一天后,我发现汇编本身就很好玩((


二 2. 汇编语言的产生及组成

Weeeeell。其实汇编的产生原因很简单——计算机能理解二进制指令,但是人类很难理解啊!对人类来说,二进制指令难以记忆、难以调试、极端浪费时间。试想,把你现在正在写的代码全部替换成二进制,其中有一个 0 被错误地写成了 1.......请找到这个 bug。

是不是很可怕😂。如果使用二进制指令的话,或许全球所有设备加起来的存储空间也放不下 ChatGPT 的源代码(bushi。

必须使用二进制指令给整个计算机行业的发展带来了很大的障碍,所以,汇编语言诞生啦!

汇编语言的主体是汇编指令,而汇编指令其实就是二进制指令便于记忆和书写的格式,它和二进制指令是一一对应的。

这也是为什么汇编语言无法跨操作系统,因为每种操作的系统的二进制指令集都是不同的,所以对应的汇编语言也不同。最简单的例子就是 x86 和 arm。

but,虽然汇编指令和二进制指令一一对应,但它毕竟不是二进制指令,所以也需要汇编编译器将汇编代码编译为二进制代码,再交给 CPU 执行——不过这个过程较为 “公开透明”。

汇编语言主要由三部分组成:

· 汇编指令——二进制指令对应的文字形式,计算机执行

· 伪指令——assume 等,由编译器执行,计算机不执行

· 特殊符号—— + - * / 等都算,由编译器识别,计算机不执行


前面说过,汇编相当于 “面向硬件编程”,所以在学习编写汇编程序前,我们需要简单了解一下计算机的重要组成部分。不过不会很复杂,因为我也还没学《组成原理》......😂。

二 3. 存储器、内存(地址空间)及 CPU 对内存的读写

存储器,想必我们都不陌生......寄存器、RAM/ROM、硬盘等都属于存储器的范畴。

CPU 要工作,它先要知道工作内容是什么——这就需要向它提供指令和数据(其实就是一串二进制数字)。

那这些指令和数据存储在哪呢?——存储器。

存储器就像 CPU 的脑子一样,没有存储器,CPU 什么也干不了。

学习汇编,首先需要了解什么是存储器 & 内存(地址空间) & CPU 是如何读写内存的。

1. 存储器

顾名思义,存储器就是用于存储信息的。不同存储器的存取速度和存储容量如下图所示(一般情况下,存取速度和存储容量成反比,即速度越快,容量越小)。

微机原理——扩展存储器设计_拾牙慧者的博客-CSDN博客_存储器扩展设计

由于寄存器和 cache(高速缓存)嵌入在 CPU 中,作为其 0、1、2 级缓存,本文中不多介绍,下一篇文章将详细讲解。

一台设备中,装有多个存储器芯片,它们在物理连接上彼此独立。按照读写属性可分为两类:随机存储器(RAM)和只读存储器(ROM)。前者可读可写,但断电后内容丢失;后者只可读不可写,但断电后内容不丢失。

RAM/ROM 存储器从功能和连接上可分为以下几类,在此不过多介绍。

· 随机存储器 RAM

· 装有 BOIS 的 ROM

· 接口卡上的 RAM(CPU 通过接口卡间接地对外部设备进行控制)

因为 CPU 无法直接读取外存储器(需要先读取到内存储器中,CPU 再读取内存储器),所以下文仅介绍内存储器。

2. 内存(地址空间)

诶,这就有一个问题了。

内存储器是彼此独立的,那它们所对的地址空间呢?不同存储器对应的地址空间也是彼此独立的吗?(即:RAM 从 0-1000,ROM 从 0-2000,每个都从 0 开始)

好像并不是诶......?

没错,虽然内存储器是彼此独立的,但它们的地址空间并不彼此独立,而是连续的。

这表明,CPU 在操控内存储器的时候,把它们总的看作一个逻辑存储器,这个逻辑存储器就是内存地址空间。

不同的物理存储器在这个逻辑存储器中占有一段地址空间,CPU 在这段地址空间中读写数据,就相当于在对应的物理存储器中读写数据。

下图是一个内存地址空间的模型,它将各类内存储器都看作一个逻辑存储器,地址连续。

比如:

RAM 在内存地址空间中占有的地址段就是 00000-9999F,在这一段中读写数据,相当于在 RAM 中读写数据。

类似一个个储物柜,每个有不同的编号,存放不同的人的东西。内存(地址空间)也被划为一个个内存单元,每个内存单元有不同的编号,存放不同的指令或数据。

内存单元的编号是连续的,最小编号是 0,最大编号是由地址总线宽度决定的,后面会提到~。

一个内存单元可以存储 8 bits(八个二进制位),也就是 1 Byte(一个字节),设备的内存容量都是以 Byte 为最小单位计算的。如 4 GB 内存 = 4 * 2^10 * 2^10 * 2^10 Bytes,即 4 * 2^10 * 2^10 * 2^10 个内存单元。

3. CPU 对内存的读写

设想,你在储物柜存放物品后,肯定会记住这个储物柜的编号,方便来取物品或放入新的物品。CPU 也一样,它想读写存储器,就必须知道它要读写的内存单元的编号(物理地址)。

同理,你知道你要取物品还是放物品。CPU 也需要知道它是要读还是要写。

同理,你知道要从储物柜中取出什么东西或放入什么东西。CPU 也需要知道它要读或写什么信息。

总结一下,CPU 想要读取存储器,需要和存储器芯片进行以下三类信息的交互:

· 内存单元的地址?(地址信息)

· 读 or 写?(控制信息)

· 读或写的数据?(数据信息)

问题来了,CPU 如何将这些信息传到存储器芯片中?

我们知道,在计算机硬件中一切都是电信号,高电平代表 1,低电平代表 0。所以这些信息最终也会被用电信号表示出来,那当然就要用导线传送啦!(emm 还没学到的初三物理知识突然开始攻击我((

在计算机中,有专门连接 CPU 和芯片们的导线,称为总线(也就是一根根导线的集合)。

总线可以按照逻辑(或用途)分为三类(下文会详细介绍):

· 地址总线(传送地址信息)

· 控制总线(传送控制信息)

· 数据总线(传送控制信息)

比如,CPU 从 3 号内存单元中读取数据的过程如下图所示(注:此处的 “3” 并不是一个规范的内存地址)。

1. CPU 通过地址线将内存单元的地址(3)告诉内存。

2. CPU 通过控制线向内存芯片发出读取内存的命令。

3. 内存将 3 号单元中的数据(8)通过数据线送入 CPU。

至此,内存读取就已经完成啦~

内存写入和读取大同小异,只需要把第 2 步改成 “发出写入内存的命令”,第 3 步改成 “CPU 通过数据线将数据(8)送入 3 号内存单元”。

这部分看起来并不深奥,但对于理解汇编语言也是很重要的哦!


二 4. 总线

上部分提到了“总线”。总线其实就是在 CPU 和各个器件之间传递信息的导线的集合,分为以下三类:

· 地址总线

· 控制总线

· 数据总线

它们的物理构造是相同的,但逻辑(功能)不同。

1. 地址总线

CPU 通过地址总线来指定内存单元。

它如何指定内存单元呢?——按照内存单元在内存地址空间中的地址。

可见,地址总线一共能组合出多少种内存单元地址,CPU 就可以对多少个内存单元进行寻址(因为如果内存单元数大于地址总线可以组合出的数量,CPU 就无法通过地址总线找到那些内存单元了)。

一个 CPU 有 N 根地址线,就说这个 CPU 的地址总线的宽度为 N,根据排列组合可得这样的 CPU 最多可以寻找 2^N 个内存单元(一根线可以表示 0 或 1 两种情况,N 根线就可以表示 2^N 种情况)。

2. 控制总线

上文提到,CPU 进行内存读写时,需要通过控制总线发出读或写的命令,这是 CPU 对其它器件(此处为存储器)的一种控制。

CPU 通过控制总线控制其它器件(如存储器、外设接口卡等)。

控制线的数量决定了 CPU 对器件的控制能力,有多少根控制线,就意味着 CPU 提供了对器件的多少种控制。

3. 数据总线

CPU 与内存或其它器件之间的数据传送是通过数据总线进行的

数据总线越宽,CPU 和器件之间的数据传送速度越快。比如我们经常说的 “64 位”、“32 位” 等,都是指数据总线的宽度。N 根数据总线一次能传送 N 个 bit,也就是 N/8 个 Byte

下图展示了 8 位数据总线和 16 位数据总线之间的区别:

8 位:

16 位:

这部分也不难,但后面学到 CPU 读取、执行指令的工作原理时还会提到,也是一个重要的部分。


 以上就是本文的全部内容啦~感谢你看到这里~

作者只是一名初学者,有任何错误或解释不当之处欢迎指出呀~一起加油!

那,我们下一篇再见咯~

2023-02-25

By Geeker · LStar

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/54455.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

聊天记录误删了有办法找回吗?微信聊天记录误删怎么恢复

今天小编想要找回一篇发过给好友的重要文档&#xff0c;结果发现&#xff0c;该文档已被删除…这么重要的东西&#xff0c;都不记得什么时候删除了&#xff0c;头都大了&#xff0c;着急想找回文档的我&#xff0c;脑子里一直悬浮着&#xff1a;聊天记录误删了有办法找回吗&…

微信聊天记录删了如何找回

微信聊天记录删了如何找回&#xff1f;微信聊天记录删除&#xff0c;怎么恢复&#xff1f;这是最近被问最多的问题&#xff0c;今天就来跟大家讲讲怎么恢复微信聊天记录。&#xff08;任何数据恢复都不能百分百&#xff0c;所以大家最好的办法还是把比较重要的聊天记录备份一下…

转:你的领导激情在哪里?发现它并为之而奋斗

个人理解&#xff1a; 激情&#xff0c;自省&#xff0c;经历 学会接受别人 激情和使命感 让大家的眼睛瞄准最终的结果 你的领导激情在哪里&#xff1f;发现它并为之而奋斗 你的领导激情在哪里&#xff1f;发现它并为之而奋斗 一个人仅凭空想象是很难找到自己的激情的。要找…

加班到十点,领导警告你不够努力啊!我TMD。。。

又到了一周总结的时刻最近因为搬家&#xff0c;导致好两周没总结了&#xff0c;人要是懒惰下来&#xff0c;再起来真的好艰难啊。 加班到十点&#xff0c;被警告不够努力 事情是这样子的&#xff0c;同事跟我说&#xff0c;楼上的部门最近裁员&#xff0c;大概裁员20%&#xff…

领导给你安排任务,这三种话,越早说越好

这年头都讲究执行力&#xff0c; 领导请来管理大师给员工一通培训&#xff0c; 执行力是上去了。 领导布置工作&#xff0c;员工都嗷嗷的上去干。 可是事情都干差了、干坏了、干偏了&#xff0c; 这算是执行力好吗&#xff1f;一点不算。 错误的方向&#xff0c;加上牛逼…

跟领导汇报工作时,这句话建议你不要说

&#xff3b; 爱开发&#xff3d;陪伴你一起成长&#xff0c;一起进步 跟领导汇报工作时&#xff0c;这三个字&#xff0c;建议你不要说 文 | 洪生鹏 跟领导汇报工作时&#xff0c;要是有某项工作那里做得不好&#xff0c;被领导指出时&#xff0c;有的人喜欢用“我以为”来答复…

领导总是喜欢在快下班时开会,一开就是一两个小时,好烦啊

张工是一名程序员&#xff0c;在一家互联网公司上班&#xff0c;最近部门来了一位新领导&#xff0c;总喜欢在快下班的时候开会&#xff0c;而且一开就是一两个小时&#xff0c;有重要事开会还说得过去&#xff0c;可有的会议始终是太无聊了&#xff0c;张工始终想不明白为何新…

请别把加班说的那么“高大上”

请别把加班说得那么“高大上” 【本期观点】IT行业加班&#xff0c;到底有没有价值&#xff1f; 【导语】众所周知&#xff0c;说到 IT 行业&#xff0c;大家的第一印象都是「加班严重」 不得不说&#xff0c;加班确实是 IT 行业潜规则了&#xff0c;IT 行业也被冠以「月…

熬夜加班做出的报表被领导吐槽太丑?那是你没用这个

五一刚结束&#xff0c;一个在旅游运营部门上班的朋友向我诉苦&#xff0c;今年的旅游业虽然因为疫情增长有所放缓&#xff0c;但并不影响五一旅游黄金期结束后他要做报表&#xff0c;领导现在除了关注疫情和行业发展&#xff0c;就是在不断的精细化企业管理&#xff0c;像以前…

升职加薪,领导看的从来都不是谁更“努力”

许多程序员都认为&#xff0c;只要我足够努力&#xff0c;在职场中就一定能升职加薪。 但现实却是&#xff1a; 你为了项目进度经常加班到深夜&#xff0c;领导却对你视而不见&#xff1b;开会的时候&#xff0c;明明你的想法更有可行性但总是不被看好&#xff1b;无论什么工作…

深夜加班,我该怎么向领导邀功

Jenkins进阶&#xff1a;钉钉机器人和打包下载【再也不背发布的锅啦~】 职场小技巧应用场景场景小问题 jenkins配置钉钉又来新消息啦~~jenkins集成钉钉配置 谁打包没拉代码&#xff01;&#xff01;jenkins打包下载配置 职场小技巧 最近每次下班后悟空总是溜出去吃饭&#xff0…

同时进公司,准时上下班,从不加班加点的他,在我这个加班狂魔前升职了......

前言 我最近心态很崩。 和我同期一道进公司的同事又升了一级&#xff0c;可是明明大家在进公司时&#xff0c;同事不论是学历还是工作经验&#xff0c;样样都不如自己&#xff0c;眼下不过短短的两年时间便一跃在自己的职级之上&#xff0c;这着实让我有几分不甘心。 我想不…

IT 已成为最疯狂的加班行业,没有之一

点击上方“程序员大咖”&#xff0c;选择“置顶公众号” 关键时刻&#xff0c;第一时间送达&#xff01; 据说&#xff0c;某互联网公司招了个日本人做研发&#xff0c;上班第一天就对部门同事说&#xff1a;“我在日本工作时是个加班狂&#xff0c;每天都很晚回家&#xff0c;…

那个每天准时上下班,从不愿意加班加点的人,却在我前面升职了...

前言 我最近心态很崩。 和我同期一道进公司的同事又升了一级&#xff0c;可是明明大家在进公司时&#xff0c;同事不论是学历还是工作经验&#xff0c;样样都不如自己&#xff0c;眼下不过短短的两年时间便一跃在自己的职级之上&#xff0c;这着实让我有几分不甘心。 我想不…

妈蛋!HR你搞我,我的缺点就是身体不好不能加班,怎么了?

阎王易斗&#xff0c;小鬼难缠&#xff0c;面试栽在HR面上的HXD来这里报道了&#xff01; 前言 很多程序员到新公司面试时没有注意到一些小问题&#xff0c;从而导致HR直接将自己pass掉&#xff0c;又或者是沦为了备用的垫底存在&#xff0c;那么这几个导致你被pass的小问题你…

关于互联网公司的加班制度,我想说点心里话

昨天我发了一篇《面对即将来临的995&#xff0c;京东员工明确表示难受了……》的文章&#xff0c;让我意想不到的是&#xff0c;这篇文章居然惹来了一些人的吐槽&#xff0c;难道看不出我这篇文章中满满的讽刺意味么…… 首先&#xff0c;我在这里先表个态&#xff1a;本人并不…

C/C++网络编程笔记WSL+Clion环境配置

https://www.bilibili.com/video/BV11Z4y157RY/?vd_sourced0030c72c95e04a14c5614c1c0e6159b 这个视频里面通过简单的例子&#xff0c;讲了socket&#xff0c;对于小白来说还比较友好&#xff0c;我这里做个笔记。 让网络通信跑起来 我只有本科时候学过一点点C基础&#xff0c…

ChatGPT 的合同工:隐藏军队的不为人知的故事

近年来&#xff0c;人工智能 (AI) 变得越来越流行。从语音助手到聊天机器人&#xff0c;人工智能技术正在我们的生活中无处不在。然而&#xff0c;大多数人不知道的是&#xff0c;在像 OpenAI 的ChatGPT这样的平台开发过程中&#xff0c;幕后隐藏着一支合同工大军。这些合同工负…

(13)香橙派+apache2与php+天猫精灵=自建平台语音支持--duerOS对接

这篇主要总结一下小度音箱的对接方法&#xff0c;答题流程与天猫精灵一样&#xff0c;只是php稍有不同&#xff0c;我也会把php源码上传&#xff0c;需要的可以下载&#xff0c;流程与天猫精灵的php文件大体相同&#xff0c;只是其中的细节稍有差异。 php文件链接&#xff1a;…

(11)香橙派+apache2与php+天猫精灵=自建平台语音支持--天猫精灵对接6

导航链接 &#xff08;1&#xff09;香橙派apache2与php天猫精灵自建平台语音支持--前言 &#xff08;2&#xff09;香橙派apache2与php天猫精灵自建平台语音支持--香橙派操作系统安装 &#xff08;3&#xff09;香橙派apache2与php天猫精灵自建平台语音支持--香橙派环境配置…