微机原理与接口技术习题答案41文档格式.docx
- 文档编号:16502366
- 上传时间:2022-11-24
- 格式:DOCX
- 页数:21
- 大小:27.96KB
微机原理与接口技术习题答案41文档格式.docx
《微机原理与接口技术习题答案41文档格式.docx》由会员分享,可在线阅读,更多相关《微机原理与接口技术习题答案41文档格式.docx(21页珍藏版)》请在冰豆网上搜索。
RCRDX,1
SHRBL,1
LOOPL1
5.在变量VAR1和VAR2中分别保存有两个字节型的正整数,编写完整的汇编语言程序实现:
(1)当两数中有一个奇数时,将奇数存入VAR1,偶数存入VAR2;
(2)当两数均为奇数时,两个变量的内容不变;
(3)当两数均为偶数时,两数缩小一倍后存入原处。
当VAR1为奇数时,不论VAR2的奇偶性,这两个单元的内容均不变;
只有当VAR1为偶数时,如果VAR2为奇数,则VAR1与VAR2内容交换;
如果VAR2为偶数,则两数缩小一倍后存入原处。
DATASEGMENT
VAR1DB28
VAR2DB36
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,ES:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVES,AX
MOVAL,VAR1
MOVBL,VAR2
TESTAL,1
JZEVEN1
JMPOVER
EVEN1:
TESTBL,1
JZEVEN2
MOVVAR1,BL
MOVVAR2,AL
JMPOVER
EVEN2:
SHRAL,1
MOVVAR1,AL
SHRBL,1
MOVVAR2,BL
OVER:
MOVAH,4CH
MOVAL,0
INT21H
CODEENDS
ENDSTART
6.已知在字变量VAR1、VAR2和VAR3中保存有3个相同的代码,但有一个错码,编写程序段找出这个错码,并将它送到AX,其地址送SI;
如果3个代码都相同,则在AX中置-1标志。
在数据段中定义:
VAR1DW5A34H
VAR2DW5A35H
VAR3DW3A34H
在代码段中编写程序段:
MOVAX,-1
MOVBX,VAR1
CMPBX,VAR2
JZL2
CMPBX,VAR3
JZL1
MOVAX,BX
LEASI,VAR1
MOVAX,VAR2
LEASI,VAR2
JZOVER
MOVAX,VAR3
LEASI,VAR3
OVER:
7.分析下列程序段的功能:
MOVCL,04
SHLDX,CL
MOVBL,AH
SHLAX,CL
SHRBL,CL
ORDL,BL
程序段完成DX:
AX组成的32位无符号数左移4位,低位补零(也即除以16)。
8.下列程序段执行后,求BX寄存器的内容:
MOVCL,3
MOVBX,0B7H
ROLBX,1
RORBX,CL
实际上完成BX内容循环右移2位,因此,BX寄存器的内容为C02DH。
9.下列程序段执行后,求BX寄存器的内容:
MOVCL,5
MOVBX,7D5CH
SHRBX,CL
完成BX内容逻辑右移5位,因此,BX寄存器的内容为03EAH。
10.将BUFFERS中N个字按相反顺序传递到BUFFERT中。
LEASI,BUFFERS
LEADI,BUFFERT
MOVCX,N
ADDDI,N
SUBDI,2
MOVAX,[SI]
MOV[DI],AX
ADDSI,2
11.数组ARRAY中存放有一组字型数据,前两个字节存放数据长度(5的倍数)。
为给这个数组中的数据进行加密保护,每5个数据取出一个数据进行加密处理:
奇数位进行取反,偶数位不变,例如对数据0110110010110001B加密后变成1100011000011011B,编写加密程序encrpytion和解密程序unencrpytion。
约定从第一个数据开始,每5个数据为一组,每组中的第一个数据采取加密/解密处理。
由于加密算法采用的是取反操作,解密算法也采用取反操作,因此解密和解密算法是同一个程序。
ENCRPYTIONPROCNEAR
LEASI,ARRAY
MOVAX,[SI]
MOVBX,5
DIVBX
MOVCX,AX
ADDSI,2
MOVAX,[SI]
XORAX,0AAAAH
MOV[SI],AX
ADDSI,10
LOOPL1
RET
ENCRPYTIONENDP
13.设BUF中存放有N个无符号数(或有符号数),编程实现求它们的最小值(存入AX)和最大值(存入DX)。
BUF存放有N个无符号数的程序如下:
MOVCX,N-1
LEASI,BUF
MOVDX,AX
ADDSI,2
CMPAX,[SI]
JBENOCHG1
XCHGAX,[SI]
NOCHG1:
CMPDX,[SI]
JAENOCHG2
XCHGDX,[SI]
NOCHG2:
ADDSI,2
LOOPL1
如果BUF中存放的是有符号数,则只需要将程序中的两行内容修改:
JBENOCHG1改成:
JLENOCHG1
JAENOCHG2改成:
JGENOCHG2
14.设BUFFER中存放有N个无符号(第1个字节存放缓冲区的长度),编程实现将其中的0元素抹去,并更新其长度。
设BUFFER中存放的是字节型数据。
采用双指针方法:
SI为读指针,DI为写指针,从低地址开始,内存中读出一个字节,如果不为0,则写入内存;
如果为0,则不进行写操作。
LEASI,BUFFER
XORCX,CX
MOVCL,[SI]
INCSI
MOVDI,SI
XORBH,BH
XORAL,AL
CMP[SI],AL
MOVBL,[SI]
MOV[DI],BL
INCDI
INCBH
MOVBUFFER,BH
16.编写一个子程序实现统计AL中1的个数,然后检测出字节型缓冲区BUF中0和1个数相等的元素个数。
统计AL中1的个数,只需将AL右移,移出的一位内容进行累加,子程序为:
COUNTBYTEPROCNEAR
PUSHAX
PUSHCX
XORBL,BL
COU1:
ADCBL,0
LOOPCOU1
POPCX
POPAX
RET
COUNTBYTEENDP
在此基础上,可以检测出字节型缓冲区BUF中0和1个数相等的元素个数,即一个字节中有4个1。
设BUF中有N个字节型数据,结果保持在BH中。
LEASI,BUF
XORBH,BH
MOVAL,[SI]
CALLCOUNTBYTE
CMPBL,4
JNZL2
INCBH
INCSI
19.在缓冲区BUFFER中,第1个字节存放数组的长度(<
256),从第2个字节开始存放字符的ASCII码,编写子程序完成在最高位给字符加上偶校验。
STACKSEGMENTSTACK'
STACK'
DW100HDUP(?
TOPLABELBYTE
STACKENDS
DATASEGMENT
BUFFERDB3;
首字节为字符串长度
DB'
ABC'
;
字符串
DATAENDS
CODE,DS:
DATA,ES:
DATA,SS:
STACK
MOVAX,STACK
MOVSS,AX
LEASP,TOP
MOVAX,DATA
MOVDS,AX
MOVES,AX
LEADI,BUFFER
XORCX,CX
MOVCL,[DI]
INCDI
CALLSETEVEN
MOVAH,4CH;
返回DOS
MOVAL,0
INT21H
SETEVENPROCNEAR;
加偶校验子程序
PUSHAX
PUSHBX
PUSHCX
PUSHDI
SETEVEN1:
MOVAL,[DI]
CALLCOUNTBYTE
ANDBL,01H
JZSETEVEN2
ORAL,80H
MOV[DI],AL
SETEVEN2:
LOOPSETEVEN1
POPDI
POPBX
SETEVENENDP
CODEENDS
ENDSTART
20.编写程序完成求多位数(N个字)的绝对值。
21.已知斐波那契数列的定义为:
,编写求该数列前n项的子程序。
设奖斐波那契数列存放在字变量RESULT中。
在数据段中定义
RESULTDW100HDUP(?
在代码段中编写子程序
FIBONACCIPROCNEAR
XORDI,DI
MOVRESULT[DI],1;
前两个数为1
MOVRESULT[DI+2],1
ADDDI,4
MOVCX,N
MOVAX,RESULT[DI-4]
ADDAX,RESULT[DI-2]
MOVRESULT[DI],AX
ADDDI,2
FIBONACCIENDP
22.编写程序实现循环显示10条信息,保存每条信息的变量分别为INFOM1~INFORM10。
在数据段中定义变量:
TABLEDWINFORM1,INFORM2,INFORM3,INFORM4,INFORM5
DWINFORM6,INFORM7,INFORM8,INFORM9,INFORM10
MOVCX,10
XORSI,SI
MOVDX,TABLE[SI]
MOVAH,9
ADDSI,2
CALLWAIT
LOOPL1
这里,WAIT为延时子程序,用于在显示信息之间的停顿。
23.编写程序实现将包含20个数据的数组ARRAY分成两个数组:
正数数组ARRAYP和负数数组ARRAYN,并分别将这两个数组中数据的个数显示出来。
先编写一个子程序DISPALD,完成以3位十进制数形式显示出AL的内容。
DISPALDPROCNEAR
PUSHAX
PUSHCX
PUSHDX
XORAH,AH
MOVCL,100
DIVCL
MOVDL,30H
ADDDL,AL
MOVAH,2
INT21H
POPAX
MOVAL,AH
MOVCL,10
ADDDL,AH
POPDX
POPCX
RET
DISPALDENDP
在此基础上,根据题目要求,需要用到3个指针:
SI指向源数组ARRAY,DI指向正数数组ARRAYP,BX指向负数数组ARRAYN。
MOVCX,20
XORDX,DX
LEASI,ARRAY
LEADI,ARRAYP
LEABX,ARRAYN
MOVAL,[SI]
ANDAL,AL
JSL2
MOV[DI],AL
INCDI
INCDL
JMPL3
MOV[BX],AL
INCBX
INCDH
INCSI
LOOPL1
MOVAL,DL
CALLDISPALD
MOVAL,DH
24.编写程序实现求缓冲区BUFFER的100个字中的最小偶数(存入AX)。
设BUFFER中存放的是有符号数。
MOVCX,100
LEASI,BUFFER
MOVAX,7FFFH
ANDWORDPTR[SI],1
JNZL2
CMP[SI],AX
JGEL2
MOVAX,[SI]
25.编写程序实现求级数
的前n项和刚大于2000的项数n。
BL用于存放项数。
STACKSEGMENTSTACK'
DW100HDUP(?
TOPLABELWORD
STACKENDS
DB100HDUP(?
CODESEGMENT
DATA,SS:
MOVAX,DATA
MOVDS,AX
MOVES,AX
MOVAX,STACK
MOVSS,AX
LEASP,TOP
MOVBL,1
MOVCX,0
COUNT:
MOVAL,BL
MULBL
ADDCX,AX
CMPCX,2000
JAEXIT
INCBL
JMPCOUNT
EXIT:
26.定义一条宏指令,实现将指定数据段的段地址传送到段寄存器ES或DS的功能。
27.定义一条宏指令,实现从键盘中输入一个字符串(利用INT21H的09号功能)。
28.定义一条宏指令,实现在屏幕上输出回车、换行。
29.利用其它指令完成与下列指令一样的功能:
(1)REPMOVSB;
(2)REPLODSB;
(3)REPSTOSB;
(4)REPSCASB。
设DF=0
(1)L1:
MOVAL,[SI]
MOVES:
[DI],AL
INCSI
INCDI
LOOPL1
(2)L1:
(3)L1:
MOVES:
[DI],AL
(4)L1:
CMPAL,ES:
[DI]
30.设在数据段中定义了:
STR1DB‘ASSEMBLELANGUAGE’
STR2DB20DUP(?
利用字符串指令编写程序段实现:
(1)从左到右将STR1中的字符串传送到STR2;
(2)从右到左将STR1中的字符串传送到STR2;
(3)将STR1中的第6个和第7个字节装入DX;
(4)扫描STR1字符串中有无空格,如有则将第一个空格符的地址传送到SI。
STR1中有17个字符(含一个空格),设DS和ES均指向STR1和STR2所在的段。
(1)CLD
MOVCX,17
LEASI,STR1
LEADI,STR2
REPMOVSB
(2)MOVCX,17
ADDSI,CX
DECSI
MOVAL,[SI]
MOV[DI],AL
INCDI
(3)LEASI,STR1
MOVDX,[SI+6]
(4)MOVCX,17
MOVAL,20H
CMP[SI],AL
JZL2
INCSI
31.设在数据段中定义了:
STRINGDB‘TodayisSunday&
July16,2000’
编写程序实现将STRING中的’&
’用’/’代替。
STRING中保存了30个字符。
MOVCX,30
LEASI,STRING
MOVAL,’&
’
CMP[SI],AL
JNZL2
MOVBYTEPTR[SI],’/’
32.分析下列程序段完成的功能:
MOVCX,100
LEASI,FIRST
LEADI,SECOND
REPMOVSB
将缓冲区FIRST中100个字节传送到SECOND中。
33.分析下列程序段:
LEADI,STRING
MOVCX,200
CLD
MOVAL,20H
REPZSCASB
JNZFOUND
JMPNOT_FOUND
问:
转移到FOUND的条件。
在缓冲区STRING中搜索非空格字符,如果有非空格则转到FOUND,如果200个单元中都是空格,则转到NOT_FOUND。
34.设在数据段的变量OLDS和NEWS中保存有5个字节的字符串,如果OLDS字符串不同于NEWS字符串,则执行NEW_LESS,否则顺序执行程序。
设DS和ES均指向字符串OLDS和NEWS所在的段。
CLD
MOVCX,5
LEASI,OLDS
LEADI,NEWS
REPZCMPSB
JNZNEW_LESS
35.编程实现将STRING字符串中的小写字母变换成大写字母。
设STRING中的字符个数为N。
MOVCX,N
MOVAL,5FH
AND[SI],AL
36.设在数据段中定义了:
STUDENT_NAMEDB30DUP(?
STUDENT_ADDRDB9DUP(?
STUDENT_PRINTDB50DUP(?
编写程序实现:
用空格符清除缓冲区STUDENT_PRINT;
在STUDENT_ADDR中查找第一个’_’字符;
在STUDENT_ADDR中查找最后一个’_’字符;
如果STUDENT_NAME中全为空格符,则STUDENT_PRINT全存入’*’;
将STUDENT_NAME传送到STUDENT_PRINT的前30个字节中,将STUDENT_ADDR传送到STUDENT_PRINT的后9个字节中。
37.(上机题)编写程序实现,将缓冲区BUFFER中的100个字按递增排序,并按下列格式顺序显示:
数据1<
原序号>
数据2<
……
38.(上机题)按同余法产生一组随机数N(1<
N<
=50),并按N+50赋给45名同学的5门课程的成绩,要求编程实现计算每个同学的平均成绩,并根据平均成绩统计全班的成绩各等级的人数(A:
90~100,B:
80~89,C:
70~79,D:
66~69,E:
60~65,F:
60分以下),按下列格式显示:
Total<
总人数>
A:
<
人数1>
B:
人数2>
C:
人数3>
D:
人数4>
E:
人数5>
F:
人数6>
39.(上机题)编写程序实现下列5项功能,通过从键盘输入1~5进行菜单式选择:
(1)按数字键“1”,完成将字符串中的小写字母变换成大写字母。
用户输入由英文大小写字母或数字0~9组成的字符串(以回车结束),变换后按下列格式在屏幕上显示:
<
原字符串>
例如:
abcdgyt0092
新字符串>
ABCDGYT0092
按任一键重做;
按Esc键返回主菜单。
(2)按数字键“2”,完成在字符串中找最大值。
用户输入由英文大小写字母或数字
0~9组成的字符串(以回车结束),找出最大值后
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 微机 原理 接口 技术 习题 答案 41