微机原理与接口技术课后部分习题参考答案第一章
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. 合, 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.
段定义,包括数据段,堆栈段,代码段等。数据及变量定义,约定段寄存器与段名的映射,代码段开始,代码段编程,代码段结束,汇编程序结束等。
(2)略(3)略(4)略。
3. DS 可以与BX,SI,DI等组合, ES可以与BX,SI,DI等组合,串指令约定与DI组合。 CS只与IP组
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],(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不是地址寄存器
BX??
(8)MOV [BP][SI],100 ;源是立即数,相对基址加变址寻址
错,应该是MOV WORD[SI+BP],100 ; 说明是字或字节
15. 已知:SS=0FF10H, SP=00A0H.???????????????
将8057H和0F79H入栈,再弹出一个数,画出堆栈区的变化。程序举例:MOV AX, FF10HMOV SS, AXMOV AX, 00A0HMOV SP,AXMOV AX, 8057HPUSH AXMOV AX, 0F79HPUSH AXPOP BX
答:已知SS+SP=FF100+00A0=FF1A0H 结果SP=009EH
入堆栈时, 堆栈指针SP先减2,再压栈
出堆栈时, 先弹出2个字节的,然后堆栈指针SP加2
栈的数据:
??????????????
FF198FF19AFF19C 0F79FF19E 0557
FF1A0 ;栈底或用字节地址看FF199FF19AFF19B 0FFF19C 79FF19D 05FF19E 57FF19F
FF1A0 ;栈底
23.试编程序。将内存从40000H到4AFFFH的每个单元中均写入20H,再逐个单元读出比较,看写入的与读出的是否一致。若全对,则将AL置0FFH;只要有错,则将AL置00H。?????
参考程序:(仅提供小汇编语句)MOV AX,4000H MOV DS, AX MOV BX,0 MOV CX, AFFFH
???????????
MOV AL, 20HL1: MOV [BX], AL CMP [BX], AL JNZ ERROR INC BX DEC CX JNZ L1 MOV AL,FFH JMP END1ERROR: MOV AL,0END1: RET
20.按下列要求编写指令序列
???????????????????????????
1)清除DH中的最低三位而不改变其他位,结果存入DL中; AND DH, F8H MOV DL,DH
2)把DI中的最高4位置1而不改变其他位; OR DI, F000H
3)把AX中的0-3位置1,7-9位取反,13-15位置0; OR AX, 000FH
XOR AX, 00000011 10000000B ;用二进制表示数 AND AX, 00011111 11111111B
4)测试BX中的第2、5和9位中是否有一位为1;TEST BX, 00000010 00100100BJZ 全0
否则, 结果非0表示至少有一个1
5)测试CX中的第1、6和11位是否同时为1;MOV AX, CX
AND AX, 00001000 01000010BCMP AX, 00001000 01000010B
JE 等于转,表示 3位全为1。
6)测试AX中的第0、2、9和13位中是否有一位为0;AND AX,00100010 0000 0101; 只看这4位XOR AX, 0010 0010 0000 0101 JZ ; 说明是全1,没有0至少1个0
7)测试DX中的第1、4、11和14位是否同时为0;MOV AX, DX
AND AX, 01001000 00010010BJZ =0
23.试编程序。将内存从40000H到4AFFFH的每个单元中均写入20H,再逐个单元读出比较,看写入的与读出的是否一致。若全对,则将AL置0FFH;只要有错,则将AL置00H。
????????????????
参考程序:(仅提供小汇编语句)MOV AX,4000H MOV DS, AX MOV BX,0 MOV CX, AFFFH MOV AL,20HL1: MOV [BX], AL CMP [BX], AL JNZ ERROR INC BX DEC CX JNZ L1 MOV AL,FFH JMP END1ERROR: MOV AL,0END1: RET
24.设变量单元A、B、C存放有3个数,若3个数都不为零,则求3个数的和,存放在D中;若有一个零,则将其余两个也清零,试编写程序。???????
答: 先用机器指令编程(用小汇编编程)
实现此功能的程序方法很多,这里只举一个简单直观的例子。设:变量A、B、C变量存放在1000H开始的单元中,即:变量A存放在当前段的1000H单元,变量B在 变量C在
1001H单元,1002H单元。
结果D的地址为 1003H单元。
?MOV BX,1000H
MOV AL, [BX]
CMP AL,0 ;第一个数A=0?
??????????????
JNZ L1 ;非0 转
MOV [BX+1], AL ;其余2个清0 MOV [BX+2], AL JMP END1
L1: MOV AL,[BX+1] ;;第2个数B=0? CMP AL,0
JNZ L2 ;非0 转 MOV [BX], AL MOV [BX+2], AL JMP END1
L2 : MOV AL,[BX+2] ;第3个数C=0? CMP AL,0
JNZ L3 ;非0 转 MOV [BX], AL
相关推荐: