通过本章我知道了什么是CPU,CPU是如何运行的以及程序的运行机制。
CPU内部由寄存器,控制器,运行器和时钟4个部分组成,程序启动后,根据时钟信息,控制器会从内存中读取指令和数据,运算器对数据进行运算,控制器根据运算结果来控制计算机。
CPU 是寄存器的集合体,编程是对大量的寄存器做操作,不同 CPU 其内部寄存器数量以及可存储的数值范围不同,但根据不同功能可以将寄存器分为八大块:累加寄存器,标志寄存器,程序计数器,基址寄存器,变址寄存器,通用寄存器,指令寄存器,栈寄存器。寄存器可以存放指令,也可以存放数据,其中数据分为用于运算的数值与表示内存地址的数值两种,同时每个寄存器的功能都不同,用于计算的数据存放在累加寄存器,内存地址放在基址寄存器与变址寄存器
程序启动流程:用户发出启动程序的指令——操作系统将保存在硬盘的程序复制到内存中——操作系统将程序计数器(cpu寄存器的一种)的值设置为程序运行开始位置内存地址——程序开始运行,cpu每执行一条指令程序计数器的值就会自动加1(当执行的指令占据多个内存地址时增加与指令长度相应的数值)——cpu的控制器参照程序计数器的值,从内存中读取命令并执行
函数在调用完后,处理流程需要回到函数的调用点(函数调用指令的下一地址),在计算机中,机器语言借用栈内存使用call指令与return指令进行函数的调用与返回
call指令:函数调用时使用该指令,该指令会在程序计数器值变为函数入口地址前,将调用函数后要执行的指令地址存储在栈中,return指令:函数执行完毕后,通过在函数的出口执行该指令,将保存在栈中的地址设定到程序计数器中实现回到调用地址
通过基址寄存器与变址寄存器,可以对内存上特定的区域进行划分,实现类似数组的操作例子:查看10000000----1000FFFF地址时,将10000000存入基址寄存器,在使变址寄存器的值在0000000-0000FFFF变化,cpu会将基址寄存器+变址寄存器的值作为实际的内存地址,因为就实现了类似数组的功能,基址寄存器相当于数组的起始地址,变值寄存器相当于数组的索引。