首页
社区
课程
招聘
[原创]学习笔记之处理器、内存、指令
发表于: 2017-11-13 04:51 3196

[原创]学习笔记之处理器、内存、指令

2017-11-13 04:51
3196
计算机是机器,用高电平表示“1”,低电平表示“0”,二进制计数法,简化了硬件设计。
十进制转换二进制

比如将26转换二进制
将26除以2,商13,余0
用13除以2,商6,余1
用6除以2,商3,余0
用3除以2,商1,余1
用1除以2,商0,余1,结束
然后,从下往上,将余数串起来,就是所得二进制。

十进制转换十六进制

比如将293转换十六进制
用293除以16,商18,余5
用18除以16,商1,余2
用1除以16,商0,余1,结束
然后,从下往上,将余数串起来,就是所得十六进制。

1971年,intel生产了第一个处理器intel 4004。
处理器会在振荡器脉冲的激励下,从内存获取指令。他的底部或四周有大量的引脚,可以接收或发送电信号,每个引脚都有自己的用处,往电路板上安装时不能接错,所以生产时都会故意缺个角,作为参照。
寄存器是双向器件,可以在一端接收输入并加以锁存,同时也会在另一端产生一样的输出。与寄存器相连的是算术逻辑部件ALU,一旦寄存器锁存了参与运算的数,ALU就会输出结果,这个结果存放在一个叫数据暂存器的寄存器中,然后通过处理器数据总线送到处理器外面,或者再次送入其他的寄存器。
处理器内部还有个控制器,他负责给各个部件发送控制信号,使各个部件在正确的时间点上执行某个动作,同时,他还决定在某个时间点上哪个部件有权使用总线,避免冲突。
内存,它一般被设计成扁平的条状电路板。处理器发出字长控制信号,以指示本次访问的字长是8、16、32、64,如果字长是8,就表示8位,也就是1字节。
指令,处理器的设计者用某些数来指示处理器所做的操作,就是指令。指令由操作码和操作数构成,有的只有操作码。
例子,B8 5D 00这条指令中,B8是操作码,它隐含的信息是这条指令是传送指令,寄存器是A,处理器看到B8的时候就知道我们准备将一个数传入A,因为A是16位的也就是两个字节,所以就会从后面取两个字节的数据作为立即数005D(低端字节序)传入A。指令中混杂了非指令的数据会导致处理器不能正常工作,为此,指令和数据要分开放,存放指令的叫代码区,存放数据的叫数据区。
每种处理器在设计的时候,只能拥有有限的指令,从几十条到几百条不等,处理器能够识别的指令的集合称为指令集。
1978年,intel的第一款16位处理器8086诞生,8086的成功使得市场上出现大量针对他开发的软件,这样,intel设计新的处理器就必须考虑兼容8086,要学习汇编,针对8086的汇编技术也是必不可少的。
一个程序运行时,他在内存中被加载的位置完全是随机的,哪里有空闲的地方就会被加载到哪里,并从哪里开始被处理器执行。如果我们在指令中使用了绝对内存地址,这样的程序是无法重定位的,所以在编写程序时使用相对地址或逻辑地址,而不能使用真实的物理地址。当出现加载时这些地址还要根据程序实际被加载的地址重新计算。在8086上采用了分段机制,这个问题就好办了。
在8086里,一个内存地址实际上是用“段地址:偏移地址”表示的,这就是通常说的逻辑地址。处理器访问内存时,他把指令中的内存地址看作是偏移地址。
处理器能够自动运行是控制器的功劳,为了加快执行速度,8086内部有一个6字节的指令预取队列,在处理器执行那些不需要访问内存的指令时,预取部件可以趁机访问内存预取指令,这时,多达6字节的指令流可以排队解码和执行。
8086提供了20根地址线,可以访问1MB的内存,因为段寄存器是16位的。所以在段不重叠的情况下,1MB最多可以分成2的16次方个段也就是65536,每个段16字节。然而,最少可以分成多少段呢,取决于偏移地址,偏移地址是16位的,所以一个段的最大长度是65536字节,所以最少分成16个段。以上是两种极端情况,实际情况是有空闲的区域都可以选择为段地址。8086处理器的逻辑分段,起始地址是16的倍数,称为按16字节对齐。段的划分是自由的,它可以起始于任何16字节对齐的位置,也可以是任意长度,只要不超过64KB。




[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (1)
雪    币: 189
活跃值: (126)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
非常基础啊~~
2017-11-17 20:48
0
游客
登录 | 注册 方可回帖
返回
//