计算机系统基础

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).

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

奋楫扬帆,奔赴新程 | 2023 年图扑大事记回顾,与您携手共迎 2024

2023.01 工信部公示了 2022 年度智能制造示范工厂揭榜单位和优秀场景名单。图扑软件和上海洲邦合作建设的宁波甬友数字孪生工厂被评为优秀场景&#xff0c;全国共有 369 个智能制造典型场景入选。 2023.01 在第十一届中国创新创业大赛全国赛&#xff08;新一代信息技术&#…

RabbitMQ(八)消息的序列化

目录 一、为什么需要消息序列化&#xff1f;二、常用的消息序列化方式1&#xff09;Java原生序列化&#xff08;默认&#xff09;2&#xff09;JSON格式3&#xff09;Protobuf 格式4&#xff09;Avro 格式5&#xff09;MessagePack 格式 三、总结 RabbitMQ 是一个强大的消息中间…

通信基础——带宽

随着信息社会的发展和数字化进程的加速&#xff0c;通信技术已经成为现代社会最为重要的基础设施之一。而在通信技术中&#xff0c;带宽作为一个重要的概念&#xff0c;对于我们理解和应用现代通信技术具有至关重要的意义。本文将以“通信基础——带宽”为主题&#xff0c;对带…

高性能NVMe Host Controller IP

NVMe Host Controller IP 介绍 NVMe Host Controller IP可以连接高速存储PCIe SSD&#xff0c;无需CPU和外部存储器&#xff0c;自动加速处理所有的NVMe协议命令&#xff0c;具备独立的数据写入AXI4-Stream/FIFO接口和数据读取AXI4-Stream/FIFO接口&#xff0c;非常适合于超高…

华芯微特MCU之TIMER触发ADC

01 TIMER定时器之脉冲发送功能 我们今天详细讲解一下TIMER的ADC触发功能。 SWM190的TIMER2/3支持SAR ADC触发功能&#xff0c;此功能配置为定时器或脉冲发送均有效&#xff0c;可通过配置相应寄存器实现。 将SAR ADC CTRL寄存器中TRIG设置为TIMER2触发或TIMER3触发。TIMER可作…

技术旅程分享:收获与成长的探索

2023年对我而言是充满挑战和机遇的一年&#xff0c;我在这段时间里积累了丰富的技术经验和个人成长。通过不懈努力和持续学习&#xff0c;我在技术领域迈出了一系列坚实的步伐。在这篇文章中&#xff0c;我将分享我在这段时间中的收获和技术成长经历&#xff0c;与CSDN的朋友们…

数据库存储过程

存储过程(特定功能的 SQL 语句集) 一组为了完成特定功能的 SQL 语句集&#xff0c;存储在数据库中&#xff0c;经过第一次编译后再次调用不需要再次编译&#xff0c;用户通过指定存储过程的名字并给出参数&#xff08;如果该存储过程带有参数&#xff09;来执行它。存储过程是…

vue的小入门

vue的快速上手 Vue概念 是一个用于构建用户界面的渐进式框架优点&#xff1a;大大提高开发效率缺点&#xff1a;需要理解记忆规则 创建Vue实例 步骤&#xff1a; 准备容器引包创建Vue实例new Vue()指定配置项el data>渲染数据 el指定挂载点&#xff0c;选择器指定控制…

解决burpsuite代理8080端口无法勾选以及卸载NI系列软件的方法

使用burpsuite中遇到这样一个问题 默认的8080端口无法绑定 提示端口已经被占用 尝试绑定其他端口&#xff0c;是可行的&#xff0c;也可以正常抓包 但是总感觉每次进来都设置添加一次&#xff0c;有点麻烦不舒服 那么我们来看一下8080端口到底被什么进程占用了 使用如下命令…

计算机视觉中的神经网络可视化工具与项目

前言 本文介绍了一些关于神经网络可视化的项目&#xff0c;主要有CNN解释器&#xff0c;特征图、卷积核、类可视化的一些代码和项目&#xff0c;结构可视化工具&#xff0c;网络结构手动画图工具。 CNN解释器 这是一个中国博士发布的名叫CNN解释器的在线交互可视化工具。 主要…

下载的 MongoDB bin目录下没有mongo.exe文件问题解决

MongoDB 4.4版本之前&#xff0c;我们可以在MongoDB的安装目录的bin文件夹中找到mongo.exe这个命令行工具。但是从MongoDB 4.4版本开始&#xff0c;MongoDB官方已经不再提供独立的mongo.exe可执行文件&#xff0c;而是将其整合到了mongosh这个新的交互式Shell中。 我们可以访问…

云计算:OpenStack 分布式架构管理FLAT网络(单控制节点与多计算节点)

目录 一、实验 1.环境 2.控制节点创建网络 3.控制节点创建规格 4.控制节点新增安全组入口规则 5.控制节点创建实例 二、问题 1.FLAT网络底层如何实现 2.无法SSH 云主机实例 一、实验 1.环境 (1) 主机 表1 主机 主机架构IP备注controller控制节点192.168.204.210已部…

玩转贝启科技BQ3588C开源鸿蒙系统开发板 —— DevEco Studio下载与安装

一、下载DevEco Studio IDE开发工具 1. 登录鸿蒙官网 网址为&#xff1a; ​​​​​​​华为HarmonyOS智能终端操作系统官网 | 应用设备分布式开发者生态 页面如下&#xff1a; 2. 搜索“DevEco Studio IDE” 点击右上角的“请输入关键词”&#xff0c;在其中搜索“DevEc…

Python Web框架FastAPI——一个比Flask和Tornada更高性能的API框架

目录 一、FastAPI框架概述 二、FastAPI与Flask和Tornado的性能对比 1、路由性能 2、请求处理性能 3、内存占用 三、FastAPI的优点与特色 四、代码示例 五、注意事项 六、结论 在当今的软件开发领域&#xff0c;快速、高效地构建API成为了许多项目的关键需求。为了满足…

pytorch06:权重初始化

目录 一、梯度消失和梯度爆炸1.1相关概念1.2 代码实现1.3 实验结果1.4 方差计算1.5 标准差计算1.6 控制网络层输出标准差为11.7 带有激活函数的权重初始化 二、Xavier方法与Kaiming方法2.1 Xavier初始化2.2 Kaiming初始化2.3 常见的初始化方法 三、nn.init.calculate_gain 一、…

Golang Leetcode19 删除链表的倒数第N个节点 递归 双指针法+迭代

删除链表的倒数第N个节点 leetcode19 递归 由于本体是倒数第几个节点&#xff0c;非常适合递归 从终到始 的运行方式 func removeNthFromEnd(head *ListNode, n int) *ListNode {// 创建一个虚拟头节点&#xff0c;简化边界条件处理dummy : &ListNode{Next: head}//检查…

【Week-P4】CNN猴痘病识别

文章目录 一、环境配置二、准备数据三、搭建网络结构四、开始训练五、查看训练结果六、总结2.3 ⭐torch.utils.data.DataLoader()参数详解6.1 print()常用的三种输出格式6.2 修改网络结构&#xff0c;观察训练结果6.2.1 增加pool2、conv6、bn6&#xff0c;test_accuracy82.5%6.…

canvas绘制直角梯形(向右)

查看专栏目录 canvas示例教程100专栏&#xff0c;提供canvas的基础知识&#xff0c;高级动画&#xff0c;相关应用扩展等信息。canvas作为html的一部分&#xff0c;是图像图标地图可视化的一个重要的基础&#xff0c;学好了canvas&#xff0c;在其他的一些应用上将会起到非常重…

C++ 多态向下转型详解

文章目录 1 . 前言2 . 多态3 . 向下转型3.1 子类没有改进父类的方法下&#xff0c;去调用该方法3.2 子类有改进父类的方法下&#xff0c;去调用该方法3.3 子类没有改进父类虚函数的方法下&#xff0c;去调用改方法3.4 子类有改进父类虚函数的方法下&#xff0c;去调用改方法3.5…

Hive10_窗口函数

窗口函数&#xff08;开窗函数&#xff09; 1 相关函数说明 普通的聚合函数聚合的行集是组,开窗函数聚合的行集是窗口。因此,普通的聚合函数每组(Group by)只返回一个值&#xff0c;而开窗函数则可为窗口中的每行都返回一个值。简单理解&#xff0c;就是对查询的结果多出一列…