学习地址
机械计算
图灵 :一个计算的问题一定可以拆解为有限个计算的集合(可计算性) 01
冯诺依曼结构:运算器、控制器、存储器、输入设备、输出设备
模拟信号 连续 数字信号 离散 量化成若干个值 也会失真
一般通过电压高低标识01
ascll 在计算机中,所有的数据在存储和运算时都要使用二进制数表示(因为计算机用高电平和低电平分别表示1和0)
学习氛围->认知不清
逻辑->加法 加法本身就是减法(补码)
计算机中的记忆元件由触发器组成,而触发器只有两个状态。即“0”态和“1”态,所以每条信号线上只能传送一个触发器的信息。如果要在一条信号线上连接多个触发器,而每个触发器可以根据需要与信号线连通或断开,当连通时可以传送“0”或“1”,断开时对信号线上的信息不产生影响,就需要一个特殊的电路加以控制,此电路即为三态输出电路,又称为三态门。
加一个三态门 做成取地址的操作
助记符(mnemonic)是便于人们记忆、并能描述指令功能和指令操作数的符号,助记符是表明指令功能的英语单词或其缩写。汇编语言由于采用了助记符号来编写程序,比用机器语言的二进制代码编程要方便些,在一定程度上简化了编程过程。汇编语言的特点是用符号代替了机器指令代码,而且助记符与指令代码一一对应,基本保留了机器语言的灵活性。使用汇编语言能面向机器并较好地发挥机器的特性,得到质量较高的程序。
编程的本质:指令集的集合
摩托罗拉
6502 乔布斯 任天堂 CPU 指令集
68001 32位
C80
powerPC IBM 摩托罗拉 苹果联合设计的 高性能 特别是高网络吞吐量和高性能汽车主控设备
6800后代 coldfire 军工 电表
ALU的四要素
flag标志位在哪里?
操作数哪里来
操作数在哪里?
运算结果放在哪里?
运算结果存在哪里?
谁掌控这一切的运行?
获取指令:一个完整的CPU
存储在存储器 时钟 时序电路的驱动下 挨个将指令放在控制单元
PC 程序计数器 保持下一条将要执行指令的地址
这些任然是图灵机的高度抽象
a completely cpu
数:寄存器 片外存储器
指令解析产生逻辑控单元
PC指针的指引下从程序的存储地址空间 一条一条拿来 解析控制数据的流向和来源 以及要做的运算内容
函数调用 嵌套调用 跳转 堆栈
堆栈溢出
用户程序进入内核火获得不应该有的权限
NOP 汇编语言的助记符
SP 堆栈指针寄存器
PC pc指针寄存器 读取下一条指令的地址
AB 片内的数据寄存器组
堆栈的初始化
压栈
JSR 跳转到一个子函数SubFunc
跳转 下一条指令的地址
堆栈会覆盖,不会销毁
RTS从子函数返回
R0-R12 通用
R13 堆栈
R14 函数调用 子函数 返回地址
R15 PC 程序指令地址
xPSR 保持各种CPU的设置状态 便于读写
PRIMASK 中断的开和关的
CONTROL CPU的工作模式
FAULTMASK 不可屏蔽中断的开和关 BASEPRI 按优先级关闭中断(M3 M4才有)
32bit 程序状态寄存器 各种状态指令跳转的依据
优先级控制寄存器
CPU的状态 用户态还是特权态
堆栈寄存器指向两个区域:操作系统内核 用户程序 任务跑飞的时候不会使操作系统崩溃
进程模式:mian函数
句柄模式:进中断出中断
M3/M4 分用户态 内核态
32bit
movs r4,#18 把18存到r4寄存器 #代表十进制
一级调用堆栈没有用 LR:末位为0 切换到38指令集 末位为1切换到arm指令集 返回0810(偶数有效)及下一位指令所在地址
pop 弹出一个置给r4寄存器
堆栈的特性 用来做数据交换
中断和轮询
什么是中断
中断的允许/禁止控制
中断的标志位 IF
控制中断的开关
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。在汇编语言中,用助记符代替机器指令的操作码,用地址符号或标号代替指令或操作数的地址。在不同的设备中,汇编语言对应着不同的机器语言指令集,通过汇编过程转换成机器指令。特定的汇编语言和特定的机器语言指令集是一一对应的,不同平台之间不可直接移植。
中断的工作流程
中断的堆栈占用
中断来后,CPU自动将这些寄存器压入堆栈
效率的平衡 可以手动压
中断向量表
中断优先级
中断嵌套
中断嵌套时的堆栈
对内存比较大的开销,又可能发生堆栈溢出,嵌套有限。
中断的潜在风险
中断是独立的,为外部元素所触发的函数,快速实时响应一些事情,并且可能由硬件的通知打断任意位置的main函数,依赖堆栈保留现场,但内存里面全局变量是不会被改写的。
中断向量表
0000:堆栈指针向量 ARM厂商 堆栈指针CPU内部寄存器初始地址 SP
0004:开发工具的入口地址填写在这,上电后CPU自动从这里加载,入口函数最后一条指令就是main PC
RAM堆栈 返回地址 临时变量
内部总线接口
CPU内部的寄存器通过指令就可以实现
CPU按地址看外面的
CPU除了独立的时钟和复位用电路连接外,通过总线以地址的视角看待
区别CPU内部寄存器通过指令访问,而是在外部寄存器通过地址访问,电路与编程的接口