技术微型计算机原理与接口技术课后答案资料.docx
《技术微型计算机原理与接口技术课后答案资料.docx》由会员分享,可在线阅读,更多相关《技术微型计算机原理与接口技术课后答案资料.docx(19页珍藏版)》请在冰豆网上搜索。
技术微型计算机原理与接口技术课后答案资料
【关键字】技术
15.已知:
在内存BUF开始的单元中,存在一串数据:
58,75,36,42,89。
编程找出其中的最小值存入MIN单元中,并将这个数显示在屏幕上。
解:
STACKSEGMENTSTACK
DB100DUP(?
)
STACKENDS
DATASEGMENT
BUFDB58H,75H,36H,42H,89H
MINDB0
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,SS:
STACK
START:
PUSHDS
MOVAX,DATA
MOVDS,AX
MOVCX,4
MOVBX,OFFSETBUF
MOVAL,[BX]
ST1:
INCBX
CMPAL,[BX]
JBENEXT
MOVAL,[BX]
NEXT:
LOOPST1
MOVMIN,AL
ANDAL,0F0H
MOVCL,4
RORAL,CL
ADDAL,30H
MOVDL,AL
MOVAH,02H
INT21H
MOVAL,MIN
ANDAL,0FH
ADDAL,30H
MOVDL,AL
MOVAH,02H
INT21H
POPDS
MOVAH,4CH
INT21H
HLT
CODEENDS
ENDSTART
18.某班有20个同学的微机原理成绩存放在LIST开始的单元中,要求编程先从高到低的次序排列好,再求出总分和平均值,分别存放在SUM和AVER开始的单元中。
解:
STACKENDS
DATASEGMENT
LISTDB65H,76H,78H,54H,90H,85H,68H,66H,77H,88H
DB99H,89H,79H,69H,75H,85H,63H,73H,83H,93H
SUMDW0
AVERDB0
BUFDB100DUP(?
)
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,SS:
STACK
START:
PUSHDS
MOVAX,DATA
MOVDS,AX
MOVDI,OFFSETLIST
MOVBX,19
LP0:
MOVSI,DI
MOVCX,BX
LP1:
MOVAL,[SI]
INCSI
CMPAL,[SI]
JNCLP2
MOVDL,[SI]
MOV[SI-1],DL
MOV[SI],AL
LP2:
LOOPLP1
DECBX
JNZLP0
LP3:
MOVCX,20
MOVBX,OFFSETLIST
MOVSUM,0
XORAX,AX
LP4:
ADDAL,[BX]
DAA
ADCAH,0
INCBX
LOOPLP4
MOVSUM,AX
MOVBL,20H
DIVBL
ADDAL,0
DAA
MOVAVERAL
POPDS
HLT
CODEENDS
ENDSTART
20.编程将存放在AL中的无符号二进制数,转化成十六进制数,再转换成ASII码并显示在屏幕上。
解:
程序如下:
STACKSEGMENTSTACK
DB100DUP(?
)
STACKENDS
DATASEGMENT
DB100DUP(?
)
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,SS:
STACK
START:
PUSHDS
MOVAX,DATA
MOVDS,AX
MOVDH,AL
MOVCH,02H
ST1:
MOVCL,4
RORDH,CL
MOVAL,DH
ANDAL,0FH
ADDAL,30H
CMPAL,39H
JBEDISP
ADDAL,07H
DISP:
MOVDL,AL
MOVAH,02H
INT21H
DECCH
JNZST1
POPDS
MOVAH,4CH
INT21H
HLT
CODEENDS
ENDSTART
21.编写程序,使用三种以上的方法,将存储器中2000H开始的地址单元中的100字节数据复制到3000H开始的存储器地址单元中。
解:
(1)利用通用传送指令MOV
MOVSI,2000H注意这里如果是标号地址,则必须用OFFSET
MOVDI,3000H
MOVCX,100
LP1:
MOVAL,[SI]
MOV[DI],AL
INCSI
INCDI
LOOPLP1
HLT
MOVCX,100
MOVBX,0
LP0:
MOVAL,2000[BX]
MOV3000[BX],AL
INCBX
LOOPLP0
HLT
(2)利用交换指令XCHG
MOVSI,2000H
MOVDI,3000H
MOVCX,100
LP2:
MOVAL,[SI]
XCHG[DI],AL
INCSI
INCDI
LOOPLP2
HLT
(3)利用换码指令XLAT
MOVBX,2000H
MOVDI,3000H
MOVCX,100
LP3:
XORAL,AL
XLAT
MOV[DI],AL
INCBX
INCDI
LOOPLP3
HLT
(4)利用堆栈实现数据传送
MOVSI,2000H
MOVDI,3000H
MOVCX,50
LP4:
PUSH[SI]
POP[DI]
INCSI
INCSI
INCDI
INCDI
LOOPLP4
HLT
(5)利用串操作指令REPMOVSB
MOVSI,2000H
MOVDI,3000H
MOVCX,100
CLD;DF=0,SI、DI自动+1
REPMOVSB
HLT
5.对于下面的数据定义,各条MOV指令执行后,有关寄存器的内容是什么?
DA1DB?
DA2DW10DUP(?
)
DA3DB‘ABCD’
MOVAX,TYPEDA1
MOVBX,SIZEDA2
MOVCX,LENGTHDA3
解:
各条MOV指令执行后,有关寄存器的内容如下:
MOVAX,TYPEDA1;(AX)=1
MOVBX,SIZEDA2;(BX)=20
MOVCX,LENGTHDA3;(CX)=1
下段程序完成后,AH等于什么?
INAL,5FH
TESTAL,80H
JZL1
MOVAH,0
JMPSTOP
L1:
MOVAH,0FFH
STOP:
HLT
如果地址为5FH的外设输入到AL中的数据的最高位=1,则(AH)=0,否则,(AH)=0FFH。
设置8259的中断向量
MOVAX,SEGIRQ2
MOVDS,AX
MOVDX,OFFSETIRQ2
MOVAL,42H
MOVAH,25H
INT21H
;8259初始化
MOVAL,13H;ICW1边沿触发,单片8259,有ICW4
OUT20H,AL
MOVAL,40H;ICW2中断类型号基值为40H
OUT21H,AL
MOVAL,01H;ICW48088系统,普通EOI,;完全嵌套式
OUT21H,AL
MOVAL,0FDH
OUT21H,AL;OCW1,设置IMR,中断屏蔽
微处理器CPU:
控制微处理器与存储器或I/O设备间的数据交换;进行算术和逻辑运算等操作;判定和控制程序流向。
微处理器主要完成:
(1)指令控制:
从存储器中取指令,指令译码;
(2)数据加工:
简单的算术逻辑运算;
(3)操作控制:
在微处理器和存储器或者I/O之间传送数据;
(4)时间控制:
程序流向控制。
存储器:
用来存放数据和指令。
I/O接口:
主机和外设间的桥梁,提供数据缓冲驱动、信号电平转换、信息转换、地址译码、定时控制等各种功能。
I/O设备:
输入原始数据和程序,转换成计算机能识别的信息,送入存储器去等待处理。
输出运算结果。
总线:
连接计算机系统中各功能部件的信息通道。
13.设CS=1200H,IP=0100H,SS=5000H,SP=0400H,DS=2000H,SI=3000H,BX=0300H,(20300H)=4800H,(20302H)=00FFH,TABLE=0500H,PROG_N标号的地址为1200:
0278H,PROG_F标号的地址为3400:
0ABCH。
说明下列每条指令执行完后,程序分别转移到何处执行?
JMP指令
(1)JMPPROG_N
段内直接近转移,目的地址为1200H:
0278H(或12278H)
(2)JMPBX
段内寄存器间接转移,目的地址为1200H:
0300H(或12300H)
(3)JMP[BX]
物理地址=DS×10H+BX=2000H×10H+0300H=20300H
(20300H)=4800H→IP
段内存储器间接转移,目的地址为1200H:
4800H(或16800H)
(4)JMPFARPROG_F
段间直接转移,目的地址为3400H:
0ABCH(或34ABCH)
(5)JMPDWORDPTR[BX]
物理地址=DS×10H+BX=2000H×10H+0300H=20300H
(20300H)=4800H→IP,(20302H)=00FFH→CS
段间存储器间接转移,目的地址为00FFH:
4800H(或057F0H)
JMP改为CALL后,目的地址与JMP相同。
(1)CALLPROG_N
段内直接调用,3字节指令,目的地址为1200H:
0278H(或12278H),0103H入栈,SP=03FEH
(2)CALLBX
段内寄存器间接调用,2字节指令,目的地址为1200H:
0300H(或12300H),0102H入栈,SP=03FEH
(3)CALL[BX]
段内存储器间接调用,2字节指令,目的地址为1200H:
4800H(或16800H),0102H入栈,SP=03FEH
(4)CALLFARPROG_F
段间直接调用,5字节指令,目的地址为3400H:
0ABCH(或34ABCH),1200H和0105H分别入栈,SP=03FCH
(5)CALLDWORDPTR[BX]
段间间接调用,2字节指令,目的地址为00FFH:
4800H(或057F0H),1200H和0102H分别入栈,SP=03FCH
12.编程实现,从键盘输入一个十进制数0~9,查表求键入数字的七段代码(共阳极LED显示器的段码),存入DL中,并在键入数字之前,显示提示信息“Pleaseinputanumber(0~9):
”。
STACKSEGMENTSTACK
DB100DUP(?
)
STACKENDS
DATASEGMENT
TABLEDB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
BUFDB'Pleaseinputonenumber(0~9):
',0DH,0AH,'$'
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,SS:
STACK,ES:
DATA
START:
PUSHDS
MOVAX,DATA
MOVDS,AX
MOVDX,OFFSETBUF
MOVAH,09H
INT21H
MOVAH,1
INT21H
ANDAL,0FH
MOVBX,OFFSETTABLE
XLAT
MOVDL,AL
POPDS
HLT
CODEENDS
ENDSTART
数字5的共阳极LED七段码为92H。
22.在DATA开始的4个单元中存放着一个32位数,求出其中的“1”的个数,并存入COUNT单元中。
解:
DATASEGMENT
DATA1DB0FEH,86H,7CH,35H
COUNTDB00H
DATAENDS
STACKSEGMENT
DB100DUP(?
)
STACKENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,SS:
STACK
START:
PUSHDS
MOVAX,DATA
MOVDS,AX
MOVAX,STACK
MOVSS,AX
MOVSI,OFFSETDATA1
MOVBX,[SI]
MOVDX,[SI+2]
MOVCX,32
XORAL,AL
LP1:
RCRDX,1
RCRBX,1
JNCLP2
INCAL
LP2:
LOOPLP1
MOVCOUNT,AL
POPDS
MOVAH,4CH
INT21H
HLT
CODEENDS
ENDSTART
10.编制两个通用过程,完成两位十六进制数转换成ASCII码,并将ASCII码字符显示。
(1)两位十六进制数转换成ASCII码
设两位十六进制数存放在DL中,输出的ASCII码存放在BX中。
CONPROC
PUSHAX
PUSHCX
MOVCL,4
MOVAL,DL
ANDAL,0FH
CMPAL,0AH
JNCLP1
ADDAL,30H
JMPLP2
LP1:
ADDAL,37H
LP2:
MOVBL,AL
MOVAL,DL
SHRAL,CL
ANDAL,0FH
CMPAL,0AH
JNCLP3
ADDAL,30H
JMPLP4
LP3:
ADDAL,37H
LP4:
MOVBH,AL
POPCX
POPAX
RET
CONENDP
四位十六进制数转换成ASCII码,
设四位十六进制数存放在存储器BUF1单元中,输出的ASCII码存放在存储器BUF2开始的单元中。
CONPROC
PUSHAX
PUSHCX
PUSHDX
MOVDI,OFFSETBUF2
MOVSI,OFFSETBUF1
MOVCL,4
MOVDH,4
MOVDX,[SI]
LP1:
ROLDX,CL
MOVAL,DL
ANDAL,0F
ADDAL,30H
CMPAL,3AH
JCLP2
ADDAL,07H
LP2:
MOV[DI],AL
INCDI
DECCH
JNZLP1
POPDX
POPCX
POPAX
RET
CONENDP
(2)ASCII码字符显示
设2个ASCII码字符在BX中。
DISPPROC
PUSHAX
MOVDL,BL
MOVAH,2
INT21H
MOVDL,BH
INT21H
POPAX
RET
DISPENDP
13.将键盘上输入的一位为十六进制数转换成十进制数,在屏幕上显示。
DATASEGMENT
DATA1DB10DUP(?
)
DATA2DB10DUP(?
)
DATAENDS
STACKSEGMENTSTACK
DB100DUP(?
)
STACKENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,SS:
STACK
START:
PUSHDS
MOVAX,DATA
MOVDS,AX
KEY:
MOVAH,1
INT21H
ZH:
CMPAL,3AH
JAEZH1
SUBAL,30H
JMPZH2
ZH1:
SUBAL,37H
ADDAL,0
DAA
ZH2:
MOVBL,AL
ANDAL,0F0H
MOVCL,4
SHRAL,CL
ADDAL,30H
MOVBH,AL
MOVAL,BL
ANDAL,0FH
ADDAL,30H
MOVBL,AL
DISP:
MOVDL,BH
MOVAH,2
INT21H
MOVDL,BL
MOVAH,2
INT21H
POPDS
MOVAH,4CH
INT21H
HLT
CODEENDS
ENDSTART
22.编程序统计学生的数学成绩,分别归类90~99分,80~89分,70~79分,60~69分及60分以下,并将各段的人数送入内存单元中。
解:
STACKSEGMENT
DB100DUP(?
)
STACKENDS
DATASEGMENT
DATA1DB200DUP(?
)
DATA2DB100DUP(?
)
DATA3DB10DUP(?
)
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,SS:
STACK
START:
PUSHDS
MOVAX,DATA
MOVDS,AX
XORCX,CX
KEY:
MOVSI,OFFSETDATA1
KEY1:
MOVAH,1
INT21H
CMPAL,‘$’
JZZH
INCCX
MOV[SI],AL
INCSI
JMPKEY1
ZH:
MOVSI,OFFSETDATA1
MOVDI,OFFSETDATA2
SHRCX,1
PUSHCX
ZH1:
MOVAL,[SI]
ANDAL,0FH
SHLAL,1
SHLAL,1
SHLAL,1
SHLAL,1
MOVBL,AL
INCSI
MOVAL,[SI]
ANDAL,0FH
ORAL,BL
MOV[DI],AL
INCSI
INCDI
LOOPZH1
TJ:
POPCX
MOVDI,OFFSETDATA2
TJ0:
MOVAL,[DI]
CMPAL,90H
JNBTJ1
CMPAL,80H
JNBTJ2
CMPAL,70H
JNBTJ3
CMPAL,60H
JNBTJ4
INC4[DATA3]
JMPTJ5
TJ1:
INC[DATA3]
JMPTJ5
TJ2:
INC1[DATA3]
JMPTJ5
TJ3:
INC2[DATA3]
JMPTJ5
TJ4:
INC3[DATA3]
TJ5:
INCDI
LOOPTJ0
POPDS
MOVAH,4CH
INT21H
HLT
CODEENDS
ENDSTART
某班有七个同学的英语成绩低于80分,分数存在ARRAY数组中,试编程完成以下工作:
(1)给每人加5分,结果存到NEW数组中
(2)把总分存到SUM单元中
(3)把平均分存到AVERAGE单元中
解:
STACKSEGMENTSTACK
DB100DUP(?
)
STACKENDS
DATASEGMENT
ARRAYDB7DUP(?
)
NEWDB7DUP(?
)
SUMDW0
AVGDB0
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,SS:
STACK
START:
MOVCX,7
MOVSI,0
MOVSUM,0
MOVAH,0
LP1:
MOVAL,ARRAY[SI]
ADDAL,05H
DAA
MOVNEW[SI],AL
ADDAL,SUM
DAA
MOVSUM,AL
ADCAH,0
DAA
MOVSUM+1,AH
INCSI
LOOPLP1
MOVAX,SUM
MOVBL,07H
DIVBL
MOVAVG,AL
HLT
CODEENDS
此文档是由网络收集并进行重新排版整理.word可编辑版本!