计算机系统基础

C 语言相关内容省略,复习自用,仅供参考~

概述

冯·诺伊曼结构

存储程序工作方式:将事先编好的程序和原始数据送入主存后才能执行程序,程序被启动执行后,计算机能在不需要操作人员干预下自动完成逐条指令取出和执行的任务。
模型机的基本硬件结构
程序执行过程:主存取指令 → \to 指令译码 → \to PC 自增 → \to 取操作数并执行 → \to 结果送往主存或寄存器

层次结构

计算机系统抽象层次转换
计算机系统的层次化结构

性能评价

单位时间完成的工作量:吞吐率,带宽;作业提交开始到完成所需的时间:响应时间,执行时间,等待时间或时延。

用户 CPU 时间 = = = 平均时钟周期数 × \times × 时钟周期 = = = 平均指令条数 × \times × CPI × \times × 时钟周期.
时钟周期(ns) = 1 / =1/ =1/ 时钟频率(GHz); 1 1 1 GHz = 1 0 3 10^3 103 MHz = 1 0 9 = 10^9 =109 Hz; 1 1 1 s = 1 0 9 10^9 109 ns.
CPI(执行一条指令所用的时钟周期) = = = 平均时钟周期数 ÷ \div ÷ 平均指令条数.
MIPS(平均每秒执行百万条指令数) = 1 / =1/ =1/ 时钟周期(ns) ÷ \div ÷ CPI × 1 0 − 6 \times 10^{-6} ×106.

CPI 越低,时钟频率越高(即时钟周期越低)时,用户 CPU 时间越低(即CPU执行速度越快)。
峰值 MIPS 在 CPI 最低处。

整体改进后速度提升倍数 = 1 / ( =1/( =1/( 改进部分时间比例 / / / 改进部分速度提升倍数 + + + 未改进部分时间比例 ) ) ).

数据

整数

进制转换 b n . . . b 0 . b − 1 . . . b − m ( R ) = ∑ i = − m n b n R n ( 10 ) , m , n > 0 {b_n...b_0.b_{-1}...b_{-m}}_{(R)}={\sum_{i=-m}^n b_nR^n}_{(10)}, m,n>0 bn...b0.b1...bm(R)=i=mnbnRn(10),m,n>0.
2 进制 ⇔ \Leftrightarrow 16 进制:4 位一组。
小端存储 A 1 A 2   ∣   B 1 B 2   ∣   C 1 C 2   ∣   D 1 D 2 → D 1 D 2 C 1 C 2 B 1 B 2 A 1 A 2 ( 16 ) A_1A_2\ | \ B_1B_2\ | \ C_1C_2\ | \ D_1D_2 \to {D_1D_2C_1C_2B_1B_2A_1A_2}_{(16)} A1A2  B1B2  C1C2  D1D2D1D2C1C2B1B2A1A2(16).
字长:ALU 内部的数据宽度。
补码:正数符号位为 0,数值为自身;负数符号位为1,数值为按位取反后末位加 1。
求反: − y = ( ∼ y ) + 1 -y=(\sim y)+1 y=(y)+1,其中 ∼ \sim 为按位取反。

加法器标志寄存器ZF 零标志OF 溢出标志SF 符号标志CF 进/错位标志
0结果不为 0结果未溢出(有符号)结果为正结果最高位发生进/错位;结果未溢出(无符号)
1结果为 0结果发生溢出(有符号)结果为负结果最高位无进/错位;结果发生溢出(无符号)

减法时, x − y = x + ( ( ∼ y ) + 1 ) x-y=x+((\sim y)+1) xy=x+((y)+1) 中加法进位记为 C C C,则 C F = ! C CF=! C CF=!C,其中 ! ! ! 为逻辑非。

异号相加同号相减时,永远不会溢出。
正溢出:正数 + + + 正数 → \to 负数,即正数 − - 负数 → \to 负数。
负溢出:负数 + + + 负数 → \to 正数,即负数 − - 正数 → \to 正数。

浮点数(IEEE 754)

单精度值类型符号(1位)阶码(8位,偏置127)尾数(23位)
规格化非零数0 或 1 0 < e < 255 0<e<255 0<e<255任意 ( − 1 ) s × 2 e − 127 × ( 1. f ) (-1)^s\times2^{e-127}\times(1.f) (1)s×2e127×(1.f)
正零000 + 0 +0 +0
负零100 − 0 -0 0
正无穷大0全 1,即 255 ( 10 ) _{(10)} (10)0 + ∞ +\infty +
负无穷大1全 10 − ∞ -\infty
非规划化数0 或 10非 0下溢, ( − 1 ) s × 2 − 126 × ( 0. f ) (-1)^s\times2^{-126}\times(0.f) (1)s×2126×(0.f)
非数0 或 1全 1非 0 N a N NaN NaN
  • 浮点数加减法
    对阶:小阶向大阶对齐,隐藏位还原到尾数。
    尾数加减:定点原码加减,注意符号
    规格化:右规,尾数右移,阶码加 1;左规,尾数左移,阶码逐次减 1。
    尾数舍入:保护位 + + + 舍入位 + + + 粘位;就近舍入(0 舍 1 入),正向舍入,负向舍入,向 0 舍入。
    溢出判断:右规时会发生阶码上溢;左规时会变为非规格化数。

汇编(IA-32)

基础

  • AT&T 格式
    指令形式:“op src,dst”,即 dst ← \gets dst op src.
    长度后缀:b → \to 8bit;w → \to 16bit;l → \to 32bit;q → \to 64bit.
    数字:“$number”.
    寄存器操作数:“%register”.
    存储器操作数(寻址方式):“offset ( %base, %index, scale )”,即 %base + + + %index × \times × scale + + + offset.
    指令类型:传送(数据传送/地址传送/标志传送/IO);定点算术运算(加减乘除/自增自减/取负/比较);按位运算(逻辑/移位);控制转移(无条件转移/条件转移/条件设置/条件传送/调用返回/内中断)。
  • IA-32 寄存器
    通用寄存器(32bit):EAX 累加器,EBX 基址寄存器,ECX 计数寄存器,EDX 数据寄存器,ESP 栈指针寄存器,EBP 基址指针寄存器,ESI 源变址寄存器,EDI 目标变址寄存器。
    专用寄存器(32bit):EIP 指针指令寄存器,EFLAGS 标志寄存器。
    段寄存器(16bit):CS 代码段,SS 堆栈段,DS 数据段,ES FS GS 附加段。

C语言逆向

(待更新~)
过程调用:内存分配,栈帧结构
运算还原
选择结构:switch-case实现 - 连续比较/数组/二分查找
循环结构:while/do-while/自增自减
数组
内存对齐

链接

ELF 文件格式:ELF 头 + + + .text 节(目标代码) + + + .rodata 节(只读数据) + + + .data 节(已初始化全局变量) + + + .bss 节(未初始化全局变量,占位符) + + + .symtab 符号表(函数名和非局部变量名) + + +.rel.text 节(重定位) + + + .rel.data 节(重定位) + + + .debug 节(调试符号表) + + + .line 节(-g 选项) + + + .strtab 节(符号及节名) + + + 节头表。
可读写数据段.data 节(已初始化全局变量) + + + .bss 节(未初始化全局变量,占位符)

符号分类:全局非 static);外部extern);本地static)。
符号解析:强符号为函数名和已初始化全局变量名;弱符号为未初始化全局变量名;本地符号无强弱。
强符号只能定义一次;同时有强弱符号,符号类型以强符号为准弱符号指向同一处地址;多个弱符号,任选其一。

例题

  • 有符号整数表示(字长 16bit)
    0F 80 → \to 1000 0000 0000 1111 (补) → \to -32753 ( 10 ) _{(10)} (10).
  • 有符号整数减法(字长 8bit)
    A3H - 3AH → \to 1010 0011 (补) − - 0011 1010 (补) = = = 1010 0011 (补) + 1100 0110 (补) = = = 0110 1001 (补) → \to 69H; 标志 CF = = = 0, OF = 1 =1 =1, SF = = = 0, ZF = = = 0; 负溢.
  • 单精度浮点数表示(大端)
    3FB00000H → \to 1.011B → \to 1.375 ( 10 ) _{(10)} (10).
    C2FA4000H → − \to - 1.111101001B → \to -125.125 ( 10 ) _{(10)} (10).
  • 单精度浮点数加法(大端)
    3FB00000H + + + C2FA4000H → \to 对阶 0.00000101100 ( 2 ) +   − _{(2)} +\ - (2)+  1.111101001 ( 2 ) _{(2)} (2); 阶码 10000101 ( 2 ) → _{(2)} \to (2) 尾数加减 − - 1.11101111000 ( 2 ) → _{(2)}\to (2) 规格化 1 ∣ | 1000 0101 ∣ | 1110 1111 0000 0000 0000 000 → \to 尾数舍入(无) → \to C2F78000H.
  • 链接(gcc -m32)
// main.c
#include <stdio.h>
int d = 100;
int x = 200;
int y = 300;
void pi(void);

int main() {
  y = 0;
  p1();
  printf("d=%d, x=%d, y=%d\n", d, x, y);
  return 0;
}
// p1.c
double d;
short y;
void p1(void) {
  d = 1.0;
  y = -100;
}
gcc -m32 -o linktest main.c p1.c
./linktest
>>> d=0, x=1072693248, y = 65436

d = d= d= 1.0 (double, 64 bit) → \to 00 00 00 00 ∣ | 00 00 F0 3F (小端) → x = \to x= x= 3FF00000H (大端), d = d= d= 0 → x = \to x= x= 1072693248, d = d= d= 0.
y = y= y= -100 (short, 16bit) → \to 1001 1100 1111 1111 (补) → \to 11 11 11 11 11 11 11 00 11 01 10 ∣ | 00 00 … (小端) → \to 65436 ( 10 ) _{(10)} (10).

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/289772.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

解析为什么Go语言要使用[]rune而不是string来表示中文字符

众所周知&#xff0c;Go语言中有以下这些数据类型。但rune32这个go语言特有的数据类型&#xff0c;比较有意思却经常遭到忽视。所以今天探索学习一下这个数据类型的功能、用法。 Go基本数据类型 布尔&#xff1a;bool 字符串&#xff1a;string 整数&#xff1a; int int8 …

NNDL 作业13 优化算法3D可视化 [HBU]

老师作业原博客:【23-24 秋学期】NNDL 作业13 优化算法3D可视化-CSDN博客 NNDL 作业13 优化算法3D可视化-CSDN博客 编程实现优化算法&#xff0c;并3D可视化 1. 函数3D可视化 分别画出 和 的3D图 NNDL实验 优化算法3D轨迹 鱼书例题3D版_优化算法3d展示-CSDN博客 代码&#…

JSON网络令牌JWT

1.什么是身份验证 日常生活中的身份验证的场景: 比如进入公司的大楼时&#xff0c;需要携带工牌&#xff1b;打卡上班时&#xff0c;需要指纹识别&#xff1b;打开工作电脑时&#xff0c;需要输入密码。 2. 什么是 JSON 网络令牌&#xff1f; JSON Web Token (JWT) 是一个开…

智能编程助手!华为云CodeArts Snap免费公测:基于盘古研发大模型

近日&#xff0c;华为云CodeArts Snap正式开启公测。 这是一款基于华为云研发大模型的智能化编程助手&#xff0c;旨在为开发者提供高效且智能的编程体验&#xff0c;提升研发人员的单兵作战能力。 该服务公测期间免费&#xff0c;不向用户收取任何费用&#xff0c;商用后&am…

【论文阅读|冷冻电镜】DISCA: High-throughput cryo-ET structural pattern mining

论文题目 High-throughput cryo-ET structural pattern mining by unsupervised deep iterative subtomogram clustering 摘要 现有的结构排序算法的吞吐量低&#xff0c;或者由于依赖于可用模板和手动标签而固有地受到限制。本文提出了一种高吞吐量的、无需模板和标签的深度…

【C++入门到精通】function包装器 | bind() 函数 C++11 [ C++入门 ]

阅读导航 引言一、function包装器1. 概念2. 基本使用3. 逆波兰表达式求值&#xff08;1&#xff09;普通写法&#xff08;2&#xff09;使用包装器以后的写法 二、bind() 函数温馨提示 引言 很高兴再次与大家分享关于 C11 的一些知识。在上一篇文章中&#xff0c;我们讲解了 c…

Vue前端文字效果:如何让一段文本像是手动一个一个字打出来的

效果展示 自己做的AI聊天机器人界面&#xff0c;我觉得比微信还好看 由于这个前端略微复杂&#xff0c;下文用最简单的例子来展示&#xff1a; 分析需求 对于AI聊天工具的前端&#xff0c;如果AI生成的文本像是一个一个字打出来的&#xff0c;就会让AI看起来更像真的人&…

打造炫酷粒子效果的前端利器tsParticles

前端潮流速递 &#xff1a;打造炫酷粒子效果的前端利器tsParticles 在现代前端开发中&#xff0c;动画和视觉效果是吸引用户的关键元素之一。而实现炫酷而引人入胜的粒子效果&#xff0c;常常需要耗费大量的时间和精力。然而&#xff0c;有了 tsParticles&#xff0c;这一切变…

MySQL 8.0 开关 Redo Logging

一 前言 前几天有客户测试使用云数据库的时候提出 要禁止mydumper 关闭redo log的操作 (说白了就是导入数据时保持MySQL 实例的redo logging功能)&#xff0c; 这才想起 在 MySQL 8.0.21 版本中&#xff0c;开启了一个新特性 “Redo Logging 动态开关”。 在新实例导数据的场…

搭建宠物寄养小程序流程

近日&#xff0c;一地宠物寄养需求旺盛&#xff0c;元旦满房&#xff0c;春节几近饱和&#xff0c;一窝难求。随着市场需求的增长&#xff0c;对于很多宠物行业的商家&#xff0c;可以考虑开展宠物寄养服务&#xff0c;尤其是节假日的宠物寄养需求会更高。因此&#xff0c;商家…

FastApi-快速入门1

FastAPI 是一个用于构建 API 的现代、快速&#xff08;高性能&#xff09;的 web 框架&#xff0c;使用 Python 3.8 并基于标准的 Python 类型提示。 关键特性: 快速&#xff1a;可与 NodeJS 和 Go 并肩的极高性能&#xff08;归功于 Starlette 和 Pydantic&#xff09;。最快…

算法通关村番外篇-数组实现队列

大家好我是苏麟 , 今天来用数组实现一下队列 . 数组实现队列 顺序存储结构存储的队列称为顺序队列&#xff0c;内部使用一个一维数组存储&#xff0c;用一个队头指针 front 指向队列头部节点(即使用int类型front来表示队头元素的下标)&#xff0c;用一个队尾指针rear(有的地方…

3dmax灯光缓存参数应该怎么设置?

细分&#xff1a;用来决定灯光缓存的样本数量&#xff0c;样本数量以此数值的平方来计算。数值越高&#xff0c;效果越好&#xff0c;速度越慢。 一般出图建议1000到1800之间已经足够了 采样大小&#xff1a;用来控制灯光缓存的样本尺寸大小&#xff0c;较小的数值意味着较小的…

Vue 模板编译原理解析

Vue 模板编译原理解析 模板编译整体流程 首先我们看一下什么是编译&#xff1f; 所谓编译&#xff08;Compile&#xff09;&#xff0c;指的是将语言 A 翻译成语言 B&#xff0c;语言 A 就被称之为源码&#xff08;source code&#xff09;&#xff0c;语言 B 就被称之为目标…

清风数学建模笔记-主成分分析

内容&#xff1a;主成分分析 介绍&#xff1a; 主成分分析是一种降维算法&#xff0c;它通过旋转和变换将多个指标转化为少数几个主成分&#xff0c;这些主成分是原变量的线性组合&#xff0c;且互不相关&#xff0c;其能反映出原始数据的大部分信息。 例如解决多重共线性问题…

Vue+ElementUI笔记(1)

一、表格 1.上移、下移和移除功能 需求&#xff1a;有时我们会面对类似这样的表格 图中的上移&#xff0c;下移功能需求明显要求我们改变两行数据的顺序。在实际开发中这种功能一般由后台来做&#xff0c;因为列表数据一般从后台获取刷新。即是我们点击”上移“&#xff0c;向…

K8Spod组件

一个pod能包含几个容器 一个pause容器(基础容器/父容器/根容器&#xff09; 一个或者多个应用容器(业务容器) 通常一个Pod最好只包含一个应用容器&#xff0c;一个应用容器最好也只运行一个业务进程。 同一个Pod里的容器都是运行在同一个node节点上的&#xff0c;并且共享 net、…

20、Finetuning

微调是指调整大型语言模型&#xff08;LLM&#xff09;的参数以适应特定任务的过程&#xff0c;用于改进预训练模型的性能。这是通过在与任务相关的数据集上训练模型来完成的。所需的微调量取决于任务的复杂性和数据集的大小。 PEFT&#xff08;Parameter-Efficient Fine-Tunin…

前端发开的性能优化 请求级:请求前(资源预加载和预读取)

预加载 预加载&#xff1a;是优化网页性能的重要技术&#xff0c;其目的就是在页面加载过程中先提前请求和获取相关的资源信息&#xff0c;减少用户的等待时间&#xff0c;提高用户的体验性。预加载的操作可以尝试去解决一些类似于减少首次内容渲染的时间&#xff0c;提升关键资…

逻辑回归(LR)----机器学习

基本原理 逻辑回归&#xff08;Logistic Regression&#xff0c;LR&#xff09;也称为"对数几率回归"&#xff0c;又称为"逻辑斯谛"回归。 logistic回归又称logistic 回归分析 &#xff0c;是一种广义的线性回归分析模型&#xff0c;常用于数据挖掘&#…