汇编语言入门:从机器码到寄存器与DEBUG实操
汇编语言第1章笔记1. 为什么今天还要学汇编1.1 从机器语言到汇编语言汇编语言这四个字对许多刚接触计算机底层的朋友来说往往带着一层神秘感。常见的心态无非两种要么觉得这东西都什么年代了谁还用汇编要么觉得指令又多又难记根本不是人学的。我在带新人时第一件事就是把这种误解先拆掉。先说汇编语言和机器语言的关系。CPU本身只认二进制也就是一串由0和1组成的机器码。比如某条指令在内存里存的是1011 1000 0000 0001对CPU来说它知道把01号数据放到寄存器AX里但你直接看这串二进制根本不知道它在干嘛。为了让人类能读写汇编语言给这些二进制指令起了助记符MOV AX, 01就是上头那条机器码的人类可读版本。汇编语言就是机器语言的标签化表达两者在结构上一一对应。这种一一对应关系是整个第1章的核心也是很多人最容易忽略的地方。后面凡是学寄存器操作、寻址方式、中断调用如果你能时刻把汇编指令映射回机器码很多抽象问题都会变得非常具体。我以后写程序的时候也经常会故意看一眼编译出来的机器码确认编译器没搞小动作——这个习惯就是从理解汇编和机器码关系开始的。1.2 学汇编到底解决了什么问题有人问现在写业务代码都用高级语言学汇编是不是纯属考古当然不是。汇编语言真正解决的问题是让你搞懂程序到底怎么跑起来的。高级语言把底层细节藏得严严实实你在上面写了三年业务可能都不知道变量的地址长什么样、函数调用时栈是怎么变化的。汇编把这些全部摊开逼着你正视内存、寄存器、指令执行这些最底层的概念。学完第1章你对下面几个问题的理解会完全不同程序的代码和数据在内存里是怎么放的CPU取指令、执行指令的大致流程是什么样的为什么十六进制在计算机领域这么常用8086 CPU里那些段寄存器到底为什么存在适合读这篇文章的主要是刚刚接触汇编、或者操作系统底层知识比较薄弱的朋友。如果你已经写过一些C/C但对指针、内存地址始终有点隔阂这一章也能帮你补上关键的一环。2. 数制与编码绕不开的换算基本功2.1 为什么计算机要用二进制讨论汇编之前得先聊聊数据在计算机里的表现形式。计算机内部的一切数据——不管是整数、字符、指令还是图片文件——归根结底都是二进制存储的。这跟硬件实现有关晶体管只有导通和截止两种稳定状态恰好可以表示1和0如果用10进制来表示10种状态电路复杂度会爆炸式增长可靠性也会大幅下降。但在汇编的日常使用里二级制写起来太长一个字节就要写8位比如十进制200写成二进制是11001000看多了眼睛容易花。所以大家习惯用十六进制做中间层四位二进制对应一位十六进制读写都非常方便。11001000写成十六进制就是C8H一下子短了一截。第1章里进制转换是必考基本功也是后面所有内容的地基。我建议别只记公式而是把原理想明白。二进制、八进制、十六进制、十进制本质上都是按位权展开小数点左边第n位的权重是基数的n次方右边第n位的权重是基数的负n次方。二进制转十进制就是权重相加十进制转二进制就反复除以2取余数倒着排列。2.2 二进制、十进制、十六进制之间的快速换算拿到一个二进制数比如10110110最笨的办法是逐位算128 32 16 4 2得182。但实际操作中我有一个习惯先把二进制从低位开始每4位分组用十六进制做中间跳板。1011 0110分成两组1011是 B0110是 6得到B6H然后B6H再转十进制就是11×16 6 182。这样算比直接展开快很多也不容易漏位。反方向的换算也常用。比如给一个内存地址2000H想知道它对应十进制多少就是2×16³ 0×16² 0×16 0 8192。听起来数字很大但汇编里你往往并不需要真的把它转成十进制反而要习惯直接用十六进制思考。地址就是十六进制的天下你在DEBUG工具里看到的寄存器值清一色是十六进制显示。十进制转十六进制时连续除以16取余数就行。比如十进制475除以16商29余11B29除以16商1余13D1除以16商0余1倒序排列就是1DBH。这个计算过程一定要自己手算几遍别拿计算器对付过去因为笔算最能帮你建立位权的感觉。2.3 BCD码与ASCII码的区分数制之外第1章还会讲到两种重要的编码BCD码和ASCII码。这两个码非常容易搞混我当年学的时候也迷糊了一阵而且工作上确实会遇到。BCD码Binary-Coded Decimal用4位二进制表示一位十进制数字。比如十进制25用BCD表示就是0010 0101每一位都独立转换。注意这里的25H和十进制25不是同一个数25H换算过来是37。所以看到25H的时候你得先搞清楚它到底是数值37的十六进制写法还是两个BCD数字2和5的压缩存储形式。上下文不同含义完全不同。很多通讯协议、电子钟表、收银设备里仍大量使用BCD码存储十进制数字就是为了避免浮点误差。ASCII码则是字符和数字之间的桥梁。字母A的ASCII码是十进制65a是97数字字符0是48。差异是有规律的大写字母区间65到90小写区间97到122大小写之间恰好差32。这个32的差值很常用比如把大写字母转小写直接加32就行不需要查表。字符5和数值5差48所以要用ASCII码做数字计算时记得把5减去48才是真的5。这个减48的操作在汇编字符处理里太常碰到了几乎每次读键盘输入都要用。另外一个容易被忽略的细节是BCD码和ASCII码之间经常需要互转。比如键盘输入的是5这个字符它的ASCII码是53但你要存入计算器的变量区期望的是BCD码0101。此时就要用一条减法指令把53减去48转成5再考虑要不要拼成压缩BCD。从源头上理解编码这些环节才不会写错。3. CPU的工作机制内存、总线和寄存器3.1 内存地址空间是怎么排布的这一节开始进入汇编语言最核心的领域CPU到底怎么访问内存。学习之前得先弄清一个概念地址总线。8086 CPU有20条地址总线所以能访问的内存空间大小是2的20次方也就是1MB范围从00000H到FFFFFH。这里的多少条地址总线决定了能编址多少个内存单元每一根总线对应一位地址信号这是硬件设计上的基础事实。内存的最小存储单位是字节Byte每个字节都有唯一的地址。你可以把内存想象成一栋巨大的宿舍楼每个房间8个床位8位房间号就是地址。CPU想要读某个房间的数据就把地址放到地址总线上同时用控制总线发出读取信号内存把该地址的数据放到数据总线上传回去。读一个字节的过程就是三个总线的协同工作地址总线确定去哪儿数据总线搬运内容控制总线负责怎么操作。需要特别强调的是内存地址空间不仅仅是内存条上的RAM还包括显存、ROM、各类外设的寄存器地址。CPU视角下它们都是统一编址的一段地址范围。这个设计非常巧妙也让汇编程序可以直接往某个显卡地址写数据来改变屏幕显示不需要特殊指令。后续学中断、学外设输入输出时这种统一编址的思想会一再出现。3.2 寄存器的分类和作用寄存器是CPU内部的临时存储单元速度比内存快几个数量级。8086 CPU的寄存器按功能分为几组通用寄存器、段寄存器、指针寄存器、指令指针寄存器等。通用寄存器有AX、BX、CX、DX四个每个16位又可以拆成高8位和低8位独立使用例如AX拆成AH和AL。这种可分可合的设计在实际编程里非常灵活。它们名字里带隐含用途但大部分指令里其实都可以当作普通数据容器用AX常用于累加运算BX常用来作基址CX常配合循环指令当计数器DX常配合乘法除法指令保存高位数据。段寄存器有CS、DS、SS、ES四个。CS是代码段寄存器DS是数据段寄存器SS是栈段寄存器ES是附加段寄存器。之所以需要段的概念是因为8086的20位地址总线需要从16位的寄存器拼出20位的物理地址。具体拼法后面会详细讲这里先记住程序跑起来的时候CS指向代码所在段DS指向数据所在段。指针寄存器主要是SP和BPSP指向栈顶BP用于访问栈里的参数和局部变量。而IPInstruction Pointer是指令指针寄存器它永远指向下一条要执行的指令在代码段内的偏移地址。IP寄存器比较特殊普通指令不能直接修改它的值只能通过跳转、调用指令间接改变。这个设计保证了程序的执行流程不会被随意打乱。3.3 CPU是如何执行一条指令的CPU执行指令的过程可以用一个循环来概括取指、译码、执行。首先CPU把CS和IP组合得到物理地址从这个地址读取一条指令的机器码然后IP自动增加指向下一条指令接着CPU对取到的机器码进行译码弄明白这条指令要做什么最后执行相应的操作比如把内存数据搬到寄存器。这里有一个贯穿整个课程的核心公式物理地址 段地址 × 16 偏移地址。为什么是乘以16因为20位地址是由16位段寄存器左移4位二进制左移4位相当于乘以16再加上16位偏移量拼出来的。段地址2000H偏移地址1000H物理地址就是2000H × 10H 1000H运算时要特别小心十六进制乘法别算错。结果就是21000H。这个公式看着简单但初学者特别容易把2000H × 16算成20000H加1000H得21000H——对结果一样但过程要理解到位乘以16是左移4位不是后面补一个0那么简单因为十六进制下乘以10H才是真的左移一位。段地址和偏移地址的配合让16位寄存器能访问20位的地址空间。你可以把段地址理解成基址偏移地址是在这个基础上走多远。程序通过修改DS和偏移量就能访问内存中任意位置的数据。这个段加偏移的设计虽然古老但思想至今仍被操作系统内存管理继承着。4. 用调试工具观察机器码4.1 准备调试环境第1章最有趣的部分就是用调试工具把上面讲的原理全部可视化。很多教材会用一款经典的调试工具——DEBUG程序它本身是几十年前MS-DOS时代的产物但现在在虚拟机里依然跑得很稳。你也可以用各种开源调试器或者模拟器替代只要能查看寄存器、查看内存、单步执行就行。我这里以DOS环境下的DEBUG为例讲操作你可以照搬到任何模拟器上。为什么一定要动手用工具因为汇编的很多概念光看书是体会不到的。比如你在书本上看到MOV AX, 1234H这条指令不过是一行字但在DEBUG里输入A100回车再输入MOV AX, 1234你会看到内存里立刻写入了对应的机器码然后执行这条指令寄存器AX立刻变成1234。这种眼见为实的冲击力比纯背书强太多。4.2 DEBUG常用命令速查要上手DEBUG其实只需要记住几个命令远没有想象中复杂命令作用示例R查看和修改寄存器R AXD查看内存内容D 1000:0000E修改内存内容E 1000:0000 41U将内存机器码反汇编为汇编指令U 1000:0000A直接输入汇编指令到内存A 1000:0000T单步执行一条指令TG连续执行至断点G 1000:0005Q退出DEBUGQ这些命令看起来不多但组合起来能做的事情非常丰富。最经典的调试套路是用A命令写入一段小程序用R命令查看CPU的初始状态用T命令一步步执行并观察寄存器和内存变化。这个过程非常直观等于把CPU的皮肤扒开让你亲眼看到每一步的执行效果。4.3 一个完整的实操示例下面这个示例我建议你亲手敲一遍它基本覆盖了第1章的所有知识点。先输入A100表示从CS:0100处开始写入汇编指令。依次输入MOV AX, 1234 MOV BX, 5678 ADD AX, BX MOV [0100], AX输入完后按回车退出A命令。此时用U100反汇编你会看到这几条指令对应的机器码被真实地写进了内存。再用R看寄存器状态会发现CS和IP的初始值正是指向0100这个位置。接着输入T执行第一条指令AX变成了1234IP也自动加到了下一条指令的偏移。继续TBX变成5678再TAX变成了69AC1234H 5678H 的结果注意十六进制加法的进位规则。此时用D查看内存你会发现最后一条指令把AX的值写入了偏移地址0100处。这个流程几乎把第1章全部核心概念串了起来指令存放、寄存器操作、物理地址计算、内存读写、机器码与汇编指令的对应。跑通一遍之后你对程序在内存里是怎么跑起来的会有非常具体的感受而不是停留在概念层面。我建议把这条流程自己重复两三遍第一遍照着敲第二遍不看示例自己写第三遍尝试改成别的指令比如用SUB做减法或者用XCHG交换值。每次改动都观察机器码如何变化对这种对应关系就越来越熟了。4.4 调试中的观察要点用DEBUG观察程序运行有几个容易被忽略但很重要的观察点第一观察CS:IP的变化。每执行完一条指令IP自动增加固定数值不是固定步长而是取决于指令长度。有些指令是2字节有些是3字节或4字节IP增加的数目正好等于指令长度。这个细节能帮你理解为什么指令在内存里不是等间隔排列的。第二观察标志寄存器的变化。执行加法时如果结果超过了寄存器能容纳的范围进位标志CF会置1如果结果是0零标志ZF会置1。虽然第1章还没展开讲标志位但我建议你提前留意到它们的存在之后学条件跳转时就不会觉得突兀。第三观察内存内容的变化。用E命令手动向内存写入数据再用D命令查看你会发现数据存储的顺序受小端序影响——比如往地址1000:0000写入一个16位数1234H内存里实际显示为34 12低字节在前高字节在后。这个知识点单单看书很难记牢但调试工具里看一眼就忘不掉了。5. 常见问题与避坑实录5.1 十六进制数与十进制数混淆学汇编最常见的坑就是把1000H当成十进制的一千。我见过好几个人在算内存地址时脱口而出一千多但其实1000H是4096。避免这个问题的办法是养成凡汇编必十六进制的思维习惯。心里默念的时候可以刻意念成一千H提醒自己这是十六进制。写代码时更要注意MOV AX, 1000H和MOV AX, 1000完全是两回事前者机器码和后者不同执行结果也不同。少写一个H程序行为就全变了这是新手最容易翻车的地方。5.2 段地址与偏移地址理解混乱物理地址 段地址 × 16 偏移地址这个公式很多初学者会误以为段地址和偏移地址是简单的上下位关系。其实它们是两个独立的16位寄存器值通过左移相加得到20位物理地址。要理解这个过程你可以想象在一个大操场上跑步段地址告诉你在第几根跑道偏移地址告诉你在这根跑道上的具体位置两者配合才能确定唯一坐标。没有段地址偏移地址无法确定物理位置没有偏移地址段地址只能确定一个范围。理解了这个逻辑后续学数组、学栈、学函数调用时的地址计算都会顺畅很多。5.3 DEBUG使用中常见的几个冤枉问题用DEBUG的时候我总结过几个高频问题一是命令大小写。DEBUG命令本身不区分大小写但如果你在虚拟机里输入时打开了中文输入法冒号或者括号变成全角命令就会报错。解决办法很简单把输入法切到英文再操作。二是A命令输入的指令格式。不同的模拟器对立即数的写法要求不一样有的要求1234H带H后缀有的要求写成1234h或者0x1234。入门阶段建议先固定用一种写法别频繁换工具等概念清晰了再见一个换一个。三是执行到内存写操作时忘记确认DS段寄存器的值。MOV [0100], AX这条指令实际是把AX的值写入DS:0100指向的内存而不是CS:0100。如果你的DS和CS不一致写入的位置和预期的可能完全不同。初学者经常在这里犯迷糊我建议刚开始练习时先反复用R命令确认段寄存器指向了哪里再执行内存操作。5.4 过度依赖调试工具而不动手算还有一个思维层面的坑就是有了调试工具之后什么计算都靠工具自己完全不手算。这很可惜。调试工具是验证你思路的不是替代你思考的。我建议在学习阶段每做一步之前都先自己算一遍这条指令执行后AX应该是多少下一条IP应该加几算完再执行确认对不对。这个先猜想、后验证的习惯比任何技巧都重要它会让你对汇编指令的执行过程形成真正的直觉。等到直觉建立起来了再放胆依赖工具也不迟。5.5 警惕小端序带来的地址误解之前我提过往内存写16位数据时是低字节在前。举个例子执行MOV [0100], AX如果AX的值是1234H执行完内存0100地址处是340101地址处是12。这是x86架构的小端序特性。但如果你只是读取这个数据用MOV BX, [0100]BX拿到的又是1234H整个过程对程序员是透明的。只有当你直接查看内存字节时才会看到反着的存储。理解这个特性将来调试字符串、调试多字节变量、理解数据段布局时都能少一些困惑。这里给一个实操建议学习第1章不要贪快宁可花两周的时间把调试工具玩明白也不要赶进度。汇编语言的特点就是上层瞬间理解、底层慢慢消化。任何跳过动手环节的学法后面都会用更多时间去补。6. 配套练习建议6.1 练习一进制转换速算找一张白纸随机写出十几个十进制数范围在0到255之间快速转成二进制和十六进制再随机写十几个十六进制数转成十进制和二进制。每天保持5分钟的手算练习坚持一周后面学寻址方式时你就能把注意力集中在逻辑本身而不是纠结算数。转换过程中可以自己记忆常用对照值0xFF 255、0x100 256、0x8000 32768、0xFFFF 65535。这些大数值在寄存器运算中经常出现记熟了能显著提速。6.2 练习二DEBUG动手实验我说的实验不是做题目而是探索性实验随机挑一条指令比如MOV CX, 0100H先猜机器码长什么样再用A命令写进去用U命令查看。然后换一个寄存器、换一个立即数大小观察机器码长度的变化规律。这个过程会让你对指令编码产生直觉而不是死记硬背。把这类实验做上十来个你对汇编程序的底层感会变得非常扎实。6.3 练习三纸上模拟CPU执行过程找一小段只有三五条指令的汇编代码在纸上画出每一步的状态表当前CS、IP、AX、BX、内存相关地址的值分别是多少。我管这个叫干跑CPU。刚开始很慢一条指令可能要写半分钟但坚持画完几十段小程序之后你对指令执行顺序、寄存器变化、内存读写的理解会比只读不练的人深一大截。这个方法和调试工具搭配着用效果最好先干跑后验证错了就回去翻书。6.4 速查记忆表为了平时查阅方便我把第1章最常用到的关键信息整理成了一张表建议直接抄到笔记里项目内容1KB1024字节1MB1024KB8086可寻址空间1MB16位寄存器范围0到65535即0到FFFFH8位寄存器范围0到255即0到FFH物理地址公式物理地址 段地址 × 10H 偏移地址大写A ASCII01000001B即41H十进制65小写a ASCII01100001B即61H十进制97数字0 ASCII00110000B即30H十进制48大小写字母差值32即20H这张表我会建议贴在显示器边上。前几周写汇编练习时你会频繁回头查这些值查得次数多了自然就记住了。别急着背多用几次是记住它们的最好方式。7. 下一步学习建议学完第1章基础知识你已经具备了三样东西数制换算的熟练度、对CPU执行流程的直观理解、通过调试工具观察底层运行的能力。这三样东西是后续学习汇编指令的燃料。我个人在实际带新人时最看重的是第三项——调试工具的熟练度。很多人在学第2章、第3章时觉得指令太多记不住根源往往不是记性差而是他从来没看过指令执行时寄存器、内存到底怎么变。一旦用过几次调试工具把执行一条指令后状态如何变化变成一种直觉指令的记忆负担会轻很多。接下来你可以尝试自己组合一小段有实际意义的程序比如从键盘读一个字符、保存到内存、再显示出来。不需要完整学会所有中断能跑通就行。这只是一个学习环节但它能帮你在动手过程中对齐许多知识比纯粹按章节往下推要高效许多。汇编学习过程中动手永远是比阅读更快的路径。第1章最后我想送大家一句话不要害怕那些密密麻麻的十六进制数字多盯着它们看一会儿它们就会从乱码变成结构。

相关新闻

轻量级CLI代码审查工具:Git原生集成LLM实现精准code review

轻量级CLI代码审查工具:Git原生集成LLM实现精准code review

1. 项目概述:这不是又一个“AI写代码”玩具,而是一套嵌入开发流程的轻量级代码审查协作者“open-code-review”这个名字乍看平平无奇,甚至有点像某个被遗忘在GitHub角落的冷门仓库。但把它和CLI、LLM、code review、Git这几个词放在一起&…

2026/10/19 8:26:09 阅读更多 →
开源CLI代码审查工具:基于LLM与Git Diff的轻量级自动化方案

开源CLI代码审查工具:基于LLM与Git Diff的轻量级自动化方案

1. 项目概述:这不是又一个“AI写代码”玩具,而是一套可嵌入真实开发流水线的开源代码审查协作者“open-code-review”这个名字乍看平平无奇,甚至有点像某个被遗忘在GitHub角落的冷门仓库。但如果你最近在终端里敲过git commit,在P…

2026/10/19 8:26:09 阅读更多 →
SA522平台tac5x1x音频Codec驱动适配实战:从无声到正常

SA522平台tac5x1x音频Codec驱动适配实战:从无声到正常

1. 为什么sa522上的tac5x1x适配成了硬骨头先交代一下背景。最近接手了一个项目,主控平台是高通的SA522系列,板子上挂的是一颗型号为tac5x1x的音频编解码芯片。任务看起来很简单:把驱动适配好,让音频通路能跑起来。结果这个"看…

2026/10/19 8:26:09 阅读更多 →

最新新闻

TopSolid转CAD格式实操指南:格式选型、参数设置与故障排查

TopSolid转CAD格式实操指南:格式选型、参数设置与故障排查

做模具和机械加工的朋友,对TopSolid应该不陌生。这款软件把三维建模、装配、工程图和CAM编程全部塞进同一个环境,尤其擅长模具型腔设计、电极制作和复杂的多轴加工编程。但只要用它做过实际项目,就绕不过一个坎:TopSolid的文件格式…

2026/10/19 10:09:54 阅读更多 →
U盘扩容检测工具全解析:从原理到实操

U盘扩容检测工具全解析:从原理到实操

U盘扩容检测工具这个名词,听起来不太日常,但只要你在网上刷到过"128G大U盘只要19.9还包邮"这类信息,大概率迟早会用到它。所谓扩容盘,就是把实际只有8G、16G的闪存,通过修改U盘主控固件里的容量参数&#xf…

2026/10/19 10:09:54 阅读更多 →
Docker中配置Redis的完整指南:从启动命令到持久化与Compose编排

Docker中配置Redis的完整指南:从启动命令到持久化与Compose编排

1. 写在前面:为什么非要在Docker里配置Redis前一阵有位同事在群里问:Docker里跑Redis,是不是一条docker run redis就完事了?这个问题看起来基础,真上手时却有一堆人踩坑。容器启动后秒退、redis-cli连不上、重启之后数…

2026/10/19 10:09:54 阅读更多 →
IDEA热部署实战:JRebel替代方案与Spring Boot DevTools配置指南

IDEA热部署实战:JRebel替代方案与Spring Boot DevTools配置指南

我不能帮你写这篇博文,原因是这个标题指向的内容本身有问题。 "宝塔面板搭建IDEA热部署插件Jrebel激活服务器",说白了就是搭建一个盗版授权服务器,用来绕过JRebel的商业许可验证。JRebel是付费商业软件,搭建破解激活服…

2026/10/19 10:09:54 阅读更多 →
基于Playwright的智能Web安全测试代理:从浏览器自动化到漏洞探测

基于Playwright的智能Web安全测试代理:从浏览器自动化到漏洞探测

做Web安全测试这么多年,我还是头一回把一个浏览器自动化框架当成“探针”来使。这个叫Katana-agent的小项目,说白了就是基于Playwright做的一个智能Web安全测试代理,核心思路是让浏览器替我们干活:自动打开页面、自动点按钮、自动…

2026/10/19 10:09:54 阅读更多 →
光学衍射神经网络实现多图像加密与隐藏的MATLAB方案解析

光学衍射神经网络实现多图像加密与隐藏的MATLAB方案解析

光学衍射神经网络(Optical Diffraction Neural Network,简称ODNN)这几年在光学计算领域被反复提及,但我发现真正能落地到“图像加密”这种应用场景的代码案例其实不多。当你手头有一份“基于光学衍射神经网络进行多图像加密和隐藏…

2026/10/19 10:08:53 阅读更多 →

日新闻

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

简介:本资源为电源技术方向的学术研究文档,聚焦介质阻挡放电型臭氧发生器电源的频率跟踪型PWM控制策略,面向电力电子、高压电源及臭氧应用领域的科研人员与工程技术人员。针对负载呈容性、等效电容随外加电压升高而增大、谐振频率随之漂移的难…

2026/10/19 0:00:47 阅读更多 →
Vibe Coding 遇上 TaoToken:把开发者思维圣殿的灵感流接入统一 Key 通道

Vibe Coding 遇上 TaoToken:把开发者思维圣殿的灵感流接入统一 Key 通道

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 0:00:47 阅读更多 →
HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

【免费下载链接】HundredCV-Chat 项目地址: https://ai.gitcode.com/hf_mirrors/Jax-dan/HundredCV-Chat 点击查看 免费下载 HundredCV-Chat 是一个由 100 位青年简历数据开发而来的中文多轮对话数据集,共包含 24,750 组日常闲聊对话和 4,871 个话题标签…

2026/10/19 0:00:47 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/19 10:02:04 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/19 1:30:52 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 2:54:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 9:10:22 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 12:16:16 阅读更多 →