微机原理上机汇编语言程序编写程序求两个十进制数之和,并将和以十进制数的形式送屏幕显示.doc
《微机原理上机汇编语言程序编写程序求两个十进制数之和,并将和以十进制数的形式送屏幕显示.doc》由会员分享,可在线阅读,更多相关《微机原理上机汇编语言程序编写程序求两个十进制数之和,并将和以十进制数的形式送屏幕显示.doc(5页珍藏版)》请在冰点文库上搜索。
![微机原理上机汇编语言程序编写程序求两个十进制数之和,并将和以十进制数的形式送屏幕显示.doc](https://file1.bingdoc.com/fileroot1/2023-4/29/382ef5b5-e64f-4a5b-bd6e-48743fba50d5/382ef5b5-e64f-4a5b-bd6e-48743fba50d51.gif)
上机作业二
一.实验目的
1. 熟练掌握汇编语言程序设计的方法及上机步骤。
2. 掌握算术运算指令的应用。
3. 掌握子程序的设计方法。
4. 掌握DOS功能的调用方法。
二.试验仪器
586微机一台
三.实验内容
编写程序求两个十进制数之和,并将和以十进制数的形式送屏幕显示。
编程要求与提示:
[1]从键盘输入两个十进制数(如12678532与21736543),以二进制数形式存放在ADD1和ADD2为首址的存贮器单元,输入一个十进制数采用子程序形式。
[2]和以二进制数的形式存入SUM以下单元。
[3]将和送到屏幕显示采用子程序形式。
[4]实验步骤如下:
a.用全屏幕编辑软件建立源程序。
b.用masm.exe汇编程序对源程序进行汇编,形成目标程序。
c.用link.exe连接程序对目标程序进行连接形成可执行文件。
d.用DEBUG对连接通过的可执行程序进行调试。
四.源程序
STACK SEGMENTSTACK'STACK'
DW100HDUP(?
)
TOP LABELWORD
STACK ENDS
DATA SEGMENT
FAKE DW0
KEYBUFFER DB100
DB?
DB100DUP(?
)
BUF DB8DUP(?
),'$'
ADD1 DW?
A1 DW?
ADD2 DW?
A2 DW?
SUM DW?
S1 DW?
STRING1 DB'PLEASEinputdecimaldata:
$'
DATA ENDS
CODE SEGMENT
ASSUMECS:
CODE,DS:
DATA,ES:
DATA,SS:
STACK
START:
MOVAX,DATA
MOVDS,AX
MOVES,AX
MOVAX,STACK
MOVSS,AX
LEASP,TOP
CALLINPUT1
CALLTRANS10TO16
MOVADD1,AX
MOVA1,DX
CALLDISPCR
CALLINPUT1
CALLTRANS10TO16
MOVADD2,AX
MOVA2,DX
CALLDISPCR
MOVSUM,AX
MOVS1,DX
ADDAX,ADD1
ADCDX,A1
MOVSUM,AX
MOVS1,DX
CALLfarptrADISP
MOVAH,4CH
MOVAL,0
INT21H
INPUT1 PROCNEAR
LEADX,STRING1
MOVAH,09H
INT21H
MOVAH,0AH
LEADX,KEYBUFFER
INT21H
LEASI,KEYBUFFER+1
ret
INPUT1endp
TRANS10TO16 PROCNEAR
PUSHCX
PUSHSI;PUSHBX?
?
?
XORAX,AX
XORDX,DX
XORCX,CX
MOVCL,[SI]
INCSI
MOVAL,[SI]
INCSI
SUBAL,30H
DECCX
JCXZTRANSF2
MOVBX,10
TRANSF1:
CALLMULAXI
PUSHDX
JOTRANSF_ERR
MOVDL,[SI]
INCSI
SUBDL,30H
ADDAL,DL
ADCAH,0
JCTRANSF_ERR
POPDX
LOOPTRANSF1
MOVBX,0
TRANSF2:
JMPTRANSF_OK
TRANSF_ERR:
MOVBX,-1
TRANSF_OK:
POPSI
POPCX
ret
TRANS10TO16endp
MULAXI PROCNEAR
PUSHCX
PUSHAX
MOVAX,DX
MULBX
MOVCX,AX
POPAX ;
XORDX,DX
MULBX
PUSHAX
MOVAX,CX
ADDAL,DL
ADCAH,DH
MOVDX,AX
POPAX
POPCX
ret
MULAXIendp
DISPCR PROCNEAR
PUSHAX
PUSHDX
MOVAH,2
MOVDL,0AH
INT21H
MOVAH,2
MOVDL,0DH
INT21H
POPDX
POPAX
ret
DISPCRendp
ADISP PROCFAR
PUSHAX
PUSHCX
PUSHDX
PUSHBX
LEASI,BUF+7
MOVBX,10000
DIVBX
PUSHAX
MOVAX,DX
XORDX,DX
MOVBX,10
MOVCX,4
L1:
DIVBX
MOV[SI],DL
XORDL,DL
ADDBYTEPTR[SI],30H
DECSI
LOOPL1
CMPSI,OFFSETBUF
JCL2
POPAX
MOVCX,4
JMPL1
L2:
LEADX,BUF
MOVAH,09H
INT21H
POPBX
POPDX
POPCX
POPAX
retf
ADISPendp
CODE ENDS
ENDSTART
五、实验体会
实验中遇到的问题以及解决方法:
在这几次的编程实验中,我遇到了许多问题。
首先,在最开始的时候,无论怎么输入都显示:
‘masm’不是内部或外部命令,也不是可运行的程序或批处理文件。
后来发现把自己编写的asm文件放到E盘masm文件夹里就行了,之后的每一步实验按照要求一步一步做,就都能出来结果。
还有就是不懂得如何输出自己所得到的结果,于是先抄写课本上所给的程序,当出现自己想要的结果之后,再与同学讨论输出结果的语句,充分理解其内涵。
心得体会:
通过几次的上机实验课,我懂得了如何使用txt文档编写asm文件。
然后对其进行编译和连接。
当完成上述过程后,可以使用DEBUG功能来对程序进行调试,这样,就可以清楚地看到每一步运行时各个寄存器的状态。
同时,通过自己编译程序,我能够更好地理解课本中的许多程序,也能够自己编写一些简单的程序。
总而言之,通过这几次的上机实验课,我学会了通过用计算机编译程序来处理自己在理论课学习上遇到的各种问题。
希望在以后的实验中能够积累的越来越多,对此体会也越来越深。