寄存器:用来暂存指令、数据等处理对象。 控制器:负责把内存上的指令、数据等读入寄存器、并根据指令的执行结果来控制计算机。 运算器:负责运算从内存读入寄存器的数据。 时钟:负责发出CPU开始计时的时钟信号
内存的作用 内存指的就是计算机的主存储器,其主要负责存储指令和数据。CPU通过内存地址值来读取或写入指令和数据。注意:内存中的指令和数据会随着计算机的关机日自动清除。 在理解了CPU和内存后,大家对程序的运行机制的理解是不是也加深了一些?程序启动后,根据时钟信号,控制器会从内存中读取指令和数据。通过对这些指令加以解析和运行,运算器就会对数据进行运算,控制器根据运算结果控制计算机。决定程序流程的程序计数器 下面我们通过将123和456两个数相加,并将结果输出到显示器的实例,说一下程序计数器是如何工作的。 当用户发出启动程序的指示后,操作系统会把硬盘中保存的程序复制到内存中。如下图是程序启动时内存内容的模型。 操作系统把程序复制到内存后,会将程序计数器设定为0100(假设内存地址0100是程序运行的开始地址),然后程序便开始运行。CPU每执行一个指令,程序计数器的值就会自动加1。所以,程序计数器决定着程序的流程。指令 从功能方面来看,机器语言指令可分为数据传送指令、算数指令、跳转指令、call/return指令。
数据传送指令:寄存器和内存、内存和内存、寄存器和外围设备之间的数据读写操作 运算指令:用累加寄存器执行算术运算、逻辑运算、比较运算和位移运算 跳转指令:实现条件分支、循环、强制跳转等 call/return指令:函数的调用/返回调用前的地址
函数调用 call指令和return指令是如何实现函数调用的呢? 其实call指令在将函数的入口地址设定到程序计数器之前,call指令会把调用函数后要执行的指令地址存储在名为栈的主存内。函数处理完毕后,再通过函数的出口来执行return命令。return命令的功能就是把保存的栈中的地址设定到程序计数器中。如下面的图示,MyFunc函数被调用之前,0154地址保存在栈中。MyFunc函数的处理完毕后,栈中的0154地址就会被读取出来,然后再被设定到程序计数器中。
程序调用函数示例函数调用中程序计数器和栈的职能