微机原理与接口技术课后部分习题参考答案 第一章
2. 第3项任务,状态标志位的状态决定转移方向。
3. 程序存储是将要执行的程序的全部指令存储到存储器中,程序控制指程序开始执行后,通过指令流控制数据或计算机,完成设定的任务。
4. 分BIU 总线接口部件和EI执行部件两大部件,其中总线接口部件BIU负责取指令和数据,执行部件EI负责执行指令及运算。在执行一条指令的同时可以取下一条指令,重叠运行,速度快。
5. 有6个状态标志,分别为进位标志CF、溢出标志OF、零标志ZF、奇偶标志PF、负标志SF、辅助进位标志AF。3个控制标志分别为中断允许标志IF、单步标志TF、方向标志DF。
标志位的内容可以通过标志位操作指令来操作,例如CLC指令清除进位位,即使CF=0,STC指令使CF=1,CLI指令使IF=0,禁止中断,STI指令使IF=1,允许中断。还可以通过LAHF指令取来标识寄存器的内容修改后用SAHF指令送回去。也可以用PUSHF/POPF指令来修改标志寄存器的内容。
6. 实模式下分段靠4个段寄存器实现。段寄存器中的值就是段地址,当偏移地址为0时的段地址+偏移地址就是该段的起始地址。 物理地址是由段地址左移4位后与偏移地址相加形成的20位地址。 7. 说法不一定正确。对顺序执行指令的计算机是对的。对重叠或流水线的计算机就不对了。
例如对8086CPU,由于采用了取指令与执行指令的一次重叠,尽管执行一条指令的总时间并没有变化,但连续执行n条指令时,总的时间会大大缩短,可以简单的比喻成总时间为原时间的二分之一,快了一倍。 8. 引入流水线后,执行一条指令的总时间并没有变化。
9. 高速缓存的目的是提高存储器的速度,进而提高了CPU的速度。虚拟存储器的目的是为了给程序员或程序一个大的存储或运行空间。
10。8086采用总线接口部件BIU与执行部件EU分开提高了速度,286将8086的BIU进一步分成3个部件,提高了并行性。386在286基础上进一步增加成6个逻辑部件,实现多条指令重叠,进一步提高了速度,486采用硬组合逻辑控制器,同时采用内嵌高速缓存,提高速度。Pentium采用多流水技术,指令cache数据cache技术提高速度。都采用扩展地址线数量来扩大容量。 第二章
1. (1)1000:0--1000:FFFFH, 即10000H--1FFFFH.(2)12340--2233FH(3)略(4)略。 2. (1) 逻辑1000H:2000H,物理12000H. (2)略(3)略(4)略。
3. DS 可以与BX,SI,DI等组合, ES可以与BX,SI,DI等组合,串指令约定与DI组合。 CS只与IP组合, SS一般只与SP组合,也可以与BP组合。 4. 便于程序运行空间保护,便于兼容早期的微处理器。
5. 尽管保护模式下的寻址系统有些复杂,但从用户的角度来说,没有什么不同。 6. 描述符包括基地址、界限、访问权限等信息。 7. 页表要映射到20位的物理地址中。
8. 段被访问时,置1,用于统计该段被访次数。这两个A位服务的对象不一样,不多余。 第三章 129页
1. 无符号分离式BCD码。0011表示3, 后面的4位可以是0-9,可以表示ASCII码0-9。
2. 由程序或程序员来定义。数据在计算机中都是用代码来表示的,一个数据(例如00110101)的意义是程序员自己掌握的,程序员把它当做一个字符,就是数字5的ASCII码。如果说他是一个无符号数,就是代表十进制数53,如果说是组合式BCD码,就代表十进制数35。
3. 段定义,包括数据段,堆栈段,代码段等。数据及变量定义,约定段寄存器与段名的映射,代码段开始,代码段编程,代码段结束,汇编程序结束等。
4. 操作符由控制器译码器解释执行,伪操作符由汇编程序(翻译程序)解释执行。
5. 转移指令后的标号是偏移地址。只有当应用该标号的转移指令位置确定后,在该指令地址正负128范围内的标号是短转移,类型是字节,在16位二进制数之内是段内的字类型,超出16位二进制数之外的是段间转移,是双字类型。 6. (1) DB 20, 20 DUP (0)
(2 ) DB “The course is easy ”, 0 (3) DB “hello…. !!!!!”, 0dh,0ah,” $” (4) DW 100 DUP (0)
11. 数据定义语句表示,16进制书写。寻址方式包括立即数、直接、间接寻址等多种。逻辑地址。 12. 指令格式包括操作码、操作数(或地址)两部分, 这里的操作数不一定就是要处理的那个数据,也可以是那个数据的地址或寄存器等,是找到那个数的寻址方式。而参加操作的数据就是指具体的数据。 13. 判断操作数的寻址方式是否正确?说明原因。
? ? ? ? ? ? ? ? ? ? ? ? ? ? 14题
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
假定 DS=2000H ES=2100H SS=1500H SI=00A0H BX=0100H BP=0010H
数据变量wVald的偏移地址为0050H 指出下列指令源操作数的寻址方式? (1)MOV AX, 0ABH ;立即数寻址 (2)MOV AX, [100H] ;直接寻址
(3)MOV AX, wVald ;直接寻址,等于MOV AX, [0050H] (4)MOV BX, [SI] ;寄存器间接寻址
(5)MOV AX, wVald[BX]; 相对寄存器寻址,等于MOV AX, [BX+0050H] (6)MOV CL,[BX][SI] ; 基址加变址寻址
(7)MOV wVald [SI],BX ;源是寄存器寻址, 目是相对基址加变址寻址,等于MOV [SI+0050H],BX (8)MOV [BP][SI],100 ;源是立即数,相对基址加变址寻址 (1)[ AX] ;例如MOV BL, [ AX] ;错,AX不是地址寄存器 (2)BP ;例如 MOV AX , BP; 正确, 寄存器寻址
(3)[SI+DI] ;例如 MOV AL , [SI+DI] 错,不能有2个变址寄存器
(4)[SP] ;例如 MOV AL , [SP], 错,不能用堆栈指针,堆栈指针只能由堆栈指令操作 (5)CS ;例如 MOV AX ,CS; 正确, 寄存器寻址 (6)BH ;例如 MOV AL ,BH; 正确, 寄存器寻址
(7)[BX+BP+32] ;例如 MOV AL , [BX+BP+32]; 错,不能有2个基地址寄存器 (8)[BL+44] ; 例如 MOV AL , [BL+44]; 错,BL不是完整的地址寄存器 (9)[CX+90] ;例如 MOV AL , [CX+90]; 错,CX不是地址寄存器 (10)[DX] ;例如 MOV AL , [DX]; 错,DX不是地址寄存器 (11)BX+90H ;例如 MOV AX , BX+90H; 错,不能加 (12)[BX*4] ; 例如 MOV AL , [BX*4] ;错,不能乘
(13)SI[100H] ;例如MOV AX ,SI[100H]; 正确,相对变址寻址,但写法不好,最好是MOV AX , [SI+100H], MOV AX , 100[SI]
(14)[DX+90H] ;例如 MOV AX , [DX+90H]; 错,DX不是地址寄存器
?
错,应该是MOV WORD[SI+BP],100 ; 说明是字或字节
15. 已知:SS=0FF10H, SP=00A0H. ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ?
23.试编程序。将内存从40000H到4AFFFH的每个单元中均写入20H,再逐个单元读出比较,看写入的与读出的是否一致。若全对,则将AL置0FFH;只要有错,则将AL置00H。 ? ? ? ? ? ? ?
参考程序:(仅提供小汇编语句) MOV AX,4000H
MOV DS, AX MOV BX,0 MOV CX, AFFFH MOV AL, 20H L1: MOV [BX], AL 或用字节地址看 FF199 FF19A FF19B 0F FF19C 79 FF19D 05 FF19E 57 FF19F
FF1A0 ;栈底
将8057H和0F79H入栈,再弹出一个数,画出堆栈区的变化。 程序举例: MOV AX, FF10H MOV SS, AX MOV AX, 00A0H MOV SP,AX MOV AX, 8057H PUSH AX MOV AX, 0F79H PUSH AX POP BX
答:已知SS+SP=FF100+00A0=FF1A0H 结果SP=009EH
入堆栈时, 堆栈指针SP先减2,再压栈
出堆栈时, 先弹出2个字节的,然后堆栈指针SP加2 FF198 FF19A
FF19C 0F79 FF19E 0557
FF1A0 ;栈底
栈的数据: