1 程序的运行流程

2 CPU的组成

3 寄存器的主要种类和功能


程序员眼中的 CPU(CPU 是寄存 的集合体)

“程序计数器”–决定程序流程的

程序计数器决定着程序的流程。

用户发出启动程序的指示 后,Windows 等操作系统 A 会把硬盘中保存的程序复制到内存中。示例 中的程序实现的是将 123 和 456 两个数值相加,并将结果输出到显示器上。

4 条件分支和循环机制

  • 顺序执行是指按照地址内容的顺序执行指令。
  • 条件分支是指根据条件执行任意地址 的指令。
  • 循环是指重复执行同一地址的指令。

4.1 顺序执行

顺序执行的情况比较简 单,每执行一个指令程序计数器的值就自动加 1。但若程序中存在条件 分支和循环,机器语言的指令就可以将程序计数器的值设定为任意地 址(不是 +1)。

4.2 选择分支

标志寄存器无论当前累加寄存器的运算结果是负数、零还是正数, 标志寄存器都会将其保存(也负责存放溢出 A 和奇偶校验 B 的结果 )。CPU 在进行运算时,标志寄存器的数值会根据运算结果自动设定。

_PS:CPU 执行比较的机制很有意思,因此请大家务必牢记。例如,假 设要比较累加寄存器中存储的 XXX 值和通用寄存器中存储的 YYY 值,执行比较的指令后,CPU 的运算装置就会在内部(暗中)进行 XXX-YYY 的减法运算。而无论减法运算的结果是正数、零还是负数, 都会保存到标志寄存器中。结果为正表示 XXX 比 YYY 大,零表示 XXX 和 YYY 相等,负表示 XXX 比 YYY 小。程序中的比较指令,就 是在 CPU 内部做减法运算。怎么样,是不是挺有意思的?_

5 函数的调用机制

和条件分支、循环的机制有所不同,因为单纯的跳转指 令无法实现函数的调用。函数的调用需要在完成函数内部的处理后,处理流程再返回到函数调用点(函数调用指令的下一个地址)。

如图是给变量 a 和 b 分别代入 123 和 456 后,将其赋值给参数 (parameter)来调用 MyFunc 函数的 C 语言程序。


6 通过地址和索引实现数组

基址寄存器变址寄存器 。通过这两个寄存器,我们可以对主内存上特定的内存区域进行划分,从而实现类似于数组的操作。

查看 10000000 地址~1000FFFF 地址时,如图所示, 可 以 将 10000000 存入基址寄存器,并使变址寄存器的值在00000000~0000FFFF 变化。CPU 则会把基址寄存器+变址寄存器的值解释为实际查看的内存地址。变址寄存器的值就相当于高级编程语言 程序中数组的索引功能。

7 CPU 的处理其实很简单

机器语言指令的主要类型和功能

最新文章

  1. Atitit 图像处理的心得与疑惑 attilax总结
  2. 高仿QQ顶部控件之IOS SegmentView
  3. Linux的fasync驱动异步通知详解【转】
  4. UIImagePickerController和UIAlertController结合使用
  5. Web 开发人员系统重装备忘录
  6. Linux动态库的编译与使用 转载
  7. mysql语句 索引操作
  8. chrome 49 版本 跨越 --args --disable-web-security --user-data-dir
  9. FloodLight使用感受
  10. 解决HP服务器安装Centos7 x64无法识别硬盘
  11. paramiko堡垒机、线程及锁
  12. Python自动化运维之1、Python入门
  13. Ural 1519. Formula 1 优美的插头DP
  14. 关于position和float的用法!
  15. S3C2416裸机开发系列19_Fatfs播放录像wav音频文件
  16. C#快速随机按行读取大型文本文件
  17. ANT 配置和安装 1
  18. switch-case和if-else可互换时
  19. servlet初认知(持续更新中)
  20. Memcache操作类

热门文章

  1. Android 关于selector中item顺序的问题
  2. redis删除多个键
  3. mongodb批量update更新数据
  4. C++11使用make_shared的优势和劣势
  5. asp中出现“错误 '80040e14' FROM 子句语法错误”原因
  6. OWASP ZAP使用教程
  7. Spring中好玩的注解和接口
  8. **209. Minimum Size Subarray Sum 长度最小的子数组
  9. centos7上安装mysql8(上)
  10. C++高精度整数加减乘除模板