07 2022 档案
摘要:CPU 如何指导当前要执行的指令所在的位置? 答:寄存器 CS 和 IP 中存放着当前指令的段地址和偏移地址 8086 CPU 中,有两个寄存器: 段寄存器 SS 存放栈顶的段地址 寄存器 SP 存放栈顶的偏移地址 任意时刻,SS:SP 指向栈顶元素 push ax 内部实现: (1)SP = SP
阅读全文
摘要:CS、DS 是段寄存器,一个程序往往分为好几个段,CS 中保存了代码段的基地址,DS 保存的是数据段的基地址,而 IP 中保存的是所要执行的下一条指令的地址。 8086 CPU 不支持将数据直接送入段寄存器的操作,ds 是一个段寄存器(硬件设计的问题) 比如,mov ds,1000H 是非法的 数据
阅读全文
摘要:第一层:什么场景下需要异步 大量写操作占用了过多的资源,影响了系统的正常运行; 写操作异步后,不影响主流程,允许适当延迟; 第二层:异步的外功心法 本文提到了四种异步方式: 线程池模式 本地内存 + 定时任务 MQ 模式 Agent 服务 + MQ 模式 它们的共同特点是:将写操作命令存储在一个池子
阅读全文
摘要:2.6 8086 CPU 给出物理地址的方法 CPU 中的相关部件提供两个 16 位的地址,一个称为段地址,另一个称为偏移地址 段地址和偏移地址通过内部总线送入一个称为地址加法器的部件 地址加法器将两个 16 位地址合并成一个 20 位的地址 地址加法器合成物理地址的方法:物理地址 = 段地址 *
阅读全文
摘要:第一章 基础知识 1.1 机器语言 机器语言是机器指令的集合 机器指令展开来讲就是一台机器可以正确执行的命令 指令:0101000(PUSH AX) 1.2 汇编语言的产生 汇编语言的主体是汇编指令 汇编指令和机器指令的差别在于指令的表示方法上。汇编指令是机器指令便于记忆的书写格式。 汇编指令是机器
阅读全文
摘要:项目线上出现了闪退问题,查看日志发现是 sentry 模块出问题了 因为用户电脑上没有 pdb 文件,所以无法加载具体函数的调用位置,只能手动去计算 具体步骤是:在 windbg.exe 中加载 sentry.dll 和 sentry.pdb 文件后 使用 lm 命令行拿到 sentry 模块的基地
阅读全文
摘要:更新项目版本号时,需要与 rc 文件的 version 同步,比较方便的方法是直接从 rc 文件中获取版本号,并应用到程序中 // 删除日志检查 bool GetVersion() { // get the filename of the executable containing the vers
阅读全文
摘要:{} 可以用于初始化 C++11 中的变量,就像它们用于初始化 C 中的数组和结构一样。 {} 主要是为了提供语法的一致性(使用 {} 初始化将在所有上下文中都有效,而使用赋值运算符或()初始化将在特定上下文中有效) {} 初始化还有一个优点,它可以防止缩小范围,即当需要 double 型时,它可以
阅读全文