高级措施员的涵养,不得不知的硬核常识:CPU
种类成果累加寄存器存储运行的数据和运算后的数据。符号寄存器用于回响处理赏罚器的状态和运算功效的某些特性以及节制指令的执行。措施计数器措施计数器是用于存放下一条指令地址单位的地点的处所。基址寄存器存储数据内存的起始位置变址寄存器存储基址寄存器的相对地点通用寄存器存储恣意数据指令寄存器储存正在被运行的指令,CPU内部行使,措施员无法对该寄存器举办读写栈寄存器存储栈地区的起始位置 个中措施计数器、累加寄存器、符号寄存器、指令寄存器和栈寄存器都只有一个,其他寄存器一样平常有多个。 ![]() 措施计数器 措施计数器(Program Counter)是用来存储下一条指令地址单位的地点。 措施执行时,PC的初值为措施第一条指令的地点,在次序执行措施时,节制器起首按措施计数器所指出的指令地点从内存中取出一条指令,然后说明和执行该指令,同时将PC的值加1指向下一条要执行的指令。 我们照旧以一个事例为准来具体的看一下措施计数器的执行进程。 ![]() 这是一段举办相加的操纵,措施启动,在颠末编译理会后会由操纵体系把硬盘中的措施复制到内存中,示例中的措施是将 123 和 456 执行相加操纵,并将功效输出到表现器上。因为行使呆板说话难以描写,以是这是颠末翻译后的功效,现实上每个指令和数据都也许漫衍在差异的地点上,但为了利便声名,把构成一条指令的内存和数据放在了一个内存地点上。 地点 0100 是措施运行的起始位置。Windows 等操纵体系把措施从硬盘复制到内存后,会将措施计数器作为设定为起始位置 0100,然后执行措施,每执行一条指令后,措施计数器的数值会增进1(可能直接指向下一条指令的地点),然后,CPU 就会按照措施计数器的数值,从内存中读取呼吁并执行,也就是说,措施计数器节制着措施的流程。 前提分支和轮回机制 我们都学过高级说话,高级说话中的前提节制流程首要分为三种:次序执行、前提分支、轮回判定三种,次序执行是凭证地点的内容次序的执行指令。前提分支是按照前提执行恣意地点的指令。轮回是一再执行统一地点的指令。 次序执行的环境较量简朴,每执行一条指令措施计数器的值就是 + 1。 前提和轮回分支会使措施计数器的值指向恣意的地点,这样一来,措施便可以返回到上一个地点来一再执行统一个指令,可能跳转到恣意指令。 下面早年提分支为例来声名措施的执行进程(轮回也很相似): ![]() 前提轮回的执行流程 措施的开始进程温次序流程是一样的,CPU 从0100处开始执行呼吁,在0100和0101都是次序执行,PC 的值次序+1,执行到0102地点的指令时,判定0106寄存器的数值大于0,跳转(jump)到0104地点的指令,将数值输出到表现器中,然后竣事措施,0103 的指令被跳过了,这就和我们措施中的 if() 判定是一样的,在不满意前提的环境下,指令会直接跳过。以是 PC 的执行进程也就没有直接+1,而是下一条指令的地点。 符号寄存器 前提和轮回分支会行使到 jump(跳转指令),会按照当前的指令来判定是否跳转,上面我们提到了符号寄存器,无论当前累加寄存器的运算功效是正数、负数照旧零,符号寄存器城市将其生涯(也认真溢出和奇偶校验) 溢出(overflow):是指运算的功效高出了寄存器的长度范畴 奇偶校验(parity check):是指搜查运算功效的值是偶数照旧奇数 CPU 在举办运算时,符号寄存器的数值会按照当前运算的功效自动设定,运算功效的正、负和零三种状态由符号寄存器的三个位暗示。符号寄存器的第一个字节位、第二个字节位、第三个字节位各自的功效都为1时,别离代表着正数、零和负数。 ![]() CPU 的执行机制较量故意思,假设累加寄存器中存储的 XXX 和通用寄存器中存储的 YYY 做较量,执行较量的背后,CPU 的运算机制就会做减法运算。而无论减法运算的功效是正数、零照旧负数,城市生涯到符号寄存器中。功效为正暗示 XXX 比 YYY 大,功效为零暗示 XXX 和 YYY 相称,功效为负暗示 XXX 比 YYY 小。措施较量的指令,现实上是在 CPU 内部做减法运算。 函数挪用机制 接下来,我们继承先容函数挪用机制,哪怕是高级说话编写的措施,函数挪用处理赏罚也是通过把措施计数器的值设定成函数的存储地点来实现的。函数执行跳转指令后,必需举办返回处理赏罚,纯真的指令跳转没故意义,下面是一个实现函数跳转的例子: ![]() 图中将变量 a 和 b 别离赋值为 123 和 456 ,挪用 MyFun(a,b) 要领,举办指令跳转。图中的地点是将 C 说话编译成呆板说话后运行时的地点,因为1行 C 措施在编译后凡是会变为多行呆板说话,以是图中的地点是分手的。在执行完 MyFun(a,b)指令后,措施会返回到 MyFun(a,b) 的下一条指令,CPU 继承执行下面的指令。 (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |