微机原理与接口技术课后习题答案_清华大学

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

微机原理与接口技术课后部分习题参考答案第一章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)DB20,20DUP(0)(2)DB“Thecourseiseasy”,0(3)DB“hello….!!!!!”,0dh,0ah,”$”(4)DW100DUP(0)11.数据定义语句表示,16进制书写。寻址方式包括立即数、直接、间接寻址等多种。逻辑地址。12.指令格式包括操作码、操作数(或地址)两部分,这里的操作数不一定就是要处理的那个数据,也可以是那个数据的地址或寄存器等,是找到那个数的寻址方式。而参加操作的数据就是指具体的数据。13.判断操作数的寻址方式是否正确?说明原因。•(1)[AX];例如MOVBL,[AX];错,AX不是地址寄存器•(2)BP;例如MOVAX,BP;正确,寄存器寻址•(3)[SI+DI];例如MOVAL,[SI+DI]错,不能有2个变址寄存器•(4)[SP];例如MOVAL,[SP],错,不能用堆栈指针,堆栈指针只能由堆栈指令操作•(5)CS;例如MOVAX,CS;正确,寄存器寻址•(6)BH;例如MOVAL,BH;正确,寄存器寻址•(7)[BX+BP+32];例如MOVAL,[BX+BP+32];错,不能有2个基地址寄存器•(8)[BL+44];例如MOVAL,[BL+44];错,BL不是完整的地址寄存器•(9)[CX+90];例如MOVAL,[CX+90];错,CX不是地址寄存器•(10)[DX];例如MOVAL,[DX];错,DX不是地址寄存器•(11)BX+90H;例如MOVAX,BX+90H;错,不能加•(12)[BX*4];例如MOVAL,[BX*4];错,不能乘•(13)SI[100H];例如MOVAX,SI[100H];正确,相对变址寻址,但写法不好,最好是MOVAX,[SI+100H],MOVAX,100[SI]•(14)[DX+90H];例如MOVAX,[DX+90H];错,DX不是地址寄存器14题•假定DS=2000H•ES=2100H•SS=1500H•SI=00A0H•BX=0100H•BP=0010H•数据变量wVald的偏移地址为0050H•指出下列指令源操作数的寻址方式?•(1)MOVAX,0ABH;立即数寻址•(2)MOVAX,[100H];直接寻址•(3)MOVAX,wVald;直接寻址,等于MOVAX,[0050H]•(4)MOVBX,[SI];寄存器间接寻址•(5)MOVAX,wVald[BX];相对寄存器寻址,等于MOVAX,[BX+0050H]•(6)MOVCL,[BX][SI];基址加变址寻址•(7)MOVwVald[SI],BX;源是寄存器寻址,目是相对基址加变址寻址,等于MOV[SI+0050H],BX•(8)MOV[BP][SI],100;源是立即数,相对基址加变址寻址•错,应该是MOVWORD[SI+BP],100;说明是字或字节15.已知:SS=0FF10H,SP=00A0H.•将8057H和0F79H入栈,再弹出一个数,画出堆栈区的变化。•程序举例:•MOVAX,FF10H•MOVSS,AX•MOVAX,00A0H•MOVSP,AX•MOVAX,8057H•PUSHAX•MOVAX,0F79H•PUSHAX•POPBX•答:已知SS+SP=FF100+00A0=FF1A0H•结果SP=009EH•入堆栈时,堆栈指针SP先减2,再压栈•出堆栈时,先弹出2个字节的,然后堆栈指针SP加2栈的数据:•FF198•FF19A•FF19C0F79•FF19E0557•FF1A0;栈底•或用字节地址看•FF199•FF19A•FF19B0F•FF19C79•FF19D05•FF19E57•FF19F•FF1A0;栈底23.试编程序。将内存从40000H到4AFFFH的每个单元中均写入20H,再逐个单元读出比较,看写入的与读出的是否一致。若全对,则将AL置0FFH;只要有错,则将AL置00H。•参考程序:(仅提供小汇编语句)•MOVAX,4000H•MOVDS,AX•MOVBX,0•MOVCX,AFFFH•MOVAL,20H•L1:MOV[BX],AL•CMP[BX],AL•JNZERROR•INCBX•DECCX•JNZL1•MOVAL,FFH•JMPEND1•ERROR:MOVAL,0•END1:RET20.按下列要求编写指令序列•1)清除DH中的最低三位而不改变其他位,结果存入DL中;•ANDDH,F8H•MOVDL,DH•2)把DI中的最高4位置1而不改变其他位;•ORDI,F000H•3)把AX中的0-3位置1,7-9位取反,13-15位置0;•ORAX,000FH•XORAX,0000001110000000B;用二进制表示数•ANDAX,0001111111111111B•4)测试BX中的第2、5和9位中是否有一位为1;•TESTBX,0000001000100100B•JZ全0•否则,结果非0表示至少有一个1•5)测试CX中的第1、6和11位是否同时为1;•MOVAX,CX•ANDAX,0000100001000010B•CMPAX,0000100001000010B•JE等于转,表示3位全为1。•6)测试AX中的第0、2、9和13位中是否有一位为0;•ANDAX,0010001000000101;只看这4位•XORAX,0010001000000101•JZ;说明是全1,没有0•至少1个0•7)测试DX中的第1、4、11和14位是否同时为0;•MOVAX,DX•ANDAX,0100100000010010B•JZ=023.试编程序。将内存从40000H到4AFFFH的每个单元中均写入20H,再逐个单元读出比较,看写入的与读出的是否一致。若全对,则将AL置0FFH;只要有错,则将AL置00H。•参考程序:(仅提供小汇编语句)•MOVAX,4000H•MOVDS,AX•MOVBX,0•MOVCX,AFFFH•MOVAL,20H•L1:MOV[BX],AL•CMP[BX],AL•JNZERROR•INCBX•DECCX•JNZL1•MOVAL,FFH•JMPEND1•ERROR:MOVAL,0•END1:RET24.设变量单元A、B、C存放有3个数,若3个数都不为零,则求3个数的和,存放在D中;若有一个零,则将其余两个也清零,试编写程序。•答:先用机器指令编程(用小汇编编程)•实现此功能的程序方法很多,这里只举一个简单直观的例子。•设:变量A、B、C变量存放在1000H开始的单元中,即:•变量A存放在当前段的1000H单元,•变量B在1001H单元,•变量C在1002H单元。•结果D的地址为1003H单元。•MOVBX,1000HMOVAL,[BX]CMPAL,0;第一个数A=0?•JNZL1;非0转•MOV[BX+1],AL;其余2个清0•MOV[BX+2],AL•JMPEND1•L1:MOVAL,[BX+1];;第2个数B=0?•CMPAL,0•JNZL2;非0转•MOV[BX],AL•MOV[BX+2],AL•JMPEND1•L2:MOVAL,[BX+2];第3个数C=0?•CMPAL,0•JNZL3;非0转•MOV[BX],AL•MOV[BX+1],AL•JMPEND1•L3:MOVAL,[BX];3个数都不为零,求3个数的和•ADDAL,[BX+1]•ADDAL,[BX+2]•MOV[BX+3],AL•END1:INT3;结束,断点,停在此26.试编写程序,统计由40000H开始的16K个单元中所存放的字符A的个数,并将结果存放在DX中。(仅提供小汇编语句)•MOVAX,4000H•MOVDS,AX•MOVBX,0•MOVCX,4000H;16K个数•MOVDX,0;用DX记录A的个数•L1:MOVAL,[BX]•CMPAL,41H;CMPAL,’A’•JNZL2•INCDX;累加器+1•L2:INCBX•DECCX;(LOOPL1)•JNZL130题。键盘输入10个数,变成密码后存到BUFF缓冲区去设密码缓冲区首地址=120H,加密后的数字缓冲区BUFF首地址=130H(仅提供小汇编语

1 / 9
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功