微机与接口技术B作业答案.docx
- 文档编号:9270947
- 上传时间:2023-02-03
- 格式:DOCX
- 页数:18
- 大小:677.70KB
微机与接口技术B作业答案.docx
《微机与接口技术B作业答案.docx》由会员分享,可在线阅读,更多相关《微机与接口技术B作业答案.docx(18页珍藏版)》请在冰豆网上搜索。
微机与接口技术B作业答案
微机型计算机与接口技术作业
班级:
姓名:
学号:
1.利用DOS系统功能调用,在显示器上显示数字1~100,每个数字之间有1个空格的间隔。
思路:
先将个位、十位定义成不同的变量名,然后使用循环程序先写出01~09,回车,换行。
用嵌套循环程序,里面是对个位使用循环程序,外面是对十位的循环程序,写出10~19、换行、20~29、换行···90~99、换行。
最后单独写出100。
(1)流程图
开始
20H送STD1
SI+1
BH+1
BH=3AH?
否
是
30H送BH
BL—1
BH=3AH?
SI+1
否
CX—1
0AH送STD1
‘100$’送STD1
STD1地址送DX
DOS调用,显示
结束
(2)思路:
将01放在存储器STD1中,每加1放在存储器中,每个数的下一单元输入空格(ASCII码为20H),直到二进制数为0AH时,换行。
最后,将十进制数100按顺序输入存储器,DOS调用显示即可。
(3)运行结果:
(4)经验教训:
存储器中存储的是要显示的字符的ASCII码;空格,换行都是通过编码实现的,这些指令都有他们的ASCII码。
2计算两个字类型(c/c++的int类型)数据的和,两个加数从键盘输入,和显示在显示器上,如果和溢出了,程序要报警。
(1)思路:
根据题目提示,将两个数分别放在存储器STD1,STD2中,先分别将两个数的个位数从存储器中取出,由ASCII码转化为二进制形式。
将两数的个位数的二进制相加和,若超过9,则进位,将进位的1另放在一个寄存器中,同时,减9的余数,加30H转化为ASCII码后,放在STD3+1的存储器单元。
按照同样的步骤将十位数取出来,加和,再加进位寄存器中的(0或1),若超过9,则程序转移报错,然后,减9的余数,加30H转化为ASCII码后存入STD3单元。
最后,将STD3中的内容DOS调用显示即可。
(2)流程图:
开始
STD1+3内容放AL
第一个数存STD1;第二个数存STD2
STD2+3内容放BL
AL—30H
BL—30H
AL+BL放在AL中
AL>09H?
是
AL+30H
否
AL放在STD3+1
STD1+2放AL
AL—30H
STD2+2放BL
BL—30H
AL+BL放AL
AL+AH放AL
AL>09H?
否
是
AL+30H
AL放STD3中
‘$’送STD3+2
DOS调用,显示STD3中的内容
AL—09H
DOS调用,显示STR3,溢出报错
AH+1
AL放STD3+1
AL+30H
结束
(3)运行结果:
(4)经验教训:
本程序在换行上,专门编写了一个子程序,通过调用子程序,实现了多次换行的操作,既节省了编程的时间,又使程序简单易读。
本程序只适用于两位数的加法,今后改进的方向是实现位数不相同的两数的加法。
这样的话,就需要设置判别语句识别两数的位数,然后进行加法,这就具有一定的挑战。
3编写程序:
把一个单词翻译为摩尔斯电码,输出在显示器上
摩尔斯电码表
字母
电码
字母
电码
字母
电码
字母
电码
A
·━
B
━···
C
━·━·
D
━··
E
·
F
··━·
G
━━·
H
····
I
··
J
·━━━
K
━·━
L
·━··
M
━━
N
━·
O
━━━
P
·━━·
Q
━━·━
R
·━·
S
···
T
━
U
··━
V
···━
W
·━━
X
━··━
Y
━·━━
Z
━━··
(1)思路:
本题最大的难度是如何存储这些电码的ASCII,如图所示,本程序设立存储单元STD1进行存储。
每一个英文字母的电码对应一段连续的存储器单元,该存储单元段有6个字节,每一个字母的电码符号依次对应前几个存储单元,紧接着下一单元为空格,再下一个单元是"$"。
这样可以得到各存储单元段之间的偏移地址的关系:
(ASCII(小写)-61H)*6即为其电码的存储单元段。
输入单词后,依次取出各字母的ASCII,先判断大小写,若为大写,加20H转化为小写,若为空格,则调用STD3输出空格。
然后对小写字母进行处理,利用公式(ASCII(小写)-61H)*6得到相应电码存储段的偏移地址。
对该存储段DOS调用显示即可。
(2)程序流程图:
开始
输入的数据存在存储区STD2
AL<60H?
STD2+BX送AL
02H送BX
STD2+1送CL
是
否
BX+1
AL-60H
AL*6送SI
AL<40H?
AL+20H
SI指向的存储单元DOS调用,并显示
是
结束
调用STD3显示空格
BX+1
否
(3)运行结果:
(4)经验教训:
本程序的最大优点是能识别大小写,能翻译一句话,甚至是一段话,只要设置一下存储器的容量即可。
而且,由公式(ASCII(小写)-61H)*6,可方便寻址,减少设置变量的个数,使程序简单明了。
程序清单:
1DATASEGMENT
STD1DB500DUP(?
)
DATAENDS
STACKSSEGMENT
DB20DUP(?
)
STACKSENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVAX,STACKS
MOVSS,AX
MOVBH,31H
MOVBL,30H
LEASI,STD1
MOVCX,6FH;设置循环次数
NEXT1:
MOV[SI],BX
ADDSI,02H
MOVBYTEPTR[SI],20H;空格的ASCII码送入SI指向的存储单元
INCSI
ADDBH,01H
CMPBH,3AH
JZNEXT2;个位数等于10,则转NEXT2
LOOPNEXT1
JMPNEXT3
NEXT2:
MOVBH,30H;个位数清零
INCBL;十位数加一
CMPBL,3AH
JZNEXT3;十位数等于10(到达100)转NEXT3
MOVBYTEPTR[SI],0AH
INCSI
DECCX
JMPNEXT1
NEXT3:
MOVBYTEPTR[SI],0AH;将100单独存入STD1
MOVBYTEPTR[SI+1],'1'
MOVBYTEPTR[SI+2],'0'
MOVBYTEPTR[SI+3],'0'
MOVBYTEPTR[SI+4],'$'
LEADX,STD1
MOVAH,09H;显示STD1中的数据
INT21H
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
2DATASEGMENT
STD1DB10,0,10DUP(?
)
STD2DB10,0,10DUP(?
)
STD3DB20DUP(00H)
STR1DB'Pleaseinputantwo-bitintnumle:
',0DH,0AH,'$'
STR2DB'Pleaseinputanothertwo-bitintnumle:
',0DH,0AH,'$'
STR3DB'!
!
!
Thesumisoverise!
Pleaseinputitagain!
','$'
DATAENDS
STACKSSEGMENT
DB20DUP(?
)
STACKSENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
MAINPROCNEAR
START:
MOVAX,DATA
MOVDS,AX
MOVAX,STACKS
MOVSS,AX
LEADX,STR1
MOVAH,09H
INT21H
LEADX,STD1;第一个数存放在STD1
MOVAH,0AH
INT21H
CALLHUAN
LEADX,STR2
MOVAH,09H
INT21H
LEADX,STD2;第一个数存放在STD1
MOVAH,0AH
INT21H
CALLHUAN
MOVAL,[STD1+3]
SUBAL,30H;第一个数的个位数转化为ASCII
MOVBL,[STD2+3]
SUBBL,30H;第二个数的个位数转化为ASCII
ADDAL,BL;两数个位数的和放在AL中
CMPAL,09H
JANEXT1;个位数有进位,转NEXT1
ADDAL,30H
MOVBYTEPTR[STD3+1],AL
XORAH,AH
NEXT2:
MOVAL,[STD1+2]
SUBAL,30H;第一个数的十位数转化为ASCII
MOVBL,[STD2+2]
SUBBL,30H;第二个数的十位数转化为ASCII
ADDAL,BL;两数十位数的和放在AL中
ADDAL,AH;加上个位数的进位
CMPAL,09H
JANEXT3;十位数向上一位有进位,转NEXT3,和溢出报错
ADDAL,30H
MOVSTD3,AL
JMPNEXT4;转NEXT4,输出两数的和
NEXT1:
SUBAL,09H
ADDAL,30H
MOVBYTEPTR[STD3+1],AL
MOVAH,01H
JMPNEXT2;
NEXT3:
LEADX,STR3
MOVAH,09H
INT21H
JMPNEXT5
NEXT4:
MOVBYTEPTR[STD3+2],'$'
LEADX,STD3
MOVAH,09H
INT21H
NEXT5:
MOVAH,4CH
INT21H
MAINENDP
HUANPROCNEAR
MOVDL,0AH
MOVAH,02H
INT21H
MOVDL,0DH
MOVAH,02H
INT21H
RET
HUANENDP
CODEENDS
ENDSTART
3DATASEGMENT
STD1DB'.-$','-...$','-.-.$','-..$'
DB'.$','..-.$','--.$','....$'
DB'..$','.---$','-.-$','.-..$'
DB'--$','-.$','---$','.--.$'
DB'--.-$','.-.$','...$','-$'
DB'..-$','...-$','.--$','-..-$'
DB'-.--$','--..$';每一个英文字母的电码对应一段连续的存储器单元,该存储单元段有6个字节
;每一个字母的电码符号依次对应前几个存储单元,紧接着下一单元为空格,再下一个单元是"$"。
这样可以得到
;各存储单元段之间的偏移地址的关系:
(ASCII(小写)-61H)*6即为其电码的存储单元段
STD2DB50,0,50DUP(?
)
STD3DB'$'
STR1DB'Pleaseinputaword:
',0AH,0DH,'$'
DATAENDS
STACKSSEGMENT
DB20DUP(?
)
STACKSENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
MAINPROCNAER
START:
MOVAX,DATA
MOVDS,AX
MOVAX,STACKS
MOVSS,AX
LEADX,STR1
MOVAH,09H
INT21H
LEADX,STD2
MOVAH,0AH
INT21H
CALLHUAN;调用子程序,实现换行
XORCH,CH
MOVCL,STD2+1;根据字符个数确定循环次数
MOVBX,02H
NEXT1:
MOVAL,[STD2+BX]
CMPAL,60H;判断大小写,若为大写转NEXT2
JBNEXT2
NEXT5:
INCBX;BX加1,指向下一个存储单元
XORAH,AH
SUBAL,61H;计算该小写字母在26个英文字母中的排序
MOVDL,06H
MULDL;得到相应字母的电码的偏移地址
MOVSI,AX;将偏移地址送入DX,DOS调用显示
LEADX,STD1+SI
MOVAH,09H
INT21H
JMPNEXT3
NEXT2:
CMPAL,40H
JBNEXT4
ADDAL,20H;将大写字母的ASCII码加20H,即转化为小写字母的ASCII码,其余步骤和NEXT1相同
JMPNEXT5
NEXT4:
INCBX
LEADX,STD3;输出空格
MOVAH,09H
INT21H
NEXT3:
LOOPNEXT1
MOVAH,4CH
INT21H
MAINENDP
HUANPROCNEAR;子程序,实现换行操作
MOVDL,0AH
MOVAH,02H
INT21H
MOVDL,0DH
MOVAH,02H
INT21H
RET
HUANENDP
CODEENDS
ENDSTART
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 微机 接口 技术 作业 答案