计算机系统基础

第一周、计算机系统概述

摸鱼了!!!

第二周、数据的表示和存储

第一讲 数制和编码

1、信息的二进制编码

机器级数据分两大类

  • 数值数据:无符号整数、带符号整数、浮点数(实数)
  • 非数值数据:逻辑数(包括位串)、西文字符和汉字

计算机内部所有信息都用二进制(即:0和1)进行编码
用二进制编码的原因

  • 制造二个稳定态的物理器件容易(电位高/低,脉冲有/无,正/负极)
  • 二进制编码、计数、运算规则简单
  • 正好与逻辑命题真/假对应,便于逻辑运算
  • 可方便地用逻辑电路实现算术运算

真值和机器数( 非常重要的概念!)

  • 机器数:用0和1编码的计算机内部的0/1序列
  • 真值:真正的值,即:现实中带正负号的数

**例:**unsigned short型变量x的真值是127,其机器数是多少?
127=27-1,其机器数为0000 0000 0111 1111

2、数值数据的表示

数值数据表示的三要素

  • 进位计数制 (二进制、八进制、十进制、十六进制)
  • 定、浮点表示 (定点表示、浮点表示)
  • 如何用二进制编码(原码、补码或者移码)

**即:**要确定一个数值数据的值必须先确定这三个要素。
进位计数制

  • 十进制、二进制、十六进制、八进制数及其相互转换

定/浮点表示(解决小数点问题)

  • 定点整数、定点小数
  • 浮点数(可用一个定点小数和一个定点整数来表示)

定点数的编码(解决正负号问题)

  • 原码、补码、反码、移码 (反码很少用)

3、十进制(Decimal)计数制

十进制用0、1、2、3、4、5、6、7、8、9来表示。“10”称为基数(base),它代表每个数位上可以使用的不同数字符号个数(也就是有0~9个符号可以使用)。10^i称为第i位上的权。运算时, “逢十进一”。

4、二进制(Binary)计数制

与十进制类似;

5、R进位计数制

与十进制类似;
image.png

6、八进制和十六进制


**问:**为什么还要引入 八进制 / 十六进制呢?
**答:**因为二进制太长了,不方便阅读。

**八进制:**Octal (用后缀“O”表示)
**十六进制:**Hexadecimal (用后缀“H”,或前缀“0x”表示)

7、十进制数与R进制数之间的转换

(1) R进制数 => 十进制数
按照权值展开;
(2) 十进制数=>R进制数
整数–****–“除基取余,上右下左”
小数----“乘基取整,上左下右”
image.png
PS:小数点在计算机中怎么表达?

8、定点数和浮点数

计算机中只有0和1,数值数据中的小数点怎么表示呢?

  • 计算机中只能通过约定小数点的位置来表示。
  • 小数点位置约定在固定位置的数称为定点数
  • 小数点位置约定为可浮动的数称为浮点数

**定点小数:用来表示浮点数的尾数部分
定点整数:用来表示整数,分带符号整数和无符号整数
任何实数:X=(-1)S×M×RE **(类似于科学计数法)

  • s s s 表示符号位,取值为 0 0 0 1 1 1,用于表示数的正负。

  • M M M 表示尾数(或有效数字),是一个二进制小数,可以看做是一个带符号的定点数,其值在 1 1 1 (包括)和 2 2 2 (不包括)之间。

  • R R R 表示基数,通常是 2 2 2

  • E E E 表示指数,是一个整数,用于表示浮点数需要乘以多少个基数才能得到原数,其取值范围会根据具体的浮点数格式而不同。

  • S取值为0或1,用来决定数X的符号;

  • M是一个二进制定点小数,称为数X的尾数(mantissa);

  • E是一个二进制定点整数,称为数X的阶或指数(exponent);

  • R是基数(radix、base),可以为2、4和16等。 计算机中只要表示S、M和E三个信息,就能确定X的值,这称为浮点数




第二讲 定点数的编码表示

1、原码

原码可以说是所有编码的根源

原码是一种表示有符号整数的二进制编码方式,其特点是用二进制数的最高位表示符号,0 表示正数,1 表示负数,其它位则表示数值的绝对值。例如,一个 8 位的二进制数,其最高位为符号位,范围为 -2^7 到 2^7-1。比如,数字 3 的原码是 00000011,-3 的原码是 10000011。

原码表示法相对简单和直观,但存在一些问题。例如,在进行加减运算时,需要额外处理符号位;而且整数的取值范围不对称,正数和负数的取值范围不一样,分别为 0~2^{n-1}-1和 -2^{n-1}~-1(其中 n n n 是表示整数使用的二进制位数)。因此,在实际应用中,更多采用补码、反码等方式来表示有符号整数,这种编码方式能够解决原码存在的一些问题。

2、补码

使用补码代替原码可以统一加减法
00102+00102=01002 (2+2=4)
00102+11102=00002 (2+(-2)=0)
模运算:
比如始终就是一个模12系统:
6点是时针指向 6、18点是时针指向 6(18mod12)
负数的模运算:比如-4,-4=12-(|-4|)=8 ,8就是-4"补码"
10 - 4 => 10+(4的补码)=18(但是18要mod12 才是答案,即6)

假定机器数有n位,n=3
真值的范围是-2^n-1 ~ (2^n-1)-1
[X]补= 2^n+ X (-2n-1≤X<2n-1,mod 2^n)
例如:X=-4
[X]补=2^n+X=8-4=4 ,查表发现4和-4用的是同一个二进制数

无符号数01234567
000001010011100101110111
真值0123-4-3-2-1

负数在计算机中以补码的形式存储,正数在计算机中以原码的形式存储。
正数的补码

  • 正数的原码、补码、反码、相同;

负数求补码
负数如何求补码?分为如下步骤:

  • 首先求出负数的原码,如-8的原码为 1000 1000,
  • 通过原码求出它的反码,负数的反码就是 除符号为以外,其余的全部求反,如-8 反码为 1111 0111,
  • 负数的反码 +1,就是它的补码,如 -8 的补码为 1111 1000

_ _一个负数的补码等于将对应正数补码各位取反、末位加一

特殊为的补码:
假定机器数有n位
① [-2n-1]补= 2^n- 2^(n-1)= 10…0(n-1个0) (mod 2n)
② [-1]补= 2n- 0…01 = 11…1(n个1)(mod 2n)
③ [+0]补= [-0]补= 00…0(n个0

image.png

3、变形补码(4’s comlement)的表示

image.png

4、求补码的真值

image.png

5、移码表示Excess (biased) notion

原码01234567
编码000001010011100101110111
移码-4-3-2-10123
补码0123-4-3-2-1

问:所以为什么用移码来表示解码????
答:浮点数进行加减运算时,要先比较阶码是否一致,如果一致在对尾数进行操作,如果不一致就要进行大小比较,把阶码小的变大。在进行比较时,如果使用原码(也就是有符号数)来表示阶码会比较麻烦,因为需要判断符号;如果使用移码,就可以把他们当成无符号数进行比较,比较方便,因为不需要判断符号。
image.png

第三讲 C语言中的整数

要点:整数以补码的形式存储,但是解释的方式不同,同一个01序列表的意思也就不同
举例:-1<0u (表达式里面有一个无符号数一个有符号数,计算机会把他们两个当成无符号数进行比较)
-1: 1111 1111 1111 1111 1111 1111 1111 1111 这个01序列看成无符号数结果就是最大无符号整数
0: 0000 0000 0000 0000 0000 0000 0000 0000 这个01序列看成无符号数结果依旧0
所以比较的结果为false


第四讲、浮点数的编码表示

1、科学计数法与浮点数

不用怀疑,浮点数就是以2为基数的科学计数法;
image.png


2、浮点数(Floating Point)的表示范围

image.png


3、IEEE 754标准(浮点数的表示)

image.png


4、浮点数转换为真值

image.png


5、真值转浮点数

image.png
1.75的浮点数举例:

要表示1.75的浮点数,我们需要使用特定的浮点数表示规范。常见的浮点数表示规范包括IEEE 754单精度(32位)和双精度(64位)标准。
在IEEE 754单精度浮点数标准中,浮点数由三个部分组成:符号位(1位),指数部分(8位),和尾数部分(23位)。其中,指数部分用于指定10进制小数点的位置,尾数部分存储小数的二进制表示。
将1.75表示为IEEE 754单精度浮点数,以下是该数的表示过程:
符号位(S):正数,S为0。
整数部分和小数部分的二进制表示:
1.75 = 1.11(二进制)
根据IEEE 754单精度浮点数规范,我们需要将1.11标准化为科学计数法表示形式:1.11 * 2^0。
指数部分(E):0(由于标准化,小数点在第一位,因此指数为0)。
尾数部分(M):尾数部分是小数部分去掉整数部分的二进制表示,即0.11。
将这些部分组合起来,得到1.75的IEEE 754单精度浮点数表示为:
符号位(S):0
指数部分(E):0(以偏移值127表示,实际指数为0 + 127 = 127)
尾数部分(M):11000000000000000000000(尾数部分补齐到23位)
组合起来:0 01111111 11000000000000000000000
请注意,以上表示是基于IEEE 754单精度浮点数标准。其他浮点数标准可能会有不同的表示形式。

6、0的机器数表示

7、+∞/-∞的机器数表示

8、“非数”的表示

9、非规格化数(Denorms)的表示

10、关于浮点数精度的一个例子

image.png

第五讲、非数值数据的编码表示

第六讲、数据宽度和存储容量的单位

第七讲、数据存储时的字节排列

第三周、数字逻辑电路基础

第一讲、数字逻辑电路基础

1、布尔代数

image.png

第二讲、C表达式到逻辑电路

第三讲、C语言中的各类运算

1、C语言程序中涉及的运算

**问:**如何从数据y中提取低位字节,并使高字节为0?
答:……
image.png

2、C语言程序中涉及的运算

PS : 对数值操作时可能会造成数据丢失**!!!**

#include<stdio.h>
int main()
{
	//有符号数  左移时低位补0,右移动时看符号位,看原来的符号位,符号位是啥就补啥!

	int a = 0x7fffffff;//01111111 11111111 11111111 11111111
	int a1 = a << 1;   //11111111 11111111 11111111 11111110    fffffffe
 	int a2 = a >> 1;   //00111111 11111111 11111111 11111111	3fffffff
	printf("a1=%0xd		a2=%0xd\n", a1, a2);


	int b = 0x8fffffff;        //10001111 11111111 11111111 11111111
	int b1 = b << 1;           //00011111 11111111 11111111 11111110	1ffffffe  
	int b2 = b >> 1;		   //11000111 11111111 11111111 11111111	c7ffffff
	printf("b1=%0xd		b1=%0xd\n", b1, b2);


	//无符号整数 逻辑移位 和 算数移位 的结果一致:(因为逻辑移位无论是左移还是右移,补的都是0,无符号的算术位移,因为)

	unsigned int c = 0x7fffffff;//01111111 11111111 11111111 11111111  右移高位补0
	printf("c=%0xd\n", c >> 1); //00111111 11111111 11111111 11111111 3f ff ff ff 

	unsigned int d = 0x7fffffff;//01111111 11111111 11111111 11111111  左移低位补0
	printf("d=%0xd\n", d << 1); //11111111 11111111 11111111 11111110 ff ff ff fe 

}

第四讲、整式加减运算

第四周、整出运算及浮点数运算

第一讲、整数乘法运算

**问:**对于C语言程序中的表达式z=xy,其中x,y和z都是32位的int型整数,z的取值为xy的64位乘积中的低32位。
答:正确!!!

第二讲、整数除法运算

第三讲、浮点数运算

第五周、IA-32指令系统概述

第一讲、程序转换概述

第二讲、IA-32指令系统概述

test.c 预处理得到test.i
test.i编译得到汇编代码test.c
通过汇编命令gcc -c test.s -o test.o生成可重定位的目标代码,test.o是一个二进制文件(机器指令表示的文件),想要看这个文件需要对其进行反汇编 objdump -d test.o

C 语言是一种高级编程语言,它使用人类可读的语法和结构来编写程序。但计算机不能直接理解 C 语言代码,需要将其编译成机器指令才能在计算机上运行。
编译器是将 C 语言代码转换为机器指令的软件。编译器将源代码分析、优化和翻译为汇编代码,然后将汇编代码转换为机器代码。机器代码是计算机可以直接执行的二进制代码。
下面是将 C 语言程序编译为机器指令的大致步骤:

  1. _ 预处理:编译器首先对源代码文件进行预处理,去掉注释、处理 #include 等预处理指令,并展开宏定义等。 _
  2. _ 编译:编译器将预处理后的 C 语言代码编译成汇编代码,生成一个汇编语言文件(通常以 .s 扩展名保存)。 _
  3. _ 汇编:汇编器将汇编代码翻译为机器指令,生成一个可重定位目标文件(通常以 .o 或 .obj 扩展名保存)。 _
  4. _ 链接:链接器将目标文件与库文件等进行链接,生成一个可执行文件(通常以 .exe 或没有扩展名保存)。 _

这样就完成了从 C 语言源代码到可执行文件的编译过程。最终生成的可执行文件包含机器指令和其他系统信息,可以在操作系统上运行并执行程序。

第六周、IA-32指令类型

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 计算机系统基础是计算机科学与技术领域中的一门重要课程,主要涵盖计算机系统的硬件、软件、操作系统、网络等方面的知识。在学习这门课程时,学生们会了解计算机系统的组成、设计原理以及工作原理。 首先,计算机系统由硬件和软件两个部分组成。硬件包括中央处理器(CPU)、内存、存储设备、输入输出设备等,它们共同协作完成计算机的运算和数据存储功能。软件则包括操作系统、应用软件和编程语言等,它们使计算机硬件能够发挥作用并实现特定的功能。 其次,计算机系统基础还涉及到计算机的操作系统。操作系统是计算机系统的核心软件,它负责管理和控制计算机硬件资源,为用户和应用程序提供统一的接口。学习计算机系统基础,我们需要了解操作系统的基本功能、进程管理、内存管理、文件系统等重要知识,以便能够合理地利用和管理计算机系统资源。 在计算机系统基础课程中,还会学习计算机网络的基础知识。计算机网络是计算机系统之间相互连接和通信的基础设施,它使得分布式计算成为可能,并且提供了全球范围内的信息传输能力。学习计算机网络的基础知识,我们需要了解网络协议、网络拓扑、数据传输、网络安全等方面的内容。 总之,计算机系统基础课程对于我们掌握计算机科学与技术领域的基础知识至关重要。通过学习计算机系统基础,我们能够深入了解计算机系统的原理和工作方式,为进一步学习和研究计算机科学相关领域奠定坚实的基础。 ### 回答2: 计算机系统基础是指对计算机硬件、操作系统和计算机网络等方面的理论和知识进行研究和学习。在CSDN上,我们可以找到很多优质的相关资料和学习资源。 首先,计算机系统基础主要包含了计算机的硬件结构和原理,包括中央处理器(CPU)、内存、输入输出设备等硬件组成部分以及它们之间的工作原理和协调方式。我们可以在CSDN上找到很多关于计算机硬件的文章和教程,可以帮助我们更好地了解计算机的工作原理和性能优化等方面的知识。 其次,操作系统是计算机系统基础中的重要组成部分,它负责管理计算机的资源和提供各种服务。在CSDN上,可以找到很多关于操作系统的文章和教程,包括常见的操作系统原理、文件系统、进程管理、内存管理等内容,这些资料能够帮助我们深入理解操作系统的工作原理和使用方法。 此外,计算机网络也是计算机系统基础中的重要内容之一。计算机网络连接了各种计算机和设备,实现了信息的传输和共享。在CSDN上可以找到很多关于计算机网络的资料,包括网络协议、网络拓扑、网络安全等方面的内容,这些资料对于理解和应用计算机网络是非常有帮助的。 总结起来,计算机系统基础是计算机科学的重要基础知识,通过在CSDN上学习相关内容,我们能够更好地了解计算机原理和系统工作方式,提升自己在计算机领域的知识和技能。 ### 回答3: 计算机系统基础是指对计算机系统的各个方面进行全面了解和学习的一门课程。它涉及到计算机硬件、操作系统、网络和计算机体系结构等方面的知识。 在计算机硬件方面,我们需要了解计算机的组成和工作原理,包括中央处理器(CPU)、内存、硬盘、显卡等硬件设备的作用和相互之间的关系。此外,我们还需要了解各种输入输出设备以及计算机系统的扩展和连接方式。 在操作系统方面,我们需要学习操作系统的功能和特点,如进程管理、文件系统、内存管理、设备管理等。我们还需要了解操作系统的启动过程和运行机制,了解不同操作系统的特点和使用方法。 在网络方面,我们需要了解计算机网络的基本概念、网络拓扑结构以及常见的网络协议。我们还需要学习如何利用网络进行数据传输和通信,并了解网络安全和数据保护的基本知识。 在计算机体系结构方面,我们需要了解计算机系统的层次结构、指令集和微指令的概念,以及计算机的运行模式和工作原理等。我们还需要了解不同的计算机体系结构和它们的特点,如单处理器、多处理器和分布式系统等。 通过学习计算机系统基础,我们能够深入了解计算机系统的各个方面,为我们进一步深入学习计算机科学和应用开发打下坚实的基础。它对我们理解计算机系统的工作原理、解决计算机系统中的故障和优化系统性能等都具有重要的意义。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值