计算机组成原理习题精解:进制转换、补码与寻址方式高频考点

简介:这份PDF是尹建华《微型计算机原理与接口技术》教材的配套习题答案,面向学习微机原理与接口技术的高校学生及备考读者,帮助其核对课后练习、梳理数制转换、计算机组织、存储器组织、输入/输出系统与指令系统等核心章节的解题思路。资源包共1个文件,为PDF格式,大小约23KB,轻量便携,适合在电脑或移动端随时查阅。已有675人学习下载,具备一定的参考基础。内容按章节组织,覆盖进制转换与BCD码、原码反码补码运算、8086寄存器与段地址计算、各类寻址方式判断、MOV/XOR/SAL/ADD/SUB及条件转移指令的应用,以及存储器芯片扩展与地址范围分析、I/O端口查询程序等典型题型,答案直接给出关键步骤与结果,便于对照自查、定位知识盲区,适合作为课堂学习与期末复习的辅助材料。

1. 进制转换与补码:开卷第一道送分题,也是第一道翻车题

翻开这份习题答案,第一章第一题就把人按在桌上:156D 转二进制、转十六进制,0.675D 转二进制小数,37.164D 转二进制再转十六进制。很多人觉得这是送分题,结果小数部分一乘就乱,十六进制小数点后写成 0.BH 还是 0.B 都拿不准。这场考试考的不是你会不会除法,而是你能不能在有限时间里把「整数除 2 取余、小数乘 2 取整」这套动作做对,并且把原码、反码、补码的边界值一次写准。补码是整份题库里性价比最高的考点:-128 的补码为什么是 10000000,-1 的补码为什么是 11111111,+36 和 -36 的原反补三码怎么排,这些题几乎每套卷子都出现。适合谁?适合已经把教材翻过一遍、但一动手就错符号位和位宽的人。这份答案的价值不在于给你抄,而在于让你对着每一行结果反推过程,把「会看」变成「会写」。

2. 高频考点:数制转换与机器数的四类必考题

2.1 整数与小数转换:除 2 取余、乘 2 取整的完整链路

第一章第 2、3 题把转换的两条链路都摆出来了。整数部分用除 2 取余、逆序排列:156D 反复除 2 得到余数序列,倒着读就是 10011100B,四位一组就是 9CH;79D 得到 1001111B,补齐成 1001111 后分组得 4FH。小数部分用乘 2 取整、顺序排列:0.675 反复乘 2,每次取整数位,得到 0.1011B,四位一组就是 0.BH。带小数的 37.164D 则是两条链路拼起来:整数 37 得 100101B,小数 0.164 取四位得 0011B,合起来 100101.0011B,再分组得 25.3H。

这类题最容易在「取几位」上翻车。题目没给精度时,通常取到能表示的最小位数或题目暗示的位数,0.675 取四位、0.164 取四位,都是按四位一组凑十六进制的习惯来的。答题时建议把每一步的余数或整数位写在草稿上,最后逆序或顺序抄一遍,别心算。

反向转换同样要练:111010.111B 转十六进制是 3A.EH,整数部分从右往左四位一组补零,小数部分从左往右四位一组补零;110010.11B 转八进制是 62.6Q,三位一组;157Q 转十六进制要先过二进制再分组,得 06FH;0AE7.D2H 转二进制是每位十六进制展开成四位,得 101011100111.11010010B。这条链路的关键是「分组方向」:整数从低位往高位分,小数从高位往低位分,补零永远补在远离小数点的那一侧。

2.2 原码反码补码:符号位不动、数值位取反加一

第一章第 6 题是整份答案里最值得逐行抄写的一段。+1 的原码、反码、补码都是 00000001;-1 的原码是 10000001,反码是 11111110,补码是 11111111;+36 三码同为 00100100;-36 原码 10100100,反码 11011011,补码 11011100。-128 是特殊值,原码写成 1000000010000000(这里答案给的是双字节写法),补码是 10000000。

答题套路固定:先确定位宽(8 位还是 16 位),正数三码相同,负数原码符号位为 1、数值位照写,反码数值位逐位取反,补码在反码末位加 1。面试官或阅卷人最想看到的是你有没有把「符号位不参与取反」这句话落实到笔头。第 7 题给补码求真值:-128、-1、15、-86,做法是先看符号位,为 1 则整体取反加一再加负号,为 0 直接按权展开。第 8 题问表示范围:8 位无符号 0~255,8 位原码 -127~+127,16 位补码 -32768~+32767,这三个范围必须背到条件反射。

2.3 溢出判断与 BCD 码:别把进位当溢出

第一章第 11 题给了三组运算:34H+89H、0AFH+45H、76H-0FEH,答案都是无溢出。判断溢出的标准做法是看符号位进位与最高数值位进位是否一致,或者用双符号位法。34H+89H 两个正数相加结果为 BDH,符号位变 1,但最高数值位没有向符号位进位,属于溢出吗?答案给的是无溢出,这里要按题目给定的位宽和解释方式核对,别自己加戏。更稳妥的答法是写出两个操作数的符号位、结果的符号位,说明「同号相加结果异号才溢出,异号相减结果与被减数异号才溢出」。

BCD 码在第 4 题出现:8421BCD 表示 97,就是把 9 写成 1001、7 写成 0111 拼起来。这类题常和压缩 BCD、非压缩 BCD 一起考,答题时先问清楚是几位BCD、要不要加 30H 变成 ASCII。

2.4 真题演练:三道转换题的答题模板

第一道:把 0.468D 转二进制。答题时写「乘 2 取整,顺序排列」,0.468×2=0.936 取 0,0.936×2=1.872 取 1,0.872×2=1.744 取 1,0.744×2=1.488 取 1,得 0.0111B,与答案一致。第二道:把 133Q 转十进制再转十六进制。先按权展开 1×64+3×8+3=91,再 91 除 16 得 5 余 11,即 5BH,答案写 91 是十进制结果,两个都要给。第三道:给 -86 的补码求真值。先看符号位为 1,取反得 01010101,加一得 01010110 即 86,加负号得 -86。

提示:转换题写过程比写结果重要,阅卷时过程分往往占一半,草稿上的余数序列别擦。

3. 高频考点:8086 结构与寻址方式的判断套路

3.1 寄存器复位状态与段地址偏移地址计算

第二章第 5 题是典型的记忆题:复位后 FR 为 0000H、IP 为 0000H、CS 为 FFFFH、DS/SS/ES 均为 0000H,指令队列清空,其它寄存器为 0000H。这组值必须背,因为后续所有取指地址计算都从 CS:IP 出发。第 6 题给段基地址和偏移地址求物理地址:1230H:0045H 得 12345H,1000H:2345H 得 12345H,两个不同逻辑地址映射到同一物理地址,这正是段地址左移四位加偏移的直观体现。第 7 题反推:物理地址 90000H~9FFFFH 对应段地址 9000H、偏移 0000H~FFFFH。

答题时把公式写出来:物理地址 = 段基地址×16 + 偏移地址。面试官最想听的是你知不知道「同一物理地址可以有多个逻辑地址」,以及段地址为什么必须左移四位。

3.2 七种寻址方式的识别:看操作数长相下判断

第三章第 1 题把寻址方式一次考全。寄存器寻址看操作数是不是寄存器名;立即数寻址看是不是常数;直接寻址看是不是带方括号的常数地址;寄存器间接寻址看方括号里是不是只有寄存器;相对基址变址寻址看是不是 [BX+SI+位移] 这类组合。答案里「相对基址变址寻址,寄存器寻址」这种成对出现,说明题目在考双操作数指令里源和目的各自的寻址方式。

判断顺序建议固定:先看有没有方括号,没有则是寄存器或立即数;有方括号再看括号内成分,单个寄存器是间接,寄存器加位移是相对,两个寄存器加位移是基址变址或相对基址变址。第 2 题十道判断对错,错因集中在「类型不匹配」「目的操作数类型无法判断」「段寄存器不能直接送立即数」这几类,答题时把错因一句话点明即可,别展开。

3.3 真题演练:寻址方式判断与指令正误辨析

给出一条指令MOV AX, [BX+SI+10H],问源操作数寻址方式。答题模板:源操作数在方括号内,由基址寄存器 BX、变址寄存器 SI 和位移量 10H 组成,属于相对基址变址寻址,默认段寄存器为 DS。再给MOV [1000H], AL,目的操作数是直接寻址,源是寄存器寻址。

判断指令正误的题,常见错误答案有MOV CS, AX(CS 不能作目的操作数)、MOV [BX], [SI](两个操作数不能同时为存储器)、MOV AL, 1234H(立即数位宽超过目的操作数)。答题时先查操作数类型是否匹配,再查段寄存器限制,最后查立即数位宽。

; 第三章第 7 题片段:计算 B = B*4 + A,结果存 D MOV AX, B MOV CL, 2 SAL AX, CL ; B 左移两位,相当于乘 4 ADD AX, A ; 加上 A CWD ; 符号扩展,为 32 位运算做准备 MOV BX, DX MOV CX, AX MOV AX, A SAL AX, 1 ; A 乘 2 IMUL C ; 有符号乘 SUB CX, AX MOV D, CX SBB BX, DX MOV D+2, BX

这段代码的关键在SAL AX, CL用 CL 作移位次数,以及CWD把 AX 符号扩展到 DX:AX 后再做 32 位减法。参数说明:B、A、C 为字变量,D 为双字结果,低字存 D、高字存 D+2。易错点是移位次数大于 1 时必须用 CL,不能直接写立即数(8086 不支持)。

4. 易错点:这五类题丢分最多,逐条对照改

4.1 补码边界值写错位宽

错在哪:把 -128 的补码写成 10000000 却在 16 位题里也只写 8 位,或者把 -1 的补码写成 10000001。为什么错:位宽没先定,符号位和数值位混在一起算。怎么答对:动笔前先写「本题按 8 位/16 位」,负数补码统一走「原码→反码→加一」,-128 单独记「8 位补码 10000000,16 位补码 1111111110000000」。

4.2 小数转换取位方向反了

错在哪:0.675 转二进制时把第一次取的整数位放到最后,得到反序结果。为什么错:整数除 2 取余要逆序,小数乘 2 取整要顺序,两条链路方向相反。怎么答对:草稿上整数余数从下往上抄,小数整数位从上往下抄,抄完用「乘回去近似原数」验算一遍。

4.3 物理地址计算忘记左移四位

错在哪:1230H:0045H 直接相加得 1275H。为什么错:段基地址要乘 16 才能和偏移地址相加。怎么答对:公式写死「段地址后补一个 0 再加偏移」,1230H 补 0 成 12300H,加 0045H 得 12345H。

4.4 寻址方式把「相对」和「基址变址」混为一谈

错在哪:看到 [BX+SI] 就答相对基址变址。为什么错:没有位移量就不是「相对」。怎么答对:方括号内两个寄存器无位移是基址变址,带位移才是相对基址变址,只有一个寄存器加位移是相对寄存器寻址。

4.5 指令正误题只看语法不看类型

错在哪:认为MOV [BX], [SI]只是写法问题。为什么错:8086 不允许存储器到存储器直接传送。怎么答对:判断顺序固定为「类型匹配→段寄存器限制→立即数位宽→存储器直传」,四关过完再下结论。

5. 高频考点:存储器扩展与 I/O 接口的地址范围推算

5.1 全译码与部分译码:地址唯一性和电路复杂度的取舍

第五章第 8 题把两种译码方式的区别摆得很清楚。全译码法把除片内寻址外的全部高位地址线都送进译码器,输出作片选,优点是每片地址范围唯一且连续、便于扩展、不产生重叠,缺点是译码电路复杂。部分译码只取高位地址的一部分译码,会出现地址重叠和地址不连续,浪费地址空间,但电路简单。答题时先复述定义,再各给一条优缺点,最后点一句「实际系统里地址线富余时倾向全译码,成本敏感时用部分译码」。

第 11 题是计算题:用 6116 芯片组成某容量存储区,需 4 片,每 2 片一组,一组接数据线低 8 位、一组接高 8 位,片内译码线并接,片选由译码电路产生。第 1 组地址范围 00000H~007FFH,第 2 组 00800H~00FFFH。第 12 题用 2716 需 4 片,地址范围依次 00000H~007FFH、00800H~00FFFH、01000H~017FFH、01800H~01FFFH;用 2114 需 16 片,每 2 片一组共 8 组,地址范围从 00000H~003FFH 一路排到 01C00H~01FFFH。

这类题的答题模板:先算总容量除以单片容量得片数,再算每组片数和组数,然后确定片内地址线位数(容量决定),剩余高位地址线送译码器,最后按组写地址范围。易错点是片内地址线和片选地址线分界算错,以及数据线高低位接反。

5.2 8255A 与 ADC0809 的端口操作:控制字加握手信号

第十章第 6 题是接口综合题:8255A 的 PC0 接 ADC0809 的 START,PC1 接 OE,PB0 接 EOC。程序段先往控制口写 92H 设置工作方式,再往 C 口写 01H 发启动脉冲,写 00H 撤销,然后循环读 B 口查 EOC,转换结束读 A 口取数据。

; 第十章第 6 题:8255A 驱动 ADC0809 采集 MOV AL, 92H OUT PORTC, AL ; 写控制字,设置 A 口输入、B 口输入、C 口输出 MOV AL, 01H OUT PORTC, AL ; PC0 置 1,发 START 脉冲 MOV AL, 00H OUT PORTC, AL ; PC0 清 0,结束启动 WW: IN AL, PORTB RCR AL, 00H ; 查 PB0 即 EOC 状态 JNC WW ; 未转换完继续等 MOV AL, 10H OUT PORTC, AL ; PC1 置 1,发 OE 允许输出 IN AL, PORTA ; 读 A 口转换结果

参数说明:PORTC 为控制口地址,PORTA、PORTB 为数据口地址,92H 的含义是 A 口方式 0 输入、B 口方式 0 输入、C 口高四位输出低四位输出。易错点是控制字位定义记反,以及 EOC 查询极性搞错(本例 EOC 高电平有效,用 RCR 把 PB0 移进 CF 后 JNC 判断)。

5.3 真题演练:中断控制器与定时器初始化

第七章第 12 题给 8259A 初始化:ICW1=13H、ICW2=80H、ICW4=01H,程序依次往 80H、81H、81H 写。第 13 题 ICW4=1DH,第 14 题因为 OCW2 的 D7 位为 0,判断为优先级固定方式。第九章第 3 题给 8253 初始化:先写方式控制字 14H 到 343H,再写计数初值 N 到 340H,再写 9AH 到 343H,最后写初值 M 到 342H。

答题时把「先控制字、后初值」的顺序写清楚,控制字里方式位和读写格式位分开说明。面试官最想听的是你知不知道 8259A 的 ICW1 和 ICW2 各管什么,以及 8253 的方式 2 和方式 3 的区别。

6. 答题技巧:把这份答案用成三遍刷题法

第一遍对着答案抄过程,不是抄结果。第一章每道转换题都把余数序列和整数位序列写全,第二章把复位状态表和物理地址公式默写一遍,第三章把每条指令的寻址方式判断理由写一句。这一遍的目标是让手记住格式,而不是让眼睛觉得「我看懂了」。

第二遍遮住答案自己写,写完只对结果不对过程。错的地方回到对应小节找原因,是位宽没定、方向反了还是公式漏了左移。这一遍最痛苦,但提分最快,因为错题会逼你把「以为会」变成「确实会」。建议准备一张 A4 纸,左边写题号,右边写错因关键词,比如「补码位宽」「小数反序」「段地址未左移」,考前只看这张纸。

第三遍按模块串讲,把第一章的补码和第三章的指令、第五章的地址范围连起来讲一遍。比如给一个存储区地址范围,问需要几片芯片、片选怎么接、数据线怎么分,这就是第五章第 11、12 题的完整链路。再比如给一段 8255A 初始化程序,问控制字含义和端口方向,这是第十章第 6 题的反向考法。能串起来讲,说明你不是背答案,而是掌握了考点之间的连接。

注意:这份答案里有些题只给了结果没给过程,比如第一章第 4 题的无符号数 151、符号数 -105、8421BCD 97,遇到这种题要自己补过程,别默认答案就是全部。

我当年第一次做补码题,-128 的补码写了三遍才写对,前两遍都是位宽没定就动笔。从那以后我每次做机器数题,第一行先写「8 位」或「16 位」,再写符号位,最后才动数值位,这个习惯救了我至少两道大题。希望帮到你。

本文还有配套的精品资源,点击获取