计算机指令

本文深入探讨了CPU的工作原理,包括其作为超大规模集成电路的角色,以及如何通过指令集执行各种操作。讲解了计算机指令的分类,如算术、逻辑、数据传输和跳转指令,并介绍了寄存器的功能,特别是PC寄存器在程序执行中的作用。还详细阐述了函数调用的过程,包括栈的使用、函数调用的内存管理和栈溢出的情况。最后提到了函数内联的概念及其对程序执行效率的影响。
摘要由CSDN通过智能技术生成

计算机指令
1,CPU从硬件角度来说就是一个超大规模集成电路,通过电路实现加法、乘法乃至各种各样的处理逻辑,从软件角度就是一个执行各种计算机指令的逻辑机器,不同的CPU系统有不同的计算机指令集。
2,代码先编绎再汇编成0和1的机器码,这样一串16进制数字就是计算机指令。
3,常见指令可分为五大类:
1)算术类指令,加减乘除在CPU层面都会变成一条条算术类指令。
2)数据传输类指令,给变量赋值、在内存里读写数据,都是数据传输类指令。
3)逻辑类指令,逻辑上的与或非,都是逻辑类指令。
4)条件分支类指令,if/else等属于条件分支类指令。
5)无条件跳转指令,函数调用其实就是无条件跳转指令。
4,逻辑上可以认为CPU是一堆寄存器组成,而寄存器是CPU内部多个触发器或锁存器组成的简单电路。N个触发器或者锁存器可以组成一个N位的寄存器,可以保存N位的数据。
5,一般CPU中有多种不同功能的寄存器:
1)PC寄存器也叫指令地址寄存器,用来存放下一条需要执行的计算机指令的内存地址。
2)指令寄存器用来存放当前正在执行的指令。
3)条件码寄存器用里面一个一个的标记位存放CPU算术或逻辑计算的结果。
4)还有存储数据和内存地址的寄存器等整数寄存器、浮点数寄存器、向量寄存器。
6,程序执行时,CPU根据PC寄存器里的地址,从内存里取出需要执行的指令到指令寄存器里执行,指令长度自增,顺序读取下一条指令,指令在内存里是连续保存的,也会顺序加载。跳转指令会修改PC寄存器里的地址值,下条执行指令就不是内存里顺序加载的。

函数调用的stack overflow
1,if…else和for/while循环是在原来顺序执行的指令过程中,执行了一个内存地址的跳转指令,让指令从原来顺序执行的位置跳转到新的位置开始顺序执行。
2,函数调用跳转后还会回到原来位置,在内存里用栈记录函数调用后需要返回的指令地址,发生函数调用时将调用返回后的指令地址写入栈内,这个操作为压栈,函数执行完成后取出该指令地址,这个操作为出栈。
1)跳转到出栈得到的指令地址即回到函数调用后的位置。
2)实际函数调用压栈时还有函数的参数,因寄存器不够用参数需要存入栈中,整个函数调用所占用的内存空间即函数的栈帧。
3,函数调用时通过rbp和rsp维护当前函数栈帧的栈底和栈顶去管理函数之间的跳转,栈的大小是有限的,如果调用层级太多,栈内压不下内容时就会遇到栈溢出错误,这便是stack overflow。
4,无限递归、递归层数过深、栈空间创建非常占内存的变量(巨大的数组)都会带来stack overflow。
5,函数内联即是将函数产生的指令直接插入到调用位置,而不发生函数跳转的压栈和出栈,CPU执行指令变少了,但内联会增加此调用函数的栈帧内存,如多次调用也会让程序占用空间变大。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值