笔记|组成原理:原理篇(计算机指令与指令跳转)
2021-06-30 20:28:08 0 举报
徐文浩大佬的组成原理课笔记:原理篇(计算机指令与指令跳转)
作者其他创作
大纲/内容
// test.c#include <time.h>#include <stdlib.h>int main(){ srand(time(NULL)); int r = rand() % 2; int a = 10; if (r == 0) { a = 1; }else { a = 2; }
CPU是如何执行指令的
数据传输类指令
逻辑类指令
CPU
算术类指令
机器码
不同原理>数字电路组成的逻辑门
机器码如何生成的
从if…else看程序的执行和跳转
触发器
用标记位,存放CPU进行算术/逻辑计算的结果
锁存器
指令寄存器
在软硬件接口中,CPU帮我们做了什么事
无条件跳转指令
存放下一条需要执行的计算机指令的内存地址
要让这段程序在一个 Linux 操作系统上跑起来,我们需要把整个程序翻译成一个汇编语言(ASM,Assembly Language)的程序,这个过程我们一般叫编译(Compile)成汇编代码。针对汇编代码,我们可以再用汇编器(Assembler)翻译成机器码(Machine Code)。这些机器码由“0”和“1”组成的机器语言表示。这一条条机器码,就是一条条的计算机指令。这样一串串的 16 进制数字,就是我们 CPU 能够真正认识的计算机指令。
// test.cint main(){int a = 1; int b = 2; a = a + b;}
通过if…else和goto来实现循环
总结
顺序加载
26位指令格式(三种)
PC寄存器(地址)
跳转加载
跳转指令
逻辑上),CPU由一堆寄存器组成
条件分之类指令
$ gcc -g -c test.c$ objdump -d -M intel -S test.o
6位操作码
指令长度自增
内存(J类指令)
int main(){ int a = 0; for (int i = 0; i < 3; i++) { a += i; }}
连续保存;跳转加载!
06指令跳转
条件码寄存器
想要在硬件层面实现这个 goto 语句,除了本身需要用来保存下一条指令地址,以及当前正要执行指令的 PC 寄存器、指令寄存器外,我们只需要再增加一个条件码寄存器,来保留条件判断的状态。这样简简单单的三个寄存器,就可以实现条件判断和循环重复执行代码的功能。
05计算机指令
存放当前正在执行的指令
汇编器:汇编代码→机器码
PC寄存器(指令地址寄存器)
R指令
一个地址值/一个常数
逻辑位移(位移操作的位移量)功能码(前面的操作码不够时,扩展操作玛表示对应的具体指令)
寄存器:CPU内部,由多个触发器(Flip-Flop)或者锁存器(Latches)组成的简单电路
高级语言
算术和逻辑操作
软件:CPU是一个执行各种计算机指令的逻辑机器,这里的计算机指令为机器语言
J指令
数据传输、条件分支、运算时使用的并非变量还是常数
I指令
硬件:CPU是一个超大规模集成电路,通过电路实现了加法、乘法乃至各种各样的处理逻辑
原理篇:指令和运算
连续保存;顺序加载
$ gcc -g -c test.c$ objdump -d -M intel -S test.o
没有位移量/操作码
内存(指令)
汇编代码
不同的CPU能够听懂的语言不太一样。比如,我们的个人电脑用的是Inter的CPU,苹果手机用的是arm的CPU。二者能听懂的语言就不一样,类似两种CPU支持的语言→两组不同的计算机指令集
地址值修改
(高6位之外的26位都是一个跳转后的地址)
读取/写入数据的寄存器地址
寄存器:简单电路
解析指令和机器码
从编译到汇编,代码怎么变成机器码
MIPS指令集:MIPS指令
0 条评论
下一页