微机原理习题课 助教 : 王骏腾
本次习题课中提到的 课本, 均指机械工业出版社的 Intel 微处理器 ( 原书第八版 ) 中文版, 使用其他版本课本的同学需要自己对应
习题 33:Core2 处理器可寻址 存储器? 答案 :4GB 64GB 1TB ( 课本 P18 表 1-6) 第一章 习题 53: 信号的作用是什么? 答案 :I/O 读控制, 低电平有效 ( 两点都要答上, 详细可见课本 P20) 习题 69: 什么是 Unicode? 参考答案 : 课本 P26 答案不唯一, 批改的重点是 Unicode 的位数和编码规则
补充题 1: 什么是芯片组? 为什么说选择主板主要是选择芯片组? 参考答案 : 通过 VLSI 技术, 将主板上众多的接口电路和支持电路按不同功能分别集成到一块或几块集成芯片之中, 这几片 VLSI 芯片的组合称为 控制芯片组, 简称 芯片组 主板控制芯片组是控制局部总线, 内存和各种扩展卡的, 是整块主板的灵魂所在,CPU 对其它设备的控制都是通过他们来完成的 批改的重点 : 集成 通过芯片组控制其它设备 第一章 补充题 2: 小端存储 : 数据高位存在高地址, 低位存在低地址 数据边界对齐 : 变量的起始地址必须能被自身数据类型的大小整除, 结构体的大小为其最宽基本类型的整数倍
第二章 习题 13: 在实模式下, 段寄存器装入如下数值, 写出每个段的起始地址与结束地址 注意 : 在实模式中, 每个段寄存器内容的最右边增加一个 0H( 即 *10H), 如此形成了 20 位存储器地址, 实模式下段的长度总是 64KB( 课本 P41) 起始地址 = 段寄存器数值 *10H 结束地址 = 起始地址 +FFFFH 答案 : (a) 1000H:10000H-1FFFFH (b) 1234H:12340H-2233FH (c) 2300H: 23000H-32FFFH (d)e000h: E0000H-EFFFFH (e)ab00h: AB000H-BAFFFH 习题 19: 若使用 BP 寻址存储器, 则数据包含在堆栈 (SS) 段内 习题 21:Core2 在实模式下操作, 给出下列寄存器组合所寻址的存储单元地址 注意 : 实模式下段的起始地址, 寻址单元地址 = 段起始地址 + 偏移地址 (a) 2000H*10H+3000H = 23000H (b) 1A00H*10H+2000H = 1C000H (C) C000H*10H+A000H = CA000H (D) 8000H*10H+9000H=89000H (E) 1239H*10H+A900H=1CC90H
习题 27: 一个 Pentium4 描述符中包含基地址 01000000H 和界限 0FFFFH, 且有 G=0, 由这个描述符寻址的起始地址和结束地址是什么? 描述符 基地址 界限 界限粒度等详见课本 P45 答案 : 第二章 习题 37: 微处理器工作于保护模式时, 将一个新数装入段寄存器时会发生什么? 保护模式 段寄存器访问权限等详见课本 P45-46 参考答案 : 习题 43: 页目录中每一个项可把多大的线性存储空间转换为物理存储空间? 页目录 内存分页等详见课本 P49 每个页目录可以访问 2 = 4MB 物理存储空间
习题 7:MOV BL,CX 存在什么错误? 答案 : 寄存器长度不匹配, 试图 16bit -> 8bit 习题 23:MOV [BX],[DI] 存在什么错误? 答案 :MOV 指令不可以 mem->mem 传值 第三章 习题 27: 选择一条需要 QWORD PTR 的指令? 关于 PTR 伪指令, 详见课本 P64, 本题没有唯一答案, 合理即可 习题 33: 给定 DS=1300H,SS=1400H,BP=1500H,SI=0100H, 在实模式下, 确定每条指令寻址的存储地址? 注意 :BP 默认的段寄存器 SS,SI 默认的段寄存器 DS (A) SS*10H+BP+200H = 15700H (B) SS*10H+BP+SI-200H = 15400H (C) DS*10H+SI-0100H = 13000H 习题 35: 给定 EAX=00001000H,EBX=00002000H,DS=0010H, 在实模式下, 确定每条指令寻址的存储地址?
第三章 习题附加 1:8086 CPU 中, 设 DS=1000H,ES=2000H,SS=3500H, SI=00A0H,DI=0024H,BX=0100H,BP=0200H, 数据段中变量名为 VAL 的偏移地址值为 0030H, 试说明下列源操作数字段的寻址方式是什么?
第三章 习题附加 2:80386 CPU 中, 下列指令的源操作数的寻址方式是什么?
习题 11: 如果一个 MOV ESI,[EAX] 指令出现在工作于 16 位指令模式的 Core 2 微处理器的程序中, 它对应的机器语言是什么? 关于 32 位寻址机制, 详见课本 P85 第四章 综上所述, 答案应为 67 66 8B 30 H
习题 21: 说明 PUSH BX 时会发生什么操作? 设 SP=0100H,SS=0200H, 确切指出 BH 与 BL 分别存储在哪个存储单元中 关于 push 指令, 详见课本 P87-89 第四章 习题 25: 比较 MOV DI,NUMB 指令和 LEA DI,NUMB 指令的操作 答 :MOV 将变量的值存入 DI,LEA 取偏移地址存入 DI
习题 43: 写一个短程序, 用 XLAT 指令将 BCD 码数字 0~9 转换为 ASCII 数字 30H~39H ASCII 存在数据段的 TABLE 表中 关于 XLAT 指令, 详见课本 P100 第四章 参考答案 : 补充题 1: 指令 AND AX, 7315H AND 0FFH 中, 两个 AND 有什么区别? 这两个 AND 操作分别在什么时候执行?
第四章 补充题 2: 设计指令序列, 将字符 $ 送入附加段中偏移地址为 0100H 的连续 10 个单元中 参考答案 :
第四章
习题 5: 设计短指令序列, 累加 AL BL CL DL 和 AH, 结果存入 DH 参考答案 : 第五章 习题 13: 若 DL=0F3H,BH=72H, 列出从 DL 减去 BH 内容之后的差, 并给出标志寄存器各位的内容
习题 19: 当两个 16 位数相乘时, 积放在哪两个寄存器中? 指出哪个存放高有效位, 哪个存放低有效位 关于乘法指令, 详见课本 P122-124 答案 :DX 存放积的高有效位,AX 存放积的低有效位 第五章 习题 37: 设计一个短指令序列,AX 和 BX 中的 8 位 BCD 数加 CX 和 DX 的 8 位 BCD 数,(AX 和 CX 是最高有效寄存器 ), 结果存入 CX 和 DX 中 关于 BCD 数加法, 详细可见课本 P127 注意 :DAA 指令只对 AL 寄存器的结果进行调整, 所以加法每次只能做 8 位, 且需要注意保护 AX 的原先的值, 建议没有弄明白的同学仔细研读课本 P127 的例 5-18 参考答案 :
习题 55: 设计指令序列, 为了检索 66H, 扫描位于数据段内的 300 个字节长的存储区 LIST 关于串扫描指令 SCAS 和不等于则重复指令 REPNE, 详见课本 P137 66H 为一个字节, 故使用 SCASB 指令 参考答案 : 第五章 补充题 1: 指出下列指令哪些是错误的, 错在什么地方? (1)ADD AL, AX ; 寄存器长度不一 (2)ADD 8650H, AX; 立即数不能作为 ADD 的目的数 (3)ADD DS, 0200H; 段寄存器不能作为 ADD 操作数 (4)ADD [BX], [1200H];ADD 不支持 mem->mem 的操作 (5)ADD IP, 0FFH;IP 不能作为 ADD 的操作数 (6)ADD [BX+SI+3],IP;IP 不能作为 ADD 的操作数 (8)INC [BX]; 对于间接寻址的 INC 指令, 数据长度必须用 BYTE PTR 一类的伪指令说明, 汇编程序不能确定是对字节 字还是双字加 1
补充题 2: 写一个短指令序列, 要求计算 BL 和 CL 中的数据的平方和 ; 在计算开始前, 将 5 和 6 分别装入 BL 和 CL 寄存器 ; 结果存放在 DL 寄存器中 有同学使用了 IMUL 指令的双操作数形式, 但是要注意双操作数的 IMUL 指令为 IMUL r16/r32, r16/r32/m16/m32/i, 不能使用 8 位寄存器 参考答案 : 第五章 补充题 3: 设计短指令序列, 将 AL 中奇数位的值均为 1, 偶数位的值均为 0, 并将 AH 中的位取反 请考虑各种位运算指令 参考答案 ( 不唯一 ):
习题 11: 比较 JMP DI 与 JMP [DI] 指令的操作 答 :JMP DI, 将 DI 的内容复制到指令地址寄存器中, 由此改变指令执行次序 ;JMP [DI] 则是将 DI 指向的内存单元中的内容复制到指令地址寄存器中, 实现跳转 有关无条件转移指令 JMP, 详见课本 P141-145 第六章 习题 25: 解释 LOOPE 指令如何操作? 详见课本 P148
第六章 习题 27: 设计指令序列, 在 100H 字节的存储块内检索, 这个程序必须统计所有高于 42H 的无符号数的数目和低于 42H 的无符号数的数目, 高于 42H 的计数值放在数据段存储单元 UP, 低于 42H 的放在 DOWN 建议综合使用 SCASB 指令和 LOOP 指令 参考答案 :
第六章 习题 41: 写出求 EAX EBX ECX 和 EDX 之和的过程 若出现进位, 将逻辑 1 放入 EDI, 若不出现, 将 0 放入 EDI, 程序执行之后, 和要放在 EAX 中 主要考察 JNC 指令和过程编写.
习题 47:IRET 指令与 RET 指令有什么区别 RET 指令详见课本 P156,IRET 指令详见课本 P158-159. 参考答案 : 第六章 补充题 1 下列程序段执行完成后, 程序转移到了哪里? 程序 1: 运算结果没有溢出,OF=0, 跳转 L1 程序 2: 运算结果没有产生最高位借位,CF=0, 跳转 L3
.586.model flat, C.stack 1024.code public Abs Abs proc uses ebx, \ absdata: dword mov eax, absdata test eax, 80000000H jz over xor ebx, ebx sub ebx, eax mov eax, ebx over: ret Abs endp end
ADDLIST MARCO PARA1, PARA2 LOCAL ADD1 PUSH SI PUSH DI PUSH CX MOV SI, OFFSET PARA1 MOV DI, OFFSET PARA2 ADD1:MOV AL, [SI] ADD AL, [DI] MOV [SI], AL INC SI INC DI LOOP ADD1 POP CX POP DI POP SI ENDM
A 16 G2A G2B G1 A 17 A 18 A 19
D0 D1 D2 D3 D4 D5 D6 D7 RD WR A0 A1 RESET CS PA0 PA1 PA2 PA3 PA4 PA5 PA6 PA7 PB0 PB1 PB2 PB3 PB4 PB5 PB6 PB7 PC0 PC1 PC2 PC3 PC4 PC5 PC6 PC7 I I I I I I I I I I I I/CLK VCC I/O I/O I/O I/O I/O I/O I/O I/O I/O I/O A0 A3 A4 A5 A6 A7 A8 A9 A10 A11 A12 A13 A14 A15 AD RESET A2 A1 IOWC IORC D7~D0 Z 0 3 8 0/2/4/6 0000 0011 1000 0xx0
library ieee; use ieee.std_logic_1164.all; entity DECODER_11_31 is port ( Z, A11, A10, A9, A8, A7, A6, A5, A4, A3, A0: in STD_LOGIC; AD: out STD_LOGIC ); end; architecture V1 of DECODER_11_31 is begin AD <= not ( Z and not A11 and not A10 and A9 and A8 and A7 and not A6 and not A5 and not A4 and not A3 and not A0 ); end V1;
TEST_PC4 PROC NEAR.REPEAT IN AL, PORTC TEST AL, 10H.UNTIL!ZERO? RET TEST_PC4 ENDP
12.27 ~INTA NMI ~INTA INTR D7~D0
a)frog REAL8 23.44 b)data3 DD -123 c)data1 DD -23.8 d)data2 REAL8?
L DD 4 W DD 5 A DD 0 AREA PROC NEAR FLD L FLD W FMUL FSTP A AREA ENDP