CS61C学习笔记(四)-RISCV-Formats
引言
现在我们来到了第三层——Machine Language Program
接下来将介绍汇编语言是怎么转化成机器码的
Consequence #1: Everything Has a Memory Address
由于所有的指令和数据都存储在内存中,所以一切都有一个内存地址:指令、数据字
这意味着分支和跳转都使用这些地址
C 指针只是内存地址:它们可以指向内存中的任何东西
不受约束的地址使用可能导致严重的错误;在 C 语言中避免错误是你的责任;而在 Java 语言设计中,这种使用受限
一个寄存器保存着当前正在执行的指令的地址:“程序计数器”(Program Counter,简称 PC)
基本上就是一个指向内存的指针
英特尔称之为指令指针(Instruction Pointer,简称 IP)
Consequence #2: 二进制的兼容
程序以二进制形式分发
程序绑定到特定的指令集
手机和个人电脑的版本不同
新机器希望运行旧程序(“二进制”文件)以及编译到新指令的程序
这导致了“向后兼容”的指令集随着时间的推移而演变
选择英特尔8088处理器作为1981年首款IBM ...
离散数学复习-谓词逻辑
谓词逻辑基本概念
原子命题
客体
不依人们主观而存在的客观实体.具体事物或抽象概念.
谓词
描述客体的性质或特征,或客体间的关系的词.
基于谓词分析的逻辑,称为谓词逻辑,它是命题逻辑的扩充和发展。
谓词
命题一般是由主语和谓词两部分组成如:
小王是老师
小李是老师
其中小王和小李是主语,可独立存在
谓语相同:“是老师”,描述了小王和小李的共同特征。要表示多个客体之间的关系,可引入多个客体的谓词来表示
分类一元谓词 P:男男是大学生 Q:毛毛是大学生 S(x): x是大学生男男是大学生 S(a) a:男男毛毛是大学生 S(c) c:毛毛
谓词公式翻译约束变元与自由变元谓词公式的等价变换和蕴含式谓词逻辑的推理理论
离散数学复习-关系
序偶和笛卡尔积序偶对于有序n元组,当n=2时,我们将其称作有序二元组,也称作有序对,或序偶。
序偶的特点:
若a≠b,则(a,b)≠(b,a)
两个有序对(a,b)和(c,d)相等当且仅当a=c,b=d。
特征:成对出现、具有一定的顺序。
用序偶表示下列语句中的次序关系
(1)平面上点A的横坐标是x,纵坐标是y,x,y∈R;
(2)成都是四川的省会;
(3)英语课本在书桌上;
(4)左,右关系。
(1)(x,y)
(2)(成都,四川)
(3)(英语课本,书桌)
(4)(左,右)
笛卡尔积设A,B是两个集合,所有有序对(x, y)做成的集合(其中x∈A,y∈B),称为A,B的笛卡儿积,记为A×B。A x B = {(x,y)|x∈A且y∈B}
性质
|A×B|=|A|× |B|;
对任意集合A,有A×Ø=Ø,Ø×A=Ø;
笛卡儿积运算不满足交换律,即A×B≠B×A;
笛卡儿积运算不满足结合律,即(A×B)×C≠A×(B×C)
笛卡儿积运算对并和交运算满足分配律, 即:
A×(B∪C)=(A× ...
CS61C学习笔记(三)-RISCV-Assembly
前言RISC-V是基于RISC精简指令集架构开发的一个开放式指令集架构,它是由加州大学伯克利分校的计算机科学教授Krste Asanovic(克里斯蒂安·阿萨诺维奇)领导的团队开发,RISC-V是开放的,任何人都可以使用它来开发处理器芯片和其他硬件,而无需支付任何许可或使用费用。RISC-V的设计简单,易于扩展和自定义,可以在各种应用场景和市场中使用。
什么是指令集架构?指令集架构(Instruction Set Architecture,简称ISA)是计算机系统中的一个重要概念,指的是计算机中处理器的指令集和处理器的内部结构,即处理器是如何执行指令的。
ISA规定了一套指令集,包括指令的种类、指令的格式、指令的操作数、指令的执行方式等。ISA也规定了处理器的内部结构,包括处理器的寄存器、指令流水线、内存管理单元等。
不同的ISA有不同的指令集和内部结构设计,因此处理器的计算能力和性能也会有所不同。常见的ISA包括ARM、x86、MIPS、PowerPC、RISC-V等。ISA的选择对计算机系统的性能、功耗、软件兼容性、应用场景等都有很大的影响。
简单点比喻可以把指令集架构理解为图纸, ...
CS61C项目笔记(二)-Lab3-RISCV-Assembly
Exercise 1123456789101112131415161718192021222324.data.word 2, 4, 6, 8n: .word 9.textmain: add t0, x0, x0 addi t1, x0, 1 la t3, n lw t3, 0(t3)fib: beq t3, x0, finish add t2, t1, t0 mv t0, t1 mv t1, t2 addi t3, t3, -1 j fibfinish: addi a0, x0, 1 addi a1, t0, 0 ecall # print integer ecall addi a0, x0, 10 ecall # terminate ecall
Q: .data、 .word, .text指令的作用是什么?
A: 汇编语言编程中,像.data、.word和.text这样的指令用于指定代码的不同部分,并定义数据和指令。
.data:该指令标志着数据声明的开始部分。通常后面会跟着变量或常量的声明 ...
CS61C项目笔记(一)-Lab1-编译调试初体验
C的编译和运行在本实验中,我们将使用命令行程序 gcc 在 C 语言中编译程序。运行 gcc 的最简单方法如下:
1$ gcc program.c
这会将 program.c 编译为名为 a.out 的可执行文件。如果你学过 CS61B 或有 Java 经验,你可以把 gcc 看作是 Java 的 C 等价物。可以使用以下命令运行此文件:
1$ ./a.out
可执行文件是 a.out ,那么到底 ./ 是干什么用的呢?答:当您要执行可执行文件时,您需要在文件路径前面加上一个文件路径,以便将您的命令与 python3 等命令区分开来。该点表示“当前目录”。顺便说一句,双点 ( .. ) 表示更高一级的目录。
gcc 有各种命令行选项,鼓励您探索。但是,在本实验中,我们将仅使用 -o ,它用于指定 gcc 创建的可执行文件的名称。您可以使用以下命令编译 program.c 为名为 program 的程序,然后运行它。如果您不希望所有可执行文件都命名 a.out ,这将很有帮助。
12$ gcc -o program program.c$ ./program
若编译的程序需要调试, ...
CS61C学习笔记(一)-数字表示法
位(Bits)能表示一切!
Binary、Decimal、Hex
十进制
二转十进制
十六进制
十进制到二/十六进制从左到右赋满
二进制到十六进制因为十六进制是逢16进1,所以取四位作为一位十六进制
数字表达法无修饰
五位bits来表达
范围是0 ~ 2^4^-1
修饰
五位bits中的最高位表示正负
范围 -15 ~ 15
问题:
存在两个0 (00000和10000)
中间往两边变大
反码将修饰全部取反
但是有个问题,还是有两个重叠的0
所以我们把负往左移动一位 及 加一位,于是获得了补码
补码
偏置
注意: 是 未修饰 加上 bias偏置