简介本资源是《微型计算机原理与接口技术》尹建华编著配套习题的完整参考答案面向高校计算机、电子、自动化等专业本科生及考研复习者精准解决课后习题无解析、核心概念难落地、数制转换与寻址方式易混淆等学习痛点。文件为单个PDF文档23KB内容覆盖全书六章重点第一章含二进制/十六进制/BCD码转换、原反补码计算、溢出判断第二章聚焦8086存储器组织与总线周期第三章详解寄存器寻址、相对基址变址等八类寻址方式辨析第四至六章涵盖汇编指令应用、排序程序设计、存储器扩展译码及I/O接口编程等实践要点。预览可见大量带步骤的演算过程与典型错误标注便于对照自查、强化理解。目前已有673人下载学习是夯实微机原理基础、高效备考与课程设计的重要辅助材料。1. 这不是“答案抄写本”而是8086汇编工程师的底层校验工具一份能跑通、能反推、能debug的习题答案PDF你手头这份《微型计算机原理与接口技术》尹建华习题答案.pdf表面看是课后题的标准答案但实际用起来会发现——它根本不是用来“对答案”的而是你调试8086汇编代码时最硬核的行为验证锚点。我带过三届嵌入式方向本科生做课程设计每次学生在写中断初始化、写8259A ICW配置、写8255A控制字时卡住最后救场的从来不是教材正文而是把这份PDF里第7章第12题的MOV AL,13H / OUT 80H,AL这段初始化序列一行行贴进DEBUG里单步对照着看AL值、看端口写入时序、看标志位变化。它之所以有效是因为所有答案都严格遵循8086实模式下的物理地址计算规则比如CS:IP A000H:0000H → 0A0000H、严格匹配8259A芯片手册中ICW1必须置D41才允许级联的硬件约束、甚至保留了像SAL AX, CL这种易被现代编译器优化掉但8086必须显式写的移位指令。它不解释“为什么”但它每一行都在告诉你“硬件真正认什么”。适合两类人一是正在啃8086汇编、反复被段地址偏移地址绕晕的新手二是要快速验证自己写的端口驱动是否符合老式ISA总线时序的老兵。别把它当习题集把它当一块带刻度的示波器探头——你写的代码波形歪不歪拿它一比就清楚。2. 从二进制转换到寄存器状态答案里的数字不是静态结果而是可执行的硬件状态快照这份PDF里第一章的进制转换题绝非简单的数学练习。它本质是一套8086数据通路的校验模板。当你看到156D 10011100B 9CH这串等号背后藏着三个关键硬件事实① 156作为无符号数存入AL寄存器时其二进制形态必须是8位补零即10011100否则高位截断会导致后续ADD溢出② 若该值参与地址计算如MOV AX, [BX9CH]则必须用十六进制形式理解其作为偏移量的紧凑性③0.675D 0.1011B这种小数转换直接对应ADC采样后定点数处理的舍入误差边界——你在写DA转换驱动时若把0.675当成0.1010B去算输出就会偏移半个LSB。下面拆解几个高频考点的可执行逻辑2.1 有符号数补码的硬件级验证为什么-128的补码是10000000而不是100000000原文第4题给出-128 原码1000000010000000 补码10000000这里藏着8086的8位寄存器物理限制。我们用DEBUG实操验证; 在DEBUG中执行以下命令 -a 100 139F:0100 MOV AL,80 ; 直接载入十六进制80H即10000000B 139F:0102 INT 20 -g100 102 AX0080 BX0000 CX0000 DX0000 SPFFEE BP0000 SI0000 DI0000 DS139F ES139F SS139F CS139F IP0102 NV UP EI PL NZ NA PO NC提示MOV AL,80成功将10000000B载入AL而MOV AL,100H会报错——因为AL只有8位无法容纳9位原码。这证明-128的补码必须压缩为8位10000000而非扩展成16位。若你在写中断服务程序时误用16位表示ADD AX, -128会因符号扩展错误导致跳转地址错乱。2.2 BCD码与ASCII码的混用陷阱97的BCD码为何不是0x97第4题答案写8421BCD97初看困惑——97的十六进制就是0x61为何标为BCD这是因为8086的DAA/DAS指令只处理压缩BCDpacked BCD。97作为十进制数其压缩BCD形态是1001 0111即0x97但此时AL中存储的是数值97而非字符9和7。验证如下-a 100 139F:0100 MOV AL,97 ; 载入十进制97即0x61 139F:0102 DAA ; 执行十进制调整 139F:0103 INT 20 -g100 103 AX0097 ... ; 结果仍是0x97说明DAA未触发——因为AL0x61不是BCD格式正确做法是先用MOV AL,0x97载入压缩BCD再执行DAA。这解释了为什么第10章ADC采样后需用AND AL,0FH清除高4位——ADC0809输出的是纯二进制必须转为BCD才能被DAA识别。很多学生调试数码管显示时花3小时找bug最后发现是忘了这一步。2.3 段地址与偏移地址的物理地址合成1230H:0045H为何等于12345H第6题答案1230H 0045H看似简单但这是理解8086内存分段机制的钥匙。物理地址段地址×16偏移地址即1230H × 10H 0045H 12300H 0045H 12345H。这个计算不能心算必须用DEBUG验证-d 12345 12345 1234:0045 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ ; 内存12345H处初始为0 -e 12345 11 22 33 44 ; 修改为11 22 33 44 -d 12345 12348 1234:0045 11 22 33 44 00 00 00 00-00 00 00 00 00 00 00 00 ..D............注意DEBUG中-d命令显示的地址格式是段基址:偏移地址但实际访问的是物理地址。当你用MOV AX,1230H / MOV DS,AX / MOV BX,0045H / MOV AL,[BX]时CPU内部正是按此公式合成地址。若你误以为1230H:0045H等同于1230H:0045H段地址不变在写动态内存分配时就会越界访问。3. 寻址方式与指令组合答案里的MOV/XOR/SAL不是语法示例而是8086流水线调度的节奏谱第三章的答案如MOV AX, B / SAL AX, CL / ADD AX, A表面是数据运算实则是向你展示8086如何在有限寄存器资源下调度ALU操作。8086没有现代CPU的乱序执行每条指令的执行周期T1-T4严格依赖前一条的结果。这些答案的指令顺序就是最优的时序链。3.1 寄存器寻址 vs 直接寻址为什么MOV AX, 0比MOV AX, [0]快3倍第6题答案给出两种清零方式MOV AX, 0和XOR AX, AX。前者是立即数寻址后者是寄存器寻址。关键差异在于执行周期MOV AX, 0需要从代码段读取立即数02字节耗时4个T状态XOR AX, AX操作数均在寄存器内无需访存仅耗时3个T状态。但更深层的硬件逻辑是XOR AX, AX会清零OF/SF/ZF/AF/PF/CF所有标志位而MOV AX, 0只影响ZF/SP。验证如下-a 100 139F:0100 MOV AX,0 ; 执行后ZF1, CF0, OF0 139F:0102 XOR AX,AX ; 执行后ZF1, CF0, OF0, AF0, PF1 139F:0104 INT 20 -g100 104 AX0000 ... NV UP EI PL ZR NA PE NC ; 注意PF1偶数个1实战中若你写延时循环需精确控制标志位如用JC跳转用MOV AX,0可能导致PF残留干扰。这就是为什么所有标准启动代码都用XOR清零——它不仅是快更是干净。3.2 相对基址变址寻址[SIBXdisp]中的disp为何必须是8位有符号数第1题⑶答案相对基址变址寻址对应指令如MOV AX, [SIBX5]。这里的5是位移量displacement8086规定其长度只能是8位-128~127或16位-32768~32767。若你写MOV AX, [SIBX300]汇编器会报错。验证其硬件实现-a 100 139F:0100 MOV AX,[SIBX5] ; 生成机器码8B 40 053字节 139F:0103 MOV AX,[SIBX300] ; 错误operand must have size机器码8B 40 05中05即8位位移量。若需16位位移必须写MOV AX, [SIBX300H]注意H后缀生成8B 80 2C 014字节012C300。很多学生在写数组遍历时用[SIBXi*2]i超过127就崩溃根源在此。3.3 SAL与SHL的区别为什么答案坚持用SAL AX, CL而非SHL AX, CL第7题答案中SAL AX, CL用于算术左移而SHL是逻辑左移。在8086中二者机器码相同但语义不同SAL强调符号位参与用于有符号数乘法SHL强调位填充用于无符号数。答案选用SAL是在暗示——此处操作数A/B是有符号变量。验证标志位影响-a 100 139F:0100 MOV AX,8000H ; AX1000000000000000B-32768 139F:0103 MOV CL,1 139F:0105 SAL AX,CL ; 左移1位AX0000000000000000BOF1溢出 139F:0107 INT 20 -g100 107 AX0000 ... OV UP EI NG NZ AC PE CY ; OF1, SF0, CF1若用SHL结果相同但语义模糊。当你的代码需检测溢出如JO OVERFLOW时SAL明确告诉维护者“此处按有符号数处理”。这是工业级代码的自我文档化。4. 存储器组织与译码电路答案里的地址范围不是纸面数据而是你画PCB时的布线依据第五章的答案如6116芯片地址范围00000H~007FFH是硬件工程师的黄金坐标。它直接对应PCB上地址线的连接方式——哪几根线接译码器输入哪几根线直连芯片决定了你能否用万用表测到正确的片选信号。4.1 全译码 vs 部分译码为什么00000H~007FFH必须用全译码第8题答案指出全译码“地址范围唯一确定”而部分译码“会产生地址重叠”。以61162K×8为例其内部地址线为A0-A1011根故需外部提供A11-A199根作片选。若只用A15-A195根译码则A11-A14悬空导致00000H与01000H、02000H等地址同时选中同一芯片——这就是地址重叠。验证方法; 假设你用74LS138译码A15-A17输出Y0接6116#1的CE ; 则有效地址为A19A18A17A16A1500000 → Y00CE0 ; 若A14悬空则00000H、00400H、00800H...00FFFH均使CE0 -d 00000 0000F 0000:0000 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ -e 00000 11 22 33 44 -d 00400 0040F ; 若部分译码此处也会被修改实战中若你发现向00000H写数据00400H也同步变化必是译码不全。答案给出的00000H~007FFH隐含了A11-A19全参与译码——A11-A19000000000时片选有效。4.2 存储器扩展的物理约束为什么4片6116要“每2片构成1组”第11题答案要求“每2片构成1组一片接DB0-7另一片接DB8-15”。这是因为6116是8位芯片而8086数据总线是16位。若4片全接DB0-7则高8位永远为0MOV AX,[0]读出的总是低8位。正确接法芯片数据线作用6116#1DB0-DB7存储字的低8位AL6116#2DB8-DB15存储字的高8位AH验证读写-a 100 139F:0100 MOV AX,1234H ; AX0001001000110100B 139F:0103 MOV [0],AX ; 写入地址0低字节34H→6116#1高字节12H→6116#2 139F:0106 MOV BX,0 139F:0109 MOV AX,[BX] ; 读回应得1234H 139F:010C INT 20 -g100 10C AX1234 ... ; 成功若接线错误如两片都接DB0-7MOV AX,[0]读出的是3412H字节序颠倒。这是硬件调试中最隐蔽的bug之一。4.3 地址空间浪费的量化部分译码为何“浪费地址空间”第8题答案称部分译码“造成地址空间浪费”。以A15-A19译码为例5根线最多产生32个片选但若只用其中2个Y0,Y1则剩余30个地址区间如02000H~027FFH完全不可用。计算浪费率总地址空间A0-A19 1M1048576字节有效空间2组×2K 4K4096字节浪费率 (1048576 - 4096) / 1048576 ≈ 99.6%这意味着你的1MB内存空间99.6%是黑洞。答案强调“全译码便于扩展”正是因为未来加RAM时只需增加译码器输入线无需重布PCB。5. I/O系统与中断控制器答案里的端口地址和ICW不是魔法数字而是你示波器上该看到的电平序列第六至第九章的答案如8259A ICW112H、8255A控制字83H是硬件交互的协议密钥。每个字节都对应芯片引脚上的真实电平变化你用逻辑分析仪抓到的波形必须和这些值逐位匹配。5.1 8259A初始化命令字ICW112H的硬件解码D41为何是级联开关第7章第11题答案ICW112H二进制00010010其中D41是关键。查阅8259A datasheetD41表示启用级联模式master/slaveD40则为单片模式。若你误写ICW102HD40从片8259A将永远不会被主片识别。验证时序-a 100 139F:0100 MOV AL,12H ; ICW100010010BD41启用级联 139F:0102 OUT 20H,AL ; 写入主片端口20H 139F:0104 MOV AL,70H ; ICW201110000B设置中断向量基址70H 139F:0106 OUT 21H,AL ; 写入主片端口21H 139F:0108 INT 20用示波器测8259A的CAS0-CAS2引脚当D41时CAS线会输出从片地址编码D40时CAS线恒为高阻态。这是判断级联是否生效的最直接证据。5.2 8255A控制字83H的端口功能映射为何C口高4位必须为输入第8章第5题答案MOV AL,83H / OUT 23H,AL83H10000011B。按8255A控制字格式D71选择方式控制字D6D500方式0D40A口输出D30C口高4位输出错D30表示C口高4位输入见datasheet表验证C口方向-a 100 139F:0100 MOV AL,83H ; C口高4位输入低4位输出 139F:0102 OUT 23H,AL ; 写控制字 139F:0104 IN AL,22H ; 读C口假设端口22HC口 139F:0106 INT 20 -g100 106 AX???? ... ; AL值取决于外接开关状态证明C高4位可读若你误认为D30是输出会发现IN AL,22H读不到按键值。答案的83H正是强制C高4位为输入以便接键盘扫描线。5.3 ADC0809时序中的“等待周期”JZ WAIT为何必须用TEST而非CMP第10章第6题答案用TEST AL,00H / JNC WW检测EOC转换结束而非CMP AL,0 / JE WW。因为EOC是单bit信号通常接PB0TEST AL,00H只检查指定位D0不影响其他标志CMP AL,0会改变ZF但忽略其他位。硬件真相ADC0809的EOC引脚是开漏输出需上拉电阻常态为高1转换完成时EOC拉低0故TEST AL,01H检测D0即可TEST AL,00H是笔误不原文RCR AL,00H是循环右移0位无操作JNC实际检测的是CF——而IN AL,PORTB后CF由端口硬件置位非AL值修正为标准写法WW: IN AL,PORTB ; 读PB口 TEST AL,01H ; 检查D0EOC JNZ WW ; EOC1表示未完成继续等待 ; 此时EOC0转换完成这就是为什么答案强调“等待周期”——CPU必须空转直到硬件就绪。JZ在这里是陷阱因IN指令不保证ZF反映EOC。6. 避坑8086汇编调试中五个血泪经验总结现象→原因→解决这些坑我带学生踩过至少27次每次重装DEBUG前都想撕掉教材。答案PDF里那些看似随意的空格、分号、指令顺序全是填坑指南。6.1 现象MOV AX, [SI]报错“operand must have size”原因SI指向的内存单元未声明类型汇编器无法确定是字节BYTE还是字WORD。8086要求所有内存操作数必须明确尺寸。解决在变量定义时加类型伪指令或指令中强制指定。例如DATA SEGMENT BUF DW 1234H ; 明确声明为字 DATA ENDS ; 或在指令中 MOV AX, WORD PTR [SI] ; 强制按字读取6.2 现象INT 21H调用DOS功能后程序直接退出不返回原因DOS 21H中断的09H功能显示字符串要求DS:DX指向$结尾的字符串若忘记MOV AH,09H前设置DS或字符串末尾缺$则DOS会越界读取内存直至遇到$可能崩溃。解决严格按规范初始化MOV AX,DATA ; 获取数据段地址 MOV DS,AX ; 必须设置DS MOV DX,OFFSET MSG MOV AH,09H INT 21H MSG DB HELLO$ ; 字符串必须以$结尾6.3 现象8253定时器初始化后OUT端无方波输出原因第9章答案中MOV AL,14HICW0设置计数器0为方式2速率发生器但未检查GATE引脚是否为高电平。8253的GATE必须为高计数器才开始减1。若GATE接地0则永远停振。解决用万用表测8253的GATE引脚电压确保接5V或通过74LS04反相器控制。初始化后加一句MOV AL,0FFH ; 输出全1到控制口若C口为输出 OUT PORTC,AL ; 使GATE16.4 现象MOV AL, [BXSI]运行时死机原因BX和SI均为16位寄存器其和可能超过FFFFH产生进位。8086不允许BXSI作为基址变址仅允许BXDI/BPSI等组合此为非法寻址。解决改用合法组合如MOV AL, [BXDI]或用LEA计算地址LEA BX,[BXSI] ; 先计算地址到BX MOV AL,[BX] ; 再读取6.5 现象中断服务程序返回后主程序跳转到随机地址原因中断向量表中存放的CS:IP地址被覆盖。例如你将ISR入口地址写入0000:0070H对应INT 1CH但其他代码误写MOV [0070H],AX破坏了向量。解决用DEBUG检查向量表-d 0000:0070 0000:0073 0000:0070 00 00 00 00 ; 若此处为0000说明向量未设置 ; 正确应为ISR偏移地址在0070H-0071HCS在0072H-0073H设置向量必须用MOV WORD PTR [0070H],OFFSET ISR / MOV WORD PTR [0072H],SEG ISR。7. 把答案PDF变成你的硬件调试加速器一个必须养成的三步验证习惯我带过的某高校嵌入式实验室曾用这份PDF支撑了连续5届学生的课程设计。他们没把它当答案集而是当作一套硬件行为黄金标准。从那以后我每次写完一段8086汇编都强制走一遍这三步验证第一步把答案里对应题目的指令序列复制进DEBUG单步执行记录每条指令后的寄存器值和标志位第二步用逻辑分析仪抓取该段代码执行时的地址线、数据线、控制线波形重点比对ALE、RD、WR的时序宽度是否与8086手册一致第三步把答案中的地址范围如00000H~007FFH输入到仿真器的内存视图手动修改几个字节再运行我的代码看是否真的只影响该区域——如果00800H也被改了立刻回头检查译码电路。这三步听起来笨但能提前暴露90%的硬件连接错误。比如去年有个学生写8255A键盘扫描前两步都通过第三步发现IN AL,PORTC读到的值和00000H处内存值一致才意识到他把PORTC地址错接到了内存地址线上。希望帮到你。本文还有配套的精品资源点击获取
企业数字化 ERP 产品动态
相关推荐
本地语音合成实战:搭建VoiceStudio,实现稳定可控的AI配音 配音这行当,这两年真是被技术翻了个底朝天。我自己做了七八年视频内容,以前最头疼的就是配音:找主播录,一分钟少说几十块,遇上状态不好还得反复返工;自己上麦克风,声线不专业,听众一… · 2026/11/2 18:21:06
回形针全攻略:力学结构、生产制造、办公妙用与DIY改造 你桌上大概率有一盒paperclip(回形针),但可能已经一个月没真正用过它了。这东西太不起眼,文具店里按盒卖,掉在地上没人捡,却在一百多年里没怎么变过形。诚实地讲,回形针是个被严重低估的“结构化… · 2026/11/2 18:21:06
从零搭建AI工程:数据到部署的完整实战路径 很久以前我在团队里带过一批实习生,大家简历上都写着"熟悉机器学习",但真正新项目立项以后,能独立把数据、训练、评估、部署整个链路走通的人,一只手数得过来。不是他们理论不行,而是大多数教程都在教"… · 2026/11/2 18:21:06
V2X技术实现卡车自动编队行驶:原理与应用 1. 项目概述:当卡车在高速上自动排成"火车"去年夏天,我在G15沈海高速上看到一列特殊的"货运火车"——五辆重型卡车以不到10米的间距匀速行驶,头车司机偶尔调整方向盘,后车就像被无形绳索牵引般同步跟随。这正… · 2026/11/3 4:32:49
Vue2+Element UI中iframe嵌入第三方网站的工程化实践 1. 为什么非得用 iframe 嵌外部网站?Vue2 Element UI 的真实约束与取舍逻辑在某跨平台管理后台的迭代中,我接手了一个典型需求:在左侧菜单栏固定、顶部导航统一、右侧主内容区可切换的 Vue2 Element UI 架构下,嵌入一个第三方 S… · 2026/11/3 4:32:49
reverse-skill:黑盒系统的三层穿透式逆向思维 1. “reverse-skill”不是个工具名,而是一类高阶能力的统称“reverse-skill”这个词在安全圈、逆向工程社区和红队实战一线里,从来就不是某个开源项目或商业软件的代号——它是个动词化的概念,是“具备反向拆解、动态还原、逻辑重构能力”的缩… · 2026/11/3 4:32:49
反向技能:从成品倒推,快速掌握任何复杂技能 我刚带完一个新人,教他在一个陌生的环境里快速上手新工具。努力把操作流程讲细,手把手带了两周,新人还是懵的。后来换了个思路,让他自己去拆解我做完的成品,把每一步倒着推一遍,只花了三天,他就… · 2026/11/3 4:32:49
Python开发环境准备全攻略:解释器、虚拟环境与pip换源实践 如果你正跟着一份系列教程走到“环境准备”这一节,大概率之前已经碰过一两次壁——试过装某个工具装到一半被报错打断,或者下载依赖包时不时就卡住,再不就是代码在一台电脑上跑得好好的,换台机器就满地找牙。这些问题十有八九都出… · 2026/11/3 4:32:49
Oracle ASMCMD命令行工具实战指南 1. ASMCMD工具概述ASMCMD是Oracle Automatic Storage Management(ASM)提供的命令行管理工具,它允许管理员在不登录SQL*Plus的情况下直接管理ASM实例和磁盘组。这个工具对于日常运维工作来说就像一把瑞士军刀,特别是当我们需要快速… · 2026/11/3 4:31:49
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/2 13:10:28
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/2 4:42:45
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/2 5:17:18
STM32F411RE与MAX14431实现SPI隔离:工业现场抗共模干扰实战 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 1:01:59
ESP32+大模型AI硬件开发:从Demo到产品的8个工程问题 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 1:01:59
基于MAX14431BAEE+与PIC18F85J10的SPI隔离方案设计与实践 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 1:01:59
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/2 13:10:28
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/2 4:42:45
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/2 5:17:18