ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

微机原理与接口技术复试大纲:8086/8259A/8255高频考点与机试

微机原理与接口技术复试大纲:8086/8259A/8255高频考点与机试 简介面向研究生复试备考的考试大纲类PDF适合初试后需要快速明确复试范围、按条目查漏补缺的考生也可作为核对知识点覆盖度的自查清单。文档标题为研究生复试《微机原理与接口技术》大纲预览内容则呈现天津理工大学2017年硕士研究生复试考试大纲的典型编排考试科目、参考书目、考试方式、试卷结构及考查知识范围均分项列出并按基本概念、网络元件参数与等值电路、潮流计算、短路分析、频率与电压调整、坐标变换、静态与暂态稳定等模块标注“掌握、熟悉、了解”要求便于安排复习优先级。压缩包内仅1个PDF文件约48KB轻便易存可打印标注。目前已有492人学习。读者可据此逐项勾选掌握程度定位薄弱章节并结合教材和真题补齐计算与综合应用能力。1. 大纲不是目录是复试的评分坐标很多人拿到《微机原理与接口技术》复试大纲 PDF 的第一反应是从第一章开始从头背。但复试和期末考不一样大纲给的不是范围是老师手里那张评分表的结构。条目里的动词才是权重信号——写“掌握”的地方面试能追问三层写“了解”的地方最多当个引子。微机原理与接口技术这门课又有个特点笔试能考、面试能问、机试能写同一个知识点会以三种形态出现。所以真正该做的第一件事是把 PDF 变成一份可检索、可打分、可勾选的结构化清单再决定时间怎么分。这篇适合正在准备复试、手上有这份大纲却不知从哪下手的人也适合工作几年后想补底层知识的后端和嵌入式从业者——8086 的地址计算、8259A 的初始化流程在调试真实硬件时一样用得上。2. 把大纲 PDF 拆成能打分的知识点清单大纲 PDF 有两种形态文本版和扫描版。前者能直接抽出条目编号后者只能靠 OCR编号层级常常丢失。先花一分钟判断比后面返工划算。2.1 判断大纲 PDF 是文本版还是扫描版最省事的判定方式是用命令行先抽一遍纯文本看字符量# 抽出纯文本并按字节数统计layout 参数保留原有缩进层级 pdftotext -layout 研究生复试《微机原理与接口技术》大纲.pdf - | wc -c如果输出只有几十到一两百字节说明这多半是扫描件pdfplumber、PyMuPDF 直接提取会得到空白。此时走 OCR 路线pdf2image把每页转成 300dpi 位图再交给 tesseract 做中文识别。做 OCR 时要加一个后处理——中文序号“一、二、三”和阿拉伯数字“1.1”在识别结果里容易丢得用正则和缩进双重兜底。如果是文本版还要再区分「段落型」和「表格型」。表格型大纲用page.extract_tables()比extract_text()准确得多因为单元格边界自带层级信息。2.2 用 Python 把大纲条目切成三级结构下面这段脚本把大纲切成「章 - 节 - 条目」三级并记录每条出现在第几页方便回头翻原文核对。# parse_outline.py 提取大纲条目并输出三级结构 import re, json from pathlib import Path import pdfplumber # pip install pdfplumber PDF Path(研究生复试《微机原理与接口技术》大纲.pdf) CN 一二三四五六七八九十 # 三级匹配中文序号为一级x.y 为二级x.y.z 为三级 RE_H3 re.compile(r^\s*(\d{1,2})\.(\d{1,2})\.(\d{1,2})\s*) RE_H2 re.compile(r^\s*(\d{1,2})\.(\d{1,2})\s*) RE_H1 re.compile(rf^\s*第?([{CN}]{{1,3}})\s*[、.章]|^\s*(\d{{1,2}})\s*[、.]\s*[\u4e00-\u9fa5]) def level_of(line: str): s line.strip() if not s: return None if RE_H3.match(s): return 3 if RE_H2.match(s): return 2 # 必须先判三级否则 x.y.z 会被 x.y 吃掉 if RE_H1.match(s): return 1 return None def parse(): items [] with pdfplumber.open(PDF) as pdf: for pno, page in enumerate(pdf.pages, 1): text page.extract_text() or for raw in text.splitlines(): lv level_of(raw) if lv: items.append({level: lv, page: pno, text: re.sub(r\s, , raw.strip())}) return items if __name__ __main__: rows parse() Path(outline.json).write_text( json.dumps(rows, ensure_asciiFalse, indent2), encodingutf-8) for r in rows: print( * (r[level] - 1) f- {r[text]} (p{r[page]}))这段代码的关键点在正则的判定顺序必须先用三级的x.y.z去匹配再判x.y否则「3.1.2」会被RE_H2截成「3.1」。第二个关键点是page字段——复试前一周如果发现某个条目理解偏了能两秒钟翻回原文比重新翻 PDF 找十分钟强。outline.json建议直接放进笔记软件或 Git 仓库每复习一遍就在上面标状态。提示如果第一次跑出来条目数明显偏少比如整本只有十几条先检查是不是表格型大纲。用pdf.pages[0].extract_tables()看一眼如果是二维列表结构就改用表格遍历。2.3 用动词权重给知识点排序结构出来之后给每条打分。打分维度只有两个动词权重和出现次数。大纲里的动词基本就那几个权重可以按下面的表来定大纲动词权重对应复试形态建议投入时间占比掌握、能熟练应用3笔试大题 面试追问两层50%理解、熟悉2面试概念题 选择题30%了解、知道1只在扩展问题里出现10%无动词只列名词1作为章节背景顺带过10%打分脚本很短但能把“不知道该背哪”这件事直接消掉# score.py 给每条大纲加权输出优先级排序 import json, re from collections import Counter VERB {掌握: 3, 熟练: 3, 应用: 3, 理解: 2, 熟悉: 2, 会: 2, 了解: 1} rows json.load(open(outline.json, encodingutf-8)) # 只对三级条目打分一级二级是容器不参与排序 leaf [r for r in rows if r[level] 3] or [r for r in rows if r[level] 2] def score(text: str) - float: w max([v for k, v in VERB.items() if k in text], default1) return w for r in sorted(leaf, keylambda x: -score(x[text])): print(f{score(r[text]):3} {r[text]})逻辑说明VERB里取匹配到的最高权重避免一句话里同时出现“了解”和“掌握”时被低估。参数上唯一需要按自己情况调的是权重值——如果你报考的院系历年复试偏机试可以把“应用”提到 4“了解”降到 0.5让排序更贴近实际题面分布。3. 《微机原理与接口技术》大纲里的高频考点怎么落到题面大纲条目是抽象名词题面是具体数字。这中间有一段必须自己补的映射看到「掌握 8086 寻址方式」要知道老师大概率会给一个段地址和偏移量让你算物理地址。3.1 8086 寻址与地址计算一类必考的送分题8086 有 20 根地址线能寻址 1MB 空间但内部寄存器只有 16 位所以用「段地址:偏移地址」拼物理地址规则是段地址左移 4 位再加偏移。段寄存器默认配合的偏移寄存器典型用途CSIP取指令DSBX / SI / DI / 直接地址数据访问SSSP / BP堆栈操作ESDI串操作目的地址算例段地址2000H偏移1234H物理地址 2000H × 16 1234H 21234H。这类题面试里常被追问一句「为什么是左移 4 位而不是 16 位」——答案是指令里给的偏移是十六进制书写乘 16 等价于十六进制左移一位本质是 20 位地址里低 4 位固定为 0所以段只能落在 16 字节边界上。寻址方式按大纲一般列七种立即、寄存器、直接、寄存器间接、寄存器相对、基址变址、相对基址变址。复习时不要背名字背 BX/BP/SI/DI 四个寄存器的默认段寄存器和合法组合只有 BX 配 SI/DI、BP 配 SI/DI 是合法的基址变址组合BX 配 BP 是非法的这一条几乎每年都有辨析题。3.2 中断系统与 8259A面试最爱追问的三个参数8086 的中断向量表固定在内存最低端00000H ~ 003FFH共 256 个中断类型每个类型占 4 字节低两字节 IP高两字节 CS。所以类型号 n 的向量地址就是n × 4。例INT 21H的向量在21H × 4 84H即0000:0084H开始的 4 个字节。8259A 的三个必背参数是 ICW1、ICW2、ICW4复试基本围绕这三条问命令字典型值含义追问点ICW111H边沿触发、单片、需要 ICW4若改电平触发是 10H值怎么变ICW208HIR0 对应的中断类型号基址为什么低 3 位被忽略ICW401H8086 模式、非缓冲、正常 EOI自动 EOI 是 03H区别在哪初始化序列写出来是这样的; 8259A 初始化单片、边沿触发、IR0 对应类型号 08H MOV AL, 11H ; ICW1: 边沿触发 需要 ICW4 OUT 20H, AL MOV AL, 08H ; ICW2: 中断类型号基址, IR0 - 08H OUT 21H, AL MOV AL, 01H ; ICW4: 8086 模式, 非缓冲, 正常 EOI OUT 21H, AL MOV AL, 0FEH ; OCW1: 屏蔽字, 只放行 IR0(最低位为 0) OUT 21H, AL参数说明20H是命令口A0021H是数据口A01这是 PC 兼容机的传统地址。ICW2的低 3 位不起作用因为一次只能有一个 IR 有效类型号由引脚号补齐。中断服务程序结尾必须发 EOIMOV AL, 20H/OUT 20H, AL再IRET。漏掉 EOI 的后果是同级及更低级中断被永久屏蔽这个现象在面试里经常被拿来问「为什么只能进一次中断」。注意如果在真实机器上做实验主片地址 20H/21H 已经被系统占用自己写实验程序时应改用未被占用的地址段如 260H 起并用地址译码电路重新映射。3.3 8255/8253/8251 初始化大纲说“掌握”题就出在这里这三个芯片是大纲里出现频率最高的接口芯片考法高度一致给你一个硬件需求让你写控制字和初始化序列。8255 的 A 口有方式 0/1/2方式 2 仅 A 口支持双向B 口只有方式 0/1C 口按 4 位一组配方向。8253 有三个独立计数器六种工作方式方式 2 是分频器、方式 3 是方波。8251 是串行通信接口重点在模式字和命令字的先后顺序。复习这三个芯片时把「端口地址分配」和「控制字」分开记。地址分配是硬件问题由译码电路决定控制字是软件问题由需求决定。复试里最容易丢分的是控制字因为它是 8 位二进制写错了后面全错。下一章直接用代码把它算出来。4. 用汇编把接口芯片跑通复试机试的动手环节接口技术这门课光看会「假懂」必须手敲一遍。复试机试环境通常是 MASM 或 TASM跑在 DOSBox 或虚拟机里也可能是 emu8086 这类仿真器。4.1 8086 汇编最小可运行框架下面这个框架把段定义、端口宏、循环全部串起来改端口地址和输出值就能变成不同的题STACK SEGMENT STACK DW 100 DUP(?) STACK ENDS DATA SEGMENT PORT_A EQU 0260H ; 8255 A 口 PORT_B EQU 0261H PORT_C EQU 0262H PORT_K EQU 0263H ; 工作方式控制口 DATA ENDS CODE SEGMENT ASSUME CS:CODE, DS:DATA, SS:STACK START: MOV AX, DATA MOV DS, AX MOV DX, PORT_K MOV AL, 10000000B ; A/B/C 口全为方式 0 输出 OUT DX, AL NEXT: MOV DX, PORT_A MOV AL, 0AAH ; 0101 0101 OUT DX, AL MOV CX, 0FFFFH DLY1: LOOP DLY1 ; 软件延时 MOV DX, PORT_A MOV AL, 55H ; 1010 1010 OUT DX, AL MOV CX, 0FFFFH DLY2: LOOP DLY2 JMP NEXT MOV AH, 4CH ; 返回 DOS INT 21H CODE ENDS END START逻辑说明OUT DX, AL要求端口地址超过 0FFH 时必须走 DX 间接寻址这是 8086 的硬限制写成OUT 260H, AL汇编器会直接报错。LOOP隐含使用 CX 并自动减一所以延时长度由 CX 初值决定0FFFFH是 16 位能表示的最大非零值。参数上唯一要按题目改的是端口地址和MOV AL, xx里的输出值。4.2 8255A 控制字从需求到 8 位二进制8255 方式控制字的位定义是D71 表示方式选择D6D5 是 A 组方式D4 是 A 口方向0 出 1 入D3 是 C 口高 4 位方向D2 是 B 组方式D1 是 B 口方向D0 是 C 口低 4 位方向。把常见需求整理成速查表需求二进制十六进制A 出、B 出1000 000080HA 出、B 入1000 001082HA 入、B 出1001 000090HA 入、B 入1001 001092HA/B/C 全输入1001 10119BHC 口单独置位复位时用位控制字D70D3D1 选位号000 对应 PC0111 对应 PC7D01 置位、0 复位。例置位 PC3 是0000 0111 07H复位 PC3 是 06H。这个位操作用在按位控制 LED 或继电器时非常实用也是面试常问的「方式 0 下 C 口能不能单独操作某一位」。4.3 8253 分频计算与初始化序列8253 的控制字位定义D7D6 选计数器D5D4 选读写方式01 只读写低 8 位10 只读写高 8 位11 先低后高D3D2D1 选工作方式D0 选 BCD 或二进制。计数初值 输入时钟频率 ÷ 期望输出频率。需求是「1MHz 输入输出 1kHz 方波」初值就是 1000写成十六进制 03E8H初始化序列; T0: 16 位读写, 方式 3(方波), 二进制 - 控制字 36H MOV AL, 36H OUT 0263H, AL ; 假设 8253 控制口地址 MOV AX, 1000 ; 初值 1_000_000 / 1000 OUT 0260H, AL ; 先写低 8 位 E8H MOV AL, AH OUT 0260H, AL ; 再写高 8 位 03H参数说明控制字36H00 11 011 0即计数器 0、先低后高 16 位、方式 3、二进制。写初值必须严格按照控制字约定的顺序11时的顺序是先低后高写反了分频比会完全错——这是机试最常见的失分点。另外 8253 是减一计数初值 1000 表示计 1000 个时钟周期不是 999如果初值需要 65536写 0000H。4.4 用 Python 写一个控制字校验脚本手算容易错在位上写个校验脚本考前把常考的几十个组合跑一遍def ctrl_8255(a_mode0, a_outTrue, ch_outTrue, b_mode0, b_outTrue, cl_outTrue): 按 8255 方式控制字位定义拼 8 位返回 (二进制串, 十六进制) assert a_mode in (0, 1, 2), A 口方式只能是 0/1/2 w 0 w | 1 7 # D71: 方式选择 w | {0: 0b00, 1: 0b01, 2: 0b10}[a_mode] 5 # D6D5: A 组方式 w | (0 if a_out else 1) 4 # D4: A 口方向, 0 出 1 入 w | (0 if ch_out else 1) 3 # D3: C 口高 4 位 w | (b_mode 0b1) 2 # D2: B 组方式(仅 0/1) w | (0 if b_out else 1) 1 # D1: B 口方向 w | (0 if cl_out else 1) 0 # D0: C 口低 4 位 return format(w, 08b), f{w:02X}H def ctrl_8253(counter, rw, mode, bcd0): counter:0~2; rw:1低8位 2高8位 3先低后高; mode:0~5 assert counter in (0, 1, 2) and rw in (1, 2, 3) and 0 mode 5 w (counter 6) | (rw 4) | (mode 1) | (1 if bcd else 0) return format(w, 08b), f{w:02X}H def divisor(f_in, f_out): 计数初值8253 减一计数初值 f_in / f_out n round(f_in / f_out) assert 1 n 65536, 超出 16 位范围需要多片级联 return 0 if n 65536 else n # 65536 用 0000H 表示 print(ctrl_8255()) # (10000000, 80H) print(ctrl_8255(a_outFalse, b_outFalse))# A/B 全输入 print(ctrl_8253(0, 3, 3)) # (00110110, 36H) print(hex(divisor(1_000_000, 1000))) # 0x3e8逻辑说明两个函数都把位定义直接翻译成移位拼接改动任何一个方向参数结果立刻重算避免手算时“D4 和 D3 看串行”。divisor里的round和边界断言是给自己设的护栏——初值超过 65536 必须改用两片 8253 级联或先分频后计数这个追问在面试里出现的概率不低。5. 四周冲刺把清单变成计划和自测闭环大纲条目整理完、控制字能算准之后剩下的问题就是时间怎么排。5.1 按权重排四周把第 2.3 节打出的权重直接映射到周计划比“一天一章”靠谱得多周次主攻交付物验证方式第 1 周8086 结构、寻址、指令手写地址计算 20 题全对且不用查表第 2 周中断系统 8259A初始化序列默写能解释每个命令字的每一位第 3 周8255/8253/8251三类控制字各 10 组用 4.4 的脚本核对零错误第 4 周串讲 模拟面试原子化问题清单随机抽 30 题答对 ≥ 27第 4 周不学新东西只做回环。判断自己是否真会标准很简单能不能不看笔记把某条大纲条目讲成一段带数字的话。讲不出来就是没会。5.2 追问的三层路径与回答模板面试官问「8253 方式 3 和方式 2 有什么区别」时实际是在走三层是什么、为什么、如果改条件会怎样。回答按这个结构组织就行——先给结论方式 2 是分频器输出负脉冲周期等于计数初值方式 3 是方波前一半计数值为高、后一半为低再给原因都由减一计数到 0 触发重装差别在输出翻转逻辑最后主动补一句边界方式 3 在初值为奇数时高电平比低电平多一个时钟周期。主动说边界是把自己和只会背书的考生区分开的最低成本方式。5.3 自测闭环原子化改写 随机抽题最后一个技巧把大纲的每一条改写成一个可判定对错的问题写进一个纯文本文件一行一题。比如「掌握 8255 方式 0」改写成「8255 方式 0 下 C 口能否按位操作如果能控制字是什么」——答案是能D70例如置位 PC3 为 07H。每条大纲平均能拆出 2 到 3 个这样的问题一份 60 条的大纲大概能得到 150 道题。# draw.py 随机抽题并记录答错次数 import random, json from pathlib import Path BANK Path(questions.txt) # 每行一题格式: 题目|答案 STATE Path(state.json) # 记录错题次数 def load(path): return [dict(zip((q, a), line.split(|, 1)), miss0) for line in path.read_text(encodingutf-8).splitlines() if line.strip() and | in line] if __name__ __main__: bank load(BANK) random.seed() # 不固定种子保证抽题真正随机 for item in random.sample(bank, min(5, len(bank))): print(题目, item[q]) if input(按回车看答案…) is not None: print(答案, item[a]) if input(答对了吗(y/n) ) n: item[miss] 1 # 错题次数用于次日优先重抽 STATE.write_text(json.dumps(bank, ensure_asciiFalse, indent2), encodingutf-8)参数说明random.seed()不传固定值是为了避免每次都抽到同一批题形成记忆惯性miss字段会在每次运行后写回state.json下次可以在load里按miss降序排前 30% 再抽形成真正的错题回环。跑到第四周miss全为 0 的那份清单就是可以带进考场的底气。本文还有配套的精品资源点击获取
返回列表