机器语言:由0和1组成的机器指令
高级语言:更接近人类的语言如 oc,swift,c...
一条汇编指令和一条机器指令是一一对应的
机器指令可以反汇编成汇编指令但是不可能从汇编指令反编译成高级语言
不同的平台生成的汇编指令不同
汇编语言的特点:
可以直接访问,控制各种硬件设备,比如存储器,CPU等能最大限度发挥硬件的功能
不受编译器的限制,对生成的二进制代码进行完全控制
目标代码剪短,占用的内存少,执行速度快(相对于高级语言)
注:高级语言一条指令是有好多天汇编指令组成所以速度相对来说会慢
每一种型号的cpu都有自己的机器指令\汇编指令集,所以汇编指令不具备可移植性
知识点过多,不易于编写,调试和维护
不区分大小写
app的执行过程
CPU没办直接去硬盘读文件只能去内存取
单位换算
每8个二进制位就是一个字节,而内存中最小单元是一个字节,一个字节的单位是Byte, 一个二进制单位是bit
1B = 8bit 一个二进制位对应一个0或者1
内存中 2个16进制位表示一个字节
1M 是数量单位
1Mb 是容量单位表示内存大小
总线
地址总线
地址总线是由一根根的导线组成,它有多少根我们称之为宽度,比如有10根宽度就是10.
地址总线宽度决定内存需求的大小。16位的有16根内存需求1Mb 32位的有32根内存需求是4G
宽度决定了CPU的寻址能力
宽度决定了地址总线的寻址能力。
地址总线的宽度和寻址能力关系:(个人理解)———以8086的CPU举例。它的宽度是20。每根地址总线对应一个高频或者低频信号,即只能传0或者1.所以他的范围是20个0 ~ 20个1, 转换成16进制是 0x00000 ~ 0xFFFFF(这就是能访问内存地址的范围,内存的最大值是0xFFFFF 即 0x00000,0x00001, 0x00002 … 0xFFFFF 这中间共1024*1024个,一个地址对应一个内存单元)转换成十进制是 0 ~ 1024*1024 即20根地址总线能访问的内存单位的个数范围是0 ~ 1024*1204 。所以数量是1024*1024 = 1M(数量单位-内存单位的个数)而每个内存单位对应8个二进制单位即一个字节(B),内存单位的上限是1024*1024个(M)所以对应的内存的容量是(1024*1024)B = 1Mb。寻址能力是1Mb
地址总线最大40根目前 - 输出的是地址的值
xp32位的系统地址总线是32根
数据总线
所说的32位64位的系统是指数据总线的宽度
宽度决定cpu单次数据的传输量直接影响cpu执行效率和性能 - (吞吐量)
传输的是数据,每根只能传1\0 (单位是bit)所以8根数据总线传输1B即1个字节。一个数据总线对应一个bit位 8个bit位是一个字节(Byte)
数据总线传的不是数据而是内存地址
数据总线传递的是数据地址而不会传二进制数据为了性能
控制总线 -- 传输各种命令
内存里的数据默认的都是用16进制表示
内存地址都是从低到高 我们能用的是低地址区高地址区是给系统用的 - 内存安全的地址是低地址
内存地址的空间大小受CPU地址总线宽度的限制
CPU的硬件结构
CPU内部链接的情况寄存器 运算器 控制器
寄存器
8086有14个寄存器,都是16位的寄存器,可以存放2个字节
通过改变寄存器的内容来改变cpu的操作
不同的CPU个数结构名称都是不同的 相同的是有一个寄存器改变cup的行为
AX寄存器分高八位和低八位 H:高位寄存器 L:低位寄存器
所有的内存单元都有唯一的地址,叫做物理地址。内存中最小的单元。
寻址方式
段地址 * 16 + 偏移地址
写法举例: 233DFH -> 2330H :00DFH (*16省略,系统自动执行了)
2300H :03DFH
.
.
.
地址加法器
CPU中的一个部件
作用:以8086为例,将两个16进制位放到地址加法器中,合成一个用二十位地址总线能输出的地址
内存分段管理
从上到下内存越来越大
因为寻址方式四段地址+偏移地址 所以 可以把内存分成一个个的段。首先由段地址找到是哪个段然后由偏移地址找到对应的具体地址。类似于c中数组
8086段寄存器
8086在访问内存时要由相关部件提供内存单元的段地址和偏移地址,送入地址加法器合成物理地址
什么是部件提供段地址?
段地址在8086的段寄存器中存放
8086有4个段寄存器:CS、DS、SS、ES,当CPU需要访问内存时由这4个段寄存器提供内存单元的段地址
CS (Code Segment):代码段寄存器
DS (Data Segment):数据段寄存器
SS (Stack Segment):堆栈段寄存器
ES (Extra Segment):附加段寄存器