- 博客(15)
- 收藏
- 关注
原创 指令系统(2017统考真题)
在执行 f1(0) 的过程中,当 i = 0 时,cmp 指令执行后进位置/借位置标志 CF 的内容是什么?相关的机器级代码,提出下面四个问题,从汇编指令、机器代码占用、运算和浮点实现等角度考察对底层机制的理解。2 的运算,请问在 f2 中能否用 shl 指令实现 power。等)和复杂寻址模式,这些都是 CISC 的典型特征。,应再加 1 字节(而每个地址对应 1 个字节)。该函数计算的是一个几何级数的和,其数学表达式为。导致产生借位,故 cmp 指令执行后,中,如果被减数小于减数,则产生借位。
2025-03-21 17:47:15
673
原创 LL(1) 文法的定义、规则及举例分析
一个文法是 LL(1) 的,意味着在生成预测分析表时,对于任一非终结符AAA,利用后续的111个输入符号可以唯一确定接下来应使用的产生式。对于非终结符AAA的两条产生式A→α和A→βA \to \alpha \quad \text{和} \quad A \to \beta,A→α和A→β要求它们的FIRSTFIRSTFIRSTFIRSTα∩FIRSTβ∅FIRSTα∩FIRSTβ∅。
2025-03-20 14:13:57
1162
原创 初始EBP和ESP的设置
正偏移”指的是相对于固定的基址指针(EBP)向高地址方向计算的偏移。由于栈帧内局部变量采用负偏移(例如[EBP-4]),而返回地址和参数则在 EBP 之上,所以参数访问时使用正偏移。为什么 [EBP+4] 和 [EBP+8]?[EBP+4]存放着返回地址。[EBP+8]是第一个函数参数;如果有多个参数,则依次使用[EBP+12][EBP+16]等来访问后续参数。多个参数参数依次按从右到左被压入栈中(在 cdecl 中),因此在调用函数后,第一参数总是位于[EBP+8],第二参数位于。
2025-03-18 17:41:41
572
原创 三种机器级表示
下面给出三种 C 语言结构的示例程序,并展示其对应的机器级(汇编级)表示(基于 32 位 x86 架构,采用 Intel 语法)。每个示例后,我们逐条解释汇编语句的作用。
2025-03-18 17:40:59
367
原创 常见汇编指令
流程控制跳转指令(jmp、各条件跳转如je)实现无条件或条件改变程序执行流程。比较/检测cmp与test用于数据比较和位检测,通过设置标志给出后续分支信息。过程调用call与ret构成完整的函数调用机制,自动管理返回地址。位操作移位指令(shlshr)实现快速乘除、取负(neg)、按位取反(not)和按位运算(andorxor),在数据处理和逻辑判断上广泛应用。算术运算乘、除(imulidiv)、增、减(incdec)及常规加减(addsub)构成了最基本的算数逻辑处理单元。
2025-03-18 17:40:08
913
原创 ESP、EBP
始终指向当前栈顶随每次push/pop操作自动变化用于动态管理运行时数据存储,如返回地址、局部数据等用于建立和管理函数的栈帧为函数内部固定引用提供基准地址便于通过相对地址访问参数和局部变量,并支持栈链调试通过理解ESP和EBP的作用,可以更深入地掌握如何利用栈帧进行数据管理以及函数调用的内在机制,从而更好地进行底层编程、调试或性能优化。
2025-03-18 17:38:44
319
原创 标志位CF、ZF、OF、SF
CF (进位标志位)指示无符号运算中最高位是否产生了进位(或在减法中是否产生借位)。用途:用于检测无符号数加法、减法中的溢出或借位情况,也常用于多精度运算。ZF (零标志位)指示某次运算后结果是否等于零。用途:常用于判断一个运算结果是否为0,从而决定程序流程(例如条件跳转)。OF (溢出标志位)用于有符号运算中检测是否发生溢出,即运算结果超出了数值所能表示的范围。用途:在有符号数运算中,当两个正数相加得到一个负数,或者两个负数相加得到一个正数时,OF 被置位,从而提示程序溢出错误。
2025-03-18 17:37:46
981
原创 Cache, TLB, Page
CPU 产生虚拟地址↓拆分:页号 + 页内偏移↓查询 TLB(TLB 命中)→直接形成物理地址(TLB 未命中)↓查询页表↓判断页表有效位有效:正常数据访问无效:触发缺页异常↓缺页异常处理:分配页框、调入页面、更新页表/TLB↓恢复执行,重试缺页指令\text{CPU 产生虚拟地址} \\\text{拆分:页号 + 页内偏移} \\\text{查询 TLB} & \\
2025-03-17 16:15:21
1090
原创 差分优化时间
有了差分数组后,我们可以将原数组的区间更新转化为对差分数组的局部修改。也就是说,通过依次累加差分数组的值,就能还原出每个位置更新后的结果。时间内完成,远比对整个区间逐个更新高效。这样确保更新对前缀和计算时能在。假设现在有一个操作:将原数组。上的每个元素都加上一个常数。对于每个更新操作,将区间。将原数组转化为差分数组。,我们定义其差分数组。这样的更新操作可以在。
2025-03-14 21:27:13
1052
原创 Cache 与内存知识点总结
访问单位CPU 的最小访问单位通常是字或字节;Cache 操作以缓存行为单位;内存以字节寻址,但数据交换往往按缓存行传输。映射方式选择直接映射:实现简单、速度快,但冲突失效严重,且无替换算法位;全相联映射:灵活、命中率高,硬件比较复杂,需要较多比较器;组相联映射:折中方案,兼顾硬件成本与性能,是现代 CPU Cache 常用的映射方式。标记项有效位(Valid Bit)和Tag必须始终存在;Dirty 位。
2025-03-13 21:49:36
835
原创 经典落梯问题
当你面对这样的问题时,每个位置都可以看作一个二元决策,但“放桥”时必须保证其后一个位置一定不放桥,这样的选择过程自然满足fnfn−1fn−2fnfn−1fn−2的递推关系,也就是斐波那契数列的递推。正因如此,我们常说“满足不能在相邻位置都放桥的合法方案数可按斐波那契数列来计算”。通过这种方式,我们就能快速统计出一行中所有合法桥梁配置的方案数,而这一结果又可以用于整个落梯问题的动态规划转移中。
2025-03-12 18:22:36
1616
原创 字位扩展例题
内存整体:由 4 个 Bank 构成,合计 8K×8 位,由 8 个 2K×4 位芯片实现地址 0B1F:落在 Bank 1,其地址范围为数据存储:在 Bank 1,单个数据字的 8 位分别由两个 2K×4 位芯片提供(低4位和高4位),不存在单一芯片存储完整 8 位数据。
2025-03-11 19:42:19
534
原创 不同存储器组织和交叉编址技术的工作方式及举例说明
单体多字存储器在单一芯片内部存储多个字,结构简单、适用于容量要求较低的高速存储;多体并行存储器利用多个存储芯片并行构成宽数据总线,提高传输带宽;多模块存储器将整个存储空间分割成多个独立模块,既可以是单体多字,也可以是多体并行,便于构成大容量系统;高位交叉编址(顺序方式):利用地址的高位选择模块,使连续地址集中在一起,译码简单但并行度低;低位交叉编址(交叉方式):利用地址的低位轮换分布到各模块中,实现高并行度,适合顺序访问和高带宽要求。
2025-03-11 15:01:15
1010
原创 主存储器、SRAM 与 DRAM 的工作原理及相关技术
SRAM:采用晶体管构成的稳定锁存器,无需刷新,速度快但成本高且密度低,常用于缓存。DRAM:利用电容存储数据,但因漏电需要定期刷新;通过地址复用(RAS/CAS)减少引脚数量;为了提高性能,应尽可能使连续访问落在同一行(利用行缓冲命中)。DRAM 芯片行缓冲容量通过总容量与行数的关系,可计算出每行(即行缓冲器)的数据量。以 x8 组织为例,每行容量(bytes)为CtotalR×8R×8CtotalSDRAM 的优势。
2025-03-11 10:18:26
436
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人