微原8086汇编除法器BUPT.docx
- 文档编号:30232928
- 上传时间:2023-08-07
- 格式:DOCX
- 页数:17
- 大小:22.35KB
微原8086汇编除法器BUPT.docx
《微原8086汇编除法器BUPT.docx》由会员分享,可在线阅读,更多相关《微原8086汇编除法器BUPT.docx(17页珍藏版)》请在冰豆网上搜索。
微原8086汇编除法器BUPT
大作业及实验二
一.目的
1.进一步掌握子程序的设计
2.进一步掌握分支程序的设计
3.掌握循环程序的设计;
4.掌握中断程序设计方法;
5.练习数据格式的转换;
6.使用DEBUG调试复杂程序;
3.掌握使用DOS系统功能调用进行输入/输出.
二.内容
设计一个除法器。
被除数可以为任意一个16位带符号十进制数,除数可为任意一个8位带符号十进制数.
三.作业要求
1.利用DOS1号功能调用,顺序从键盘输入被除数、除运算符“/”及除数与回车.要求:
✓输入的数若为负数,则前面应冠以“-”号,如-65;
✓输入时若出现以下任一种情况,则显示“Inputerror!
”(之后程序须提示重新输入):
⏹输入的被除数在范围
之外.
⏹被除数之后紧跟的不是除运算符“/”.
⏹输入的除数在范围
之外.
2.若正确输入,则屏幕应显示除法运算的结果,即商及余数.
例如若输入:
56/9
则屏幕下一行应显示:
56/9=6,remainder=2.
此时,如果所输入的除数值为(你所在班级的最后两位数字+你在该班内的班内序号),则程序显示完运算结果后结束并返回DOS.否则,如果程序开始运行以来已连续5次进行了正确的输入并给出结果,则程序结束并返回DOS;否则程序继续提示输入.
3.如果被除数为0,则显示错误信息:
“Dividedby0!
”,之后立即返回DOS.
4.除法运算操作须使用除法指令IDIV(除数为0时可以例外),当结果(商)超出范围
时,显示错误信息:
“Overflow!
”,之后立即返回DOS.
***注:
应通过是否引起0号中断来判断除法运算是否溢出,且0号除法溢出中断服务程序必须放在代码段偏移地址为0100H开始的地方.
5.显示运算结果的商或余数前,必须先进行带符号补码表示的数到对应的十进制ASCII码数字串的转换.该转换工作必须写成一个子程序,且该子程序有如下要求:
;子程序功能:
将一个(字节)带符号补码表示的数转换成对应的十进制ASCII码数字串,并以'$'结束
;入口参数:
AL=待转换的带符号数(一个字节长,最高位为符号位)
;出口参数:
DI=存放相应结果ASCII码串的首地址
;例如:
若入口参数AL=93H,则子程序返回时,DS:
DI所指处将存有如下字符串:
'-109$'.
注:
该作业必须最迟在实验验收前一周上交.
四.实验要求
(现场演示,程序编辑除外)
1.编辑前述作业三完成的8086汇编源程序,然后进行汇编及连接以生成可执行文件.
2.执行程序,演示如下各种输入情况:
(a)被除数与除数均为正数
(b)被除数与除数均为负数
(c)被除数与除数的符号位不同
(d)输入如下特殊情况:
-128/1;12345/11;23/0;1134/127;1145/128;32768/12345;-32769/126.
(e)输入的除数值为:
你所在班级的最后两位数字+你在该班内的班内序号.
3.调用DEBUG软件对该可执行文件进行调试,并顺序完成如下所提要求或回答相关问题:
(a)设置相关断点,在输入完被除数并转换成等效的带符号二进制数后停下,指出所输入的被除数存放位置.
(b)设置相关断点,在输入完除数并转换成等效的带符号二进制数后停下,指出所输入的除数存放位置.
(c)设置相关断点,在执行除法运算指令IDIV之前停下,解释当前堆栈内容.
(d)输入合适的被除数与除数以便能引起0号除法溢出中断,在执行到溢出中断服务程序的第一条指令前停下,检查并解释当前堆栈内容.
DATASEGMENT
input1DB50DUP(?
)
input2DB5ODUP(?
)
COUNT1DB?
;计算被除数负号输入次数
COUNT2DB?
;计算除数负号输入次数
COUNTDB?
;计算/输入次数
C5DB?
;5次
SUM1DW?
;存放被除数和
SUM2DB?
;存放除数和
cbeiDW?
;被除数位数
cchuDW?
;除数位数
f1DB?
;bei
f2DB?
;-
f3DB?
;chu
YICHUDB?
;溢出标志位
CZDB?
;位数
SEGDATADW?
OFFDATADW?
STRING1DB'Inputerror!
',0DH,0AH,'$'
STRING2DB'Dividedby0!
',0DH,0AH,'$'
STRING3DB'Overflow!
',0DH,0AH,'$'
STRING4DB'Pleaseinputagain!
',0DH,0AH,'$'
STRSHOWDB40DUP('$')
STRINDB50DUP('$')
STRHELPDB0DH,0AH,'$'
STRHELP1DB',remainder=','$'
STR5DB'Times=5','$'
DATAENDS
STACKSEGMENTSTACK'STACK'
DB1000DUP(0)
STACKENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,SS:
STACK,ES:
DATA
ORG100H
INT00PROCFAR
POPCX
ADDCX,2
PUSHCX
MOVSEGDATA,SEGSTRING3
MOVOFFDATA,OFFSETSTRING3
CALLFARPTRDISP
MOVYICHU,1
IRET
INT00ENDP
DISPPROCFAR;显示子程序
PUSHAX
PUSHDX
PUSHDS
MOVAH,09H
MOVDX,SEGDATA
MOVDS,DX
MOVDX,OFFDATA
INT21H
POPDS
POPDX
POPAX
RET
DISPENDP
SHOWPROCFAR
MOVCZ,0
MOVDI,OFFSETSTRSHOW
CMPAL,0
BJ1:
JSBJ3
JNSBJ4
BJ3:
JNOFU
JOZHENG
BJ4:
JOFU
JMPZHENG
FU:
NEGAL
PUSHDX
MOVDL,2DH
MOV[DI],DL
POPDX
INCDI
ZHENG:
MOVAH,0
MOVBL,0AH
DIVBL
MOVDH,AH
MOVDL,0
ADDDH,30H
PUSHDX
INCCZ
CMPAX,0
JNZZHENG
MOVCL,CZ
MOVCH,0
LPOP:
POPDX
MOV[DI],DH
INCDI
LOOPLPOP
PUSHDX
MOVDL,24H
MOV[DI],DL
POPDX
RET
SHOWENDP
START:
MOVAX,DATA
MOVDS,AX
MOVES,AX
MOVC5,5H
LOOPA:
MOVCOUNT1,1
MOVCOUNT2,1
MOVCOUNT,1
MOVSUM1,0
MOVSUM2,0
MOVf1,1;bei
MOVf2,1;chu
MOVf3,1;-
MOVSI,OFFSETinput1
MOVDI,OFFSETinput2
MOVcbei,0
MOVcchu,0
MOVYICHU,0
MOVBX,OFFSETSTRIN
INPUT:
MOVAH,1
INT21H
CMPAL,2Dh;-号
JNZA
;-号的处理
CMPf1,1;111
JZG
CMPf2,0;001
JZD
E:
MOVSEGDATA,SEGSTRING1
MOVOFFDATA,OFFSETSTRING1
CALLDISP
MOVSEGDATA,SEGSTRING4
MOVOFFDATA,OFFSETSTRING4
CALLDISP
JMPSTART
G:
CMPCOUNT1,1;被除数是否只有一个-
JNZE
DECCOUNT1
MOV[BX],AL
INCBX
JMPINPUT
D:
CMPf3,1
JNZE
CMPCOUNT2,1;000
JNZE
DECCOUNT2
MOV[BX],AL
INCBX
JMPINPUT
JMPA
B3:
JMPE
A:
CMPAL,2FH;/号
JNZB
CMPf1,0;/的处理
JNZB3
CMPf2,1
JNZB3
CMPf3,1
JNZB3
CMPCOUNT,1
JNZB3
DECCOUNT
DECf2
MOV[BX],AL
INCBX
JMPINPUT
B:
CMPAL,0DH;回车
JNZF
CMPf1,0
JNZB2
CMPf2,0
JNZB2
CMPf3,0
JNZB2
PUSHDX
MOVDL,3DH
MOV[BX],DL
INCBX
MOVDL,24H
MOV[BX],DL
POPDX
JMPOUT1
F:
CMPAL,30H
JLB2
CMPAL,39H
JGB2
CMPf2,1
JNZchushu
beichu:
MOVf1,0
MOV[SI],AL
INCSI
MOV[BX],AL;
INCBX
INCcbei
JMPINPUT
chushu:
MOVf3,0
MOV[DI],AL
INCDI
MOV[BX],AL
INCBX;
INCcchu
JMPINPUT
JMPOUT1
B2:
JMPB3
OUT1:
CMPcbei,5
JGB2
JLI
H:
MOVSI,OFFSETinput1
MOVAL,[SI]
SUBAL,30H
CMPAL,3
JGB2
JLI
MOVAL,[SI+1]
SUBAL,30H
CMPAL,2
JGB2
JLI
MOVAL,[SI+2]
SUBAL,30H
CMPAL,7
JGB2
JLI
MOVAL,[SI+3]
SUBAL,30H
CMPAL,6
JGB2
JLI
MOVAL,[SI+4]
SUBAL,30H
CMPAL,7
JLEI
CMPAL,8
JGB2
CMPCOUNT1,0
JNZB2
I:
CMPcchu,3
JGB1
JLJ
MOVDI,OFFSETinput2
MOVAL,[DI]
SUBAL,30H
CMPAL,1
JGB1
JLJ
MOVAL,[DI+1]
SUBAL,30H
CMPAL,2
JGB1
JLJ
MOVAL,[DI+2]
SUBAL,30H
CMPAL,7
JLEJ
CMPAL,8
JGB1
CMPCOUNT2,0
JNZB1
JZJ
B1:
JMPB2
J:
MOVCX,cbei
MOVSI,OFFSETinput1
LOOP1:
MOVBL,[SI]
SUBBL,30H
MOVBH,0
MOVAX,SUM1
PUSHCX
MOVCL,3
SHLAX,CL
SHLSUM1,1
ADDSUM1,AX
ADDSUM1,BX
POPCX
INCSI
LOOPLOOP1
CMPSUM1,0
JZOUT0
MOVCX,cchu
MOVDI,OFFSETinput2
LOOP2:
MOVBL,[DI]
SUBBL,30H
MOVAH,SUM2
PUSHCX
MOVCL,3
SHLAH,CL
SHLSUM2,1
ADDSUM2,AH
ADDSUM2,BL
POPCX
INCDI
LOOPLOOP2
JMPOUTDOS
OUT0:
MOVSEGDATA,SEGSTRING2
MOVOFFDATA,OFFSETSTRING2
CALLDISP
JMPOUTA
OUTDOS:
CMPCOUNT1,0;被除数
JNZK
NEGSUM1
K:
CMPCOUNT2,0
JNZL
NEGSUM2
L:
STI
MOVAL,0
MOVAH,35H
INT21H
PUSHES
PUSHBX
PUSHDS
MOVAX,SEGINT00
MOVDS,AX
MOVDX,OFFSETINT00
MOVAL,0
MOVAH,25H
INT21H
POPDS
MOVAX,SUM1
MOVBL,SUM2
IDIVBL
POPDX
POPCX
PUSHDS
PUSHAX
MOVDS,CX
MOVAL,0
MOVAH,25H
INT21H
POPAX
POPDS
CMPYICHU,1
JZZ
MOVSEGDATA,SEGSTRHELP
MOVOFFDATA,OFFSETSTRHELP
CALLDISP
MOVSEGDATA,SEGSTRIN
MOVOFFDATA,OFFSETSTRIN
CALLDISP
PUSHAX
CALLSHOW
POPAX
MOVSEGDATA,SEGSTRSHOW
MOVOFFDATA,OFFSETSTRSHOW
CALLDISP
MOVSEGDATA,SEGSTRHELP1
MOVOFFDATA,OFFSETSTRHELP1
CALLDISP
PUSHAX
MOVAL,AH
CALLSHOW
POPAX
JMPY
Z:
JMPOUTA
Y:
MOVSEGDATA,SEGSTRSHOW
MOVOFFDATA,OFFSETSTRSHOW
CALLDISP
CMPSUM2,22H
JZOUTA
MOVSEGDATA,SEGSTRHELP
MOVOFFDATA,OFFSETSTRHELP
CALLDISP
DECC5
CMPC5,0
JZT5
JMPLOOPA
T5:
MOVSEGDATA,SEGSTR5
MOVOFFDATA,OFFSETSTR5
CALLDISP
OUTA:
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 8086 汇编 法器 BUPT