微机原理与接口技术软件试验报告Word下载.docx
《微机原理与接口技术软件试验报告Word下载.docx》由会员分享,可在线阅读,更多相关《微机原理与接口技术软件试验报告Word下载.docx(18页珍藏版)》请在冰点文库上搜索。
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(?
)
input2DB50DUP(?
COUNT1DB?
;
计算被除数负号输入次数
COUNT2DB?
计算除数负号输入次数
COUNTDB?
计算/输入次数
C5DB?
5次
SUM1DW?
存放被除数的大小
SUM2DB?
存放除数的大小
cbeiDW?
被除数位数
cchuDW?
除数位数
f1DB?
bei
f2DB?
-
f3DB?
chu
YICHUDB?
溢出标志位
CZDB?
位数
SEGDATADW?
OFFDATADW?
STRING1DB'
Inputerror!
'
0DH,0AH,'
STRING2DB0DH,0AH,'
Dividedby0!
STRING3DB0DH,0AH,'
Overflow!
STRING4DB'
Pleaseinputagain!
STRING5DB0DH,0AH,'
OVER'
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;
最高位是1,次高位是1
JOZHENG;
最高位是1,次高位是0
BJ4:
JOFU;
最高位是0,次高位是1
JMPZHENG;
最高位是0,次高位是0
FU:
NEGAL;
负数的绝对值
MOVDL,2DH;
-号
MOV[DI],DL
INCDI
ZHENG:
MOVAH,0
MOVBL,0AH
DIVBL;
AL...AH
MOVDH,AH
MOVDL,0
ADDDH,30H
INCCZ
CMPAL,0;
若商为不零,继续重复
JNZZHENG
MOVCL,CZ
MOVCH,0
LOOP10:
MOV[DI],DH
LOOPLOOP10
MOVDL,24H
SHOWENDP
START:
MOVAX,DATA
MOVDS,AX
MOVES,AX
MOVC5,5H
LOOPA:
MOVCOUNT1,1
MOVCOUNT2,1
MOVCOUNT,1
MOVSUM1,0
MOVSUM2,0
MOVf1,1;
MOVf2,1;
MOVf3,1;
MOVSI,OFFSETinput1
MOVDI,OFFSETinput2
MOVcbei,0
MOVcchu,0
MOVYICHU,0
MOVBX,OFFSETSTRIN
INPUT:
MOVAH,1
CMPAL,1BH;
检测是否按下ESC退出键
JNZA1
JMPOUTALL2
A1:
CMPAL,2DH;
若不是-号,跳到A
JNZA
-号的处理
CMPf1,1
JZG
CMPf2,0
JZD
E:
MOVSEGDATA,SEGSTRHELP
MOVOFFDATA,OFFSETSTRHELP
CALLDISP
MOVSEGDATA,SEGSTRING1
MOVOFFDATA,OFFSETSTRING1
CALLDISP
MOVSEGDATA,SEGSTRING4
MOVOFFDATA,OFFSETSTRING4
JMPSTART
G:
CMPCOUNT1,1;
被除数是否只有一个-
JNZE
DECCOUNT1
MOV[BX],AL
INCBX
JMPINPUT
D:
CMPf3,1
CMPCOUNT2,1;
000
DECCOUNT2
E3:
JMPE
A:
CMPAL,2FH;
若不是/号,跳到B
JNZB
/的处理
CMPf1,0
JNZE3
CMPf2,1
CMPCOUNT,1
DECCOUNT
DECf2
MOV[BX],AL
INCBX
B:
CMPAL,0DH;
若不是回车,跳到F
JNZF
回车的处理
CMPf1,0
JNZE2
CMPf2,0
CMPf3,0
MOVDL,3DH;
=号
MOV[BX],DL
INCBX
MOVDL,24H;
$
JMPOUT1
F:
CMPAL,30H;
判断输入的是不是数字
JLE2
CMPAL,39H
JGE2
JNZchushu
beichu:
MOVf1,0
MOV[SI],AL
INCSI
MOV[BX],AL;
INCcbei
chushu:
MOVf3,0
MOV[DI],AL
INCcchu
JMPINPUT
JMPOUT1
E2:
JMPE3
OUT1:
CMPcbei,5
JLI;
被除数小于5位,在合理范围内,跳到I
H:
MOVSI,OFFSETinput1;
输入的被除数是5位
MOVAL,[SI]
SUBAL,30H
CMPAL,3;
判断5位被除数是否超出范围
JLI
MOVAL,[SI+1]
SUBAL,30H
CMPAL,2
MOVAL,[SI+2]
CMPAL,7
MOVAL,[SI+3]
CMPAL,6
MOVAL,[SI+4]
JLEI
CMPAL,8
CMPCOUNT1,0
I:
CMPcchu,3
JGE1
JLJ;
除数小于3位,在合理范围内,跳到J
MOVDI,OFFSETinput2;
输入的除数是3位
MOVAL,[DI]
CMPAL,1;
判断3位除数是否超出范围
JLJ
MOVAL,[DI+1]
CMPAL,2
MOVAL,[DI+2]
JLEJ
CMPCOUNT2,0
JNZE1
JZJ
E1:
JMPE2
J:
MOVCX,cbei
LOOP1:
MOVBL,[SI];
求出输入被除数的值
SUBBL,30H
MOVBH,0
MOVAX,SUM1
MOVCL,3
SHLAX,CL
SHLSUM1,1
ADDSUM1,AX
ADDSUM1,BX
LOOPLOOP1
CMPSUM1,0
JZOUT0
MOVCX,cchu
MOVDI,OFFSETinput2
LOOP2:
MOVBL,[DI];
求出输入除数的值
MOVAH,SUM2
SHLAH,CL
SHLSUM2,1
ADDSUM2,AH
ADDSUM2,BL
LOOPLOOP2
CMPSUM2,0;
除数为零时,显示“Dividedby0!
”
JZOUT0
JMPOUTDOS
OUT0:
MOVSEGDATA,SEGSTRING2
MOVOFFDATA,OFFSETSTRING2
JMPOUTALL
OUTDOS:
CMPCOUNT1,0
JNZK;
被除数为正数
NEGSUM1;
被除数为负数,求补
K:
JNZL;
除数为正数
NEGSUM2;
除数为负数,求补
L:
STI;
允许中断
MOVAL,0
MOVAH,35H
PUSHES
PUSHBX
MOVAX,SEGINT00
MOVDX,OFFSETINT00
MOVAH,25H
MOVAX,SUM1;
计算出商和余数
MOVBL,SUM2
IDIVBL;
AL?
?
AH
MOVDS,CX
CMPYICHU,1
JZOUTALL1
MOVSEGDATA,SEGSTRIN
MOVOFFDATA,OFFSETSTRIN
PUSHAX;
显示商
CALLSHOW
POPAX
MOVSEGDATA,SEGSTRSHOW
MOVOFFDATA,OFFSETSTRSHOW
MOVSEGDATA,SEGSTRHELP1
MOVOFFDATA,OFFSETSTRHELP1
MOVAL,AH;
显示余数
JMPY
OUTALL1:
JMPOUTALL
Y:
CALLDISP
CMPSUM2,32H;
若输入的除数为50,则返回DOS
JZOUTALL
DECC5
CMPC5,0
JZT5
JMPLOOPA
T5:
MOVSEGDATA,SEGSTR5
MOVOFFDATA,OFFSETSTR5
JMPOUTALL
OUTALL2:
MOVSEGDATA,SEGSTRING5
MOVOFFDATA,OFFSETSTRING5
OUTALL:
MOVAH,4CH
INT21H
CODEENDS
ENDSTART