汇编学习 第一章

与汇编相遇

汇编真的是逃不开了,最近在看linux内核书籍时,发现好几个 .s文件。一查才发现是汇编文件,头突然就点嗡嗡的。查资料 看视频 突然发现,好像不是很难理解。那就分章节的整理一下,书籍参考的是汇编语言第三版,这本书网上褒贬不一,但是作为一个这么多年的网管,如果有问题,我应该会发现的吧。。。。。

备注:如果真有大佬发现错误或者疑问,请一定告诉我,多多拍砖。

这一篇,就总结书籍第一章,基础知识。都是文字 没有图

              学习汇编,可能需要的一些知识
  • 一台不用很好的,组装的台式机,他的作用就是让你大概认识到,什么东西是物理的 什么东西是逻辑的(虚拟的),比方说 CPU 内存条 主板 网卡 等等等等都是看得见,摸得着的。 内存地址,虚拟内存,操作系统等都是摸不着的。为什么需要知道这些,因为我们需要有一个整体的概念,知道什么是什么。很多时候新进入一个领域都会有个问题,大佬给我讲的术语,听不懂,不明白,迷迷糊糊就过去了。然后的就懵逼了。

  • (不是必备)了解一下c语言,和基础的进制转换(这是必须的),主要是二进制 十进制和十六进制。这里的c语言其实并不是必须的,只是有就更好。但是,进制转换是必须了解的,这里简单提一下,有很多进制转换讲得非常深刻,有各种算法,还会牵涉到计算十进制的小数点位。新手玩家,请不要去看小数点怎么计算的,只要先看基本的转换,先玩熟了,遇到需要计算小数点的时候,先看原理,然后用计算机算。

  • 汇编语言第三版

                     就这点,没有了
    

介于这是一篇总结,我主要是为了方便自己回看一些知识点,有些带带过的基础知识点,真的就是带带过了,有问题和错误请拍砖

  • 基础部件了解
    如果把所有的编程语言分几个层次,大家肯定都听说过几个,解释性语言和脚本语言可能都是处于高位,中间有java c++ 等等面向过程(其实不是很准确,c++只能算一半),再往下c,再低一点基本就在汇编了,最最最低,从我现在的知识量来说就认识到机器码,也就是1和0组成的代码。我通俗的来讲,越是处于高位的语言,越适合人去看,越底层的语言,越适合硬件设备处理器去看。往往会有人说,底层语言很难学,其实真的并不难,只不过是开发成本比较高,初学者看不懂放弃得比较多而已。

  • CPU
    很多时候,书上都会把CPU比作大脑,我认为你太高看他了。他是一个机械,里面储存了固定的操作步骤和指令,因为他只能识别1和0(二进制的),导致他能做的无非就是与 或 非三种运算,作为一个核心,怎么才能多样化的输出各种指令的呢?那肯定是他事先在硬件里设计了一套规则!
    1、小明和小红设计了一套中午吃什么的暗语规则,一次传输由1和0组成的8位数字,第一位第二位代表去哪里吃饭,第三第四位代表坐在哪里。。。。。。。。。就是这样约定好的。注意:很多东西都是约定好的,在计算机各个学科里这个叫做协议。
    2、现在暗语规定了,一次传输只能有8位的二进制数,并且只用第一第二位去表示吃什么,现今这个时代肯定是不够用的,所以,一次能传输更多位二进制肯定是更好的(相同时间内),这就是32位 64位或者16位,再次重申,规则都是事先设计好的。CPU是一个定时会接收指令的平台,这频率非常非常快,一个时间间隔内能接收到的最大数据量(CPU只接收二进制数),就规定了我们上层操作系统能用多少位,现在大部分都是64位,这里我简单解释一下。支持32位的CPU,每次能接收32位二进制数,支持64位,则每次能接收64位二进制数,这个就叫做寻址空间(空间大小就是能有几位)。
    3、上面说过CPU只会识别1和0,所以汇编语言CPU是看不懂的,所以需要一个解释的软件,这个软件 叫做编译器。他会把汇编语言,按照和CPU约定的规则,解释成1和0。还是因为规则是制定好的所以我们可以通过编译器把汇编解释成机器码,而不需要直接查阅规则,然后去写那些1和0,如果不服的,可以去算一下2的64次方是多少,嘿嘿。

  • 内存
    1、内存是用来和CPU交流用的,用上面的例子,内存条(物理的)就是那张写暗语的纸,纸的长度也就是内存条的大小。内存并不是只有主板上插上去的那种,CPU也有自己的,GPU(显卡核心)也有自己的。内存可以写入,可以读取,但是断电就会把内存里的内容全部删除。
    2、内存是一个个很小的存储单元的集合,不管你内存多大,都是一个个内存单元组合起来的,一个存储单元的大小是1Byte,也就是8位。

     重点来了,每一个存储单元都会有一个编号,叫做内存地址,低位从0开始,高位是最大容量数减一
     举个例子:一个内存条只有4G,最小的编号肯定是0,那最高的编号如何计算呢?从0开始数10个数,
     是不是9?这也一样,从0开始,最小单位是1个Byte(8位二进制),4G内存一共有4,294,967,296个内存单元,
     2的32次方,最高以为的编号是不是2的32次方减一。转换成十六进制就是0xFFFF FFFF,
     最低位就是0x0000 0000
    
  • CPU结合内存
    这里讲的东西,不明白的可以结合去看一下上面。
    CPU是一个计算器,他需要数据,然后再告诉他怎么处理,他才会输出给你结果或者某项操作,假定只有一种操作,盒装饼干流水线,那有一个通道过来的就是饼干,每次到达打包位置就会发生把饼干放进盒子里的处理,然后再通过另外一个通道把做好的饼干发出去。所以,CPU也规定了三种总线(Bus),地址总线,数据总线,控制总线,规定了从不同总线发出的1和0代表不同意义。
    因为CPU只会发一串1和0,而且他是控制者,所以本来饼干会自动过来这个操作,也是需要CPU去做的。假设这次打包的饼干有5种,一盒饼干一种一块(一盒5块饼干)。

    步骤一

    找到各个饼干存放的仓库,仓库编号从0开始,0 1 2 3 4,仓库所在园区就是内存,CPU会通过地址总线向内存发出仓库的编号,并且定位在那个仓库,具体做什么并不清楚

    步骤二

    然后通过控制总线向园区发出命令“给老子来块饼干”。

    步骤三

    仓库就会通过数据总线,从已经定位的仓库里,发一块饼干送到CPU

          这些总线做什么操作,内存反馈什么操作都是规定好的
    

    一个个来看

    地址总线

    CPU通过地址总线,发出的仓库编号(内存地址)都是用1和0也就二进制位来控制的。地址总线是由一根根总线合并起来的,一个根总线只能传输一个二进制位(0或1),有多少根总线就代表地址总线的宽度,那我们考虑一下如果总线有32根,那仓库最多能有多少个?
    32根总线,从0号仓库开始表示0000…0000(32个0)这是第一个仓库(0号仓库),
    最后一个仓库是111111…11111(32个1)(4,294,967,295号仓库)注意,这里是二进制进位
    一共是2的32次方个仓库,不信的自己算一下。(建议还是算一下,把总线数调小一点)

    那我们一直说32位操作系统是不是最多只能使用4G的内存?这是巧合?
    

    一个存储单元是1Byte,2的32次方个存储单元一共是4G容量,编号从0开始数,最高位编号用十六进制表示正好是0xFFFF FFFF。CPU总线是32根,最大能表示的十六进制数就是0xFFFF FFFF(一位十六进制能转换4位二进制)而地址总线是用来找内存地址的(也就是编号),CPU地址总线,最大能表示的编号也就是他能从内存里找到从0开始数最大的内存地址,一共是2的32次方个存储单元(一个存储单元一个编号),一个存储单元1Byte,那正好是4G,你给他再多存储单元,CPU的地址总线,没有办法把多出来内存地址表示出来,那自然也就找不到那个存储单元。这个真的是重点

    回答:我只有10块钱,是吃不起20块钱的鸡腿的
    
    数据总线

    上面的地址总线是用来标记内存地址编号的,而数据总线就是用来传输数据的。数据总线的宽度(就是有几根),也就代表一个传输频率内,能够传输多少位(bit)数据。(一根数据总线,只能显示1或者0)

    控制总线

    我们已经清楚知道,一根总线传输0要么传输1,然而一台台式机里会有很多的硬件,很多的操作方法,他们都是通过CPU来控制的。控制总线向某一个硬件传输的数据也只能是1或0,所以他就只能通过不同的排列组合,去代表不一样的命令。这个也是约定好的。

ok 第一章主要的内容就差不多了,下面是一些很容易理解的东西

  • BIOS:Basic Input Output System 这个东西不止主板有,我的理解是,只要需要装驱动的硬件 其实都应该有。

  • 绝大多数硬件设备都会有自己的RAM(随机存储器),那他们的物理的存储单元自然也是独立的,编号也是。

  • 对于CPU来说,他会把所有独立的内存单元都组成一组连续存储单元来看待,包括内存条。这一长条的,连续的存储单元的地址是CPU来控制排列的,这个地址是唯一的,叫做物理地址。

     物理地址空间大小就是受上面地址总线根数限制的,我把所有硬件的RAM拼成一长条,组成一个连续的物理地址空间。
     可想而知,每个硬件设备的存储单元如何排列成一长条存储空间,肯定是有一定规则的,这个规则,
     都是CPU来决定的。
     物理内存地址也是从0x0000 0000开始的,连续递增的。以前32位的系统,你查看计算机属性看内存的时候,就算你插满4G的
     内存条,你看到的还是不满4G的,因为所有硬件的RAM拼在一起也只能有4G的总容量,不然就超出CPU地址总线的寻址限制了,
     4G是2的32次方个内存单元(一个内存单元是1Byte),一共是2的32次方个逻辑地址,你得留出一点给别的硬件RAM使用。
    

总结:

CPU会把所有的内存组成一个大的内存空间,这个空间大小是受到地址总线限制的。

话痨多说几句,新学知识的时候,一定要把每一个专业术语搞明白,而且一定要自己看书,别人的总结,总是别人咀嚼过的吐出来的(虽然书也是),但少咀嚼两遍,总会好一点吧。。。。。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值