微机原理与接口技术课后习题答案清华大学出版社Word格式.doc
《微机原理与接口技术课后习题答案清华大学出版社Word格式.doc》由会员分享,可在线阅读,更多相关《微机原理与接口技术课后习题答案清华大学出版社Word格式.doc(9页珍藏版)》请在冰点文库上搜索。
![微机原理与接口技术课后习题答案清华大学出版社Word格式.doc](https://file1.bingdoc.com/fileroot1/2023-4/29/4bcbb2ad-8144-4059-8ba3-046719a54237/4bcbb2ad-8144-4059-8ba3-046719a542371.gif)
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];
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
•POPBX
•答:
已知SS+SP=FF100+00A0=FF1A0H
•结果SP=009EH
•入堆栈时,堆栈指针SP先减2,再压栈
•出堆栈时,先弹出2个字节的,然后堆栈指针SP加2
栈的数据:
•FF198
•FF19A
•FF19C0F79
•FF19E0557
•FF1A0;
栈底
•或用字节地址看
•FF199
•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:
RET
20.按下列要求编写指令序列
•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=0
•MOVAX,4000H
•MOVDS,AX
•MOVBX,0
•MOVCX,AFFFH
•MOVAL,20H
MOV[BX],AL
•CMP[BX],AL
•JNZERROR
•INCBX
•DECCX
•JNZL1
•MOVAL,FFH
•JMPEND1
RET
24.设变量单元A、B、C存放有3个数,若3个数都不为零,则求3个数的和,存放在D中;
若有一个零,则将其余两个也清零,试编写程序。
先用机器指令编程(用小汇编编程)
•实现此功能的程序方法很多,这里只举一个简单直观的例子。
•设:
变量A、B、C变量存放在1000H开始的单元中,即:
•变量A存放在当前段的1000H单元,
•变量B在1001H单元,
•变量C在1002H单元。
•结果D的地址为1003H单元。
•MOVBX,1000H
MOVAL,[BX]
CMPAL,0;
第一个数A=0?
•JNZL1;
非0转
•MOV[BX+1],AL;
其余2个清0
•MOV[BX+2],AL
•JMPEND1
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?
•JNZL3;
•MOV[BX],AL
•MOV[BX+1],AL
•JMPEND1
•L3:
MOVAL,[BX];
3个数都不为零,求3个数的和
•ADDAL,[BX+1]
•ADDAL,[BX+2]
•MOV[BX+3],AL
INT3;
结束,断点,停在此
26.试编写程序,统计由40000H开始的16K个单元中所存放的字符A的个数,并将结果存放在DX中。
•MOVAX,4000H
•MOVDS,AX
•MOVBX,0
•MOVCX,4000H;
16K个数
•MOVDX,0;
用DX记录A的个数
MOVAL,[BX]
•CMPAL,41H;
CMPAL,’A’
•JNZL2
•INCDX;
累加器+1
•L2:
INCBX
•DECCX;
(LOOPL1)
•JNZL1
30题。
键盘输入10个数,变成密码后存到BUFF缓冲区去
设密码缓冲区首地址=120H,加密后的数字缓冲区BUFF首地址=130H(仅提供小汇编语句)
•MOVSI,120H;
密码缓冲区首地址=120H
•MOVDI,130H;
加密后的数字缓冲区首地址=130H
•MOVCX,0AH;
共10个数字
•MOVBX,0;
偏移地址清0
•10CMOVAH,1
•INT21H;
等待输入一个数字
•CMPAL,0DH;
是回车?
•JZEND1
•ANDAL,0FH;
留下低4位
•MOVBL,AL
•MOVAL,[SI+BX];
取1个数字的密码
•MOV[DI],AL;
送加密缓冲区
•INCDI
•DECCX
•JNZ10C
•END1:
INT3;
结束
•120DB7591368024
第五章169页
1.因为引脚不够,采用了复用技术,在外部必须用锁存器分开地址和数据线。
主要是地址信息。
2.MEMR=1,MEMW=0,IOR=1,IOW=1.。
反之,MEMR=0,MEMW=1,IOR=1,IOW=1。
3.地址数据线分时用,还有S0-S6,主要解决引脚不够的问题。
4.总线周期包括4个时钟周期,但存储器速度慢时,需要插入等待周期Tw。
插入多少个由存储器的读写时间来决定。
一般是1-2个。
5.复位后,只有CS=ffffh,其余都是0,系统从FFFF:
0000=FFFF0H单元开始执行。
第六章191页
1.尽管E2PROM速度已经很快,但还是跟不上CPU随机读写的速度,另外,E2PROM是快写,不能当RAM用。
2.E2PROM是电信号擦除,擦写速度快,可以在线擦除与改写。
EPROME是紫外线擦除,需要从电路板上取下来,紫外光照射10分钟,用专门的编程工具才能编程。
E2PROM的优点是可以在线编程,编程速度快,但容易被病毒利用。
计算机BIOS必须放在EPROME中,才能避免病毒破坏。
3.正比关系。
5.译码电路。
7.如果少用最高位2根地址线,重复空间有22=4块,。
少用x根地址线,重复空间有2x块。
。
9.
(1)需128片。
10.
11.
12.
13.MOVAX,[2001H]不好,多用一个总线周期。
慢。
14.
15.A1A0不参加译码。
16.2,4,8字节。
第八章
23题MOVAL,36H,OUTD3H,AL
MOVAX,0064H,OUTD0H,AL,MOVAL,AH,OUTD0H,AL
MOVAL,B0H,OUTD3H,AL
MOVAX,0032H,OUTD2H,AL,MOVAL,AH,OUTD2H,AL
24题可以用中断方式或程序控制方式实现。
如果用程序控制方式,假设8255的A口接8个指示灯,B口PB7位做8254定时时间到的OUT输出线,设8255的口地址=60H,设8254的口地址=40H,
设用8254的计数器1,工作在方式3方波发生器,已知CLK1=1000HZ,即Tclk=1/1000=1ms,希望输出T=1s,分频系数=该是1msx1000=1s。
主程序:
MOVAL,82H;
8255编程,A方式0出,B方式0入,C出;
OUT63H,AL;
MOVAL,77H,OUTD3H,AL;
8254计数器1方式3;
BCD计数;
MOVAX,1000H,OUTD1H,AL;
MOVAL,AH,OUTD1H,AL
MOVBL,01H
L1:
INAL,61H
ANDAL,80H;
JZL1;
=0等待
L2:
MOVAL,BL;
=1,输出1个灯亮
OUT60H,AL;
一个灯亮
ROLBL,1;
左循环移1位
L3:
INAL,61H;
ANDAL,80H
JNZL3;
=1等待
JMPL1;
27题,异步方式每个字节都需要加起始位、停止位等,传输效率就低了,单位时间传输的字符数就就低了。
同步方式每个字节可以不要起始位、停止位及校验位,直接连续传数据,效率高。
单位时间内传输的字节数就多了。
28题,先运行接收方程序。
29题,(仅供参考,基本意思到位就可以了,是否先复位等不要紧)
MOVCX,3
MOVAL,0
ST1:
OUT52H,AL;
先送3个0,复位
DECCX
JNZST1
MOVAL,40H
OUT52H,AL;
复位8251
MOVAL,11111010B;
2停止位,偶校验,7位数据,波特率因子16
OUT52H,AL
MOVAL,00010111B;
出错标志复位,允许接受,数据准备好,允许发送。
30题、已知一秒钟传输1200bps/10位格式=120Byte,传1024字节需要1024/120B=8.53秒。
第九章
1题、显示“5”的7段码是1011011=5BH
2题,这道题不用改了,原题不好。
打个半对就行了。
3题。
(仅供参考方法不唯一,基本意思到位就可以了)
L1:
INAL,20H
CMPAL,0;
有按键?
没有就等待
JZL1
INAL,20H;
取来按键的键号
MOVCX,8;
共8个键
MOVBL,1;
初值1
L2:
SHRAL,1;
右移一位,最低位到进位位。
JCL3;
INC