微机原理上机--汇编语言程序--编写程序求两个十进制数之和-并将和以十进制数的形式送屏幕显示
}
上机作业二
一.实验目的
1.熟练掌握汇编语言程序设计的方法及上机步骤。
2.掌握算术运算指令的应用。
3.掌握子程序的设计方法。
4.掌握DOS功能的调用方法。
二.\
三.试验仪器
586微机一台
四.实验内容
编写程序求两个十进制数之和,并将和以十进制数的形式送屏幕显示。
编程要求与提示:
[1] 从键盘输入两个十进制数(如与),以二进制数形式存放在ADD1和ADD2为首址的存贮器单元,输入一个十进制数采用子程序形式。
[2] 和以二进制数的形式存入SUM以下单元。
&
[3] 将和送到屏幕显示采用子程序形式。
[4] 实验步骤如下:
a. 用全屏幕编辑软件建立源程序。
b.用汇编程序对源程序进行汇编,形成目标程序。
c. 用连接程序对目标程序进行连接形成可执行文件。
d. 用DEBUG对连接通过的可执行程序进行调试。
五.源程序
;
STACK SEGMENT STACK 'STACK'
DW 100H DUP()
TOP LABEL WORD
STACK ENDS
DATA SEGMENT
FAKE DW 0
KEYBUFFER DB 100
{
DB
DB 100 DUP()
BUF DB 8 DUP(),'$'
ADD1 DW
ADD2 DW
A2 DW
SUM DW
\
S1 DW
STRING1 DB 'PLEASE input decimal data: $' DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK START:
MOV AX,DATA
—
MOV DS,AX
MOV ES,AX
MOV AX,STACK
MOV SS,AX
LEA SP,TOP
CALL INPUT1
CALL TRANS10TO16
^
MOV ADD1,AX
MOV A1,DX
CALL DISPCR
CALL INPUT1
CALL TRANS10TO16
MOV ADD2,AX
MOV A2,DX
…
CALL DISPCR
MOV SUM,AX
MOV S1,DX
ADD AX,ADD1
ADC DX,A1
MOV SUM,AX
MOV S1,DX
<
CALL far ptr ADISP
MOV AL,0
INT 21H
…
INPUT1 PROC NEAR
LEA DX,STRING1
MOV AH,09H
INT 21H
MOV AH,0AH
LEA DX,KEYBUFFER
INT 21H
LEA SI,KEYBUFFER+1
:
ret
INPUT1 endp
TRANS10TO16 PROC NEAR PUSH CX
PUSH SI; PUSH BX
XOR AX,AX
~
XOR DX,DX
XOR CX,CX
MOV CL,[SI]
INC SI
MOV AL,[SI]
INC SI
SUB AL,30H
DEC CX
,
JCXZ TRANSF2
MOV BX,10
TRANSF1: CALL MULAXI PUSH DX
JO TRANSF_ERR
MOV DL,[SI]
INC SI
:
SUB DL,30H
ADD AL,DL
JC TRANSF_ERR
POP DX
LOOP TRANSF1
MOV BX,0
TRANSF2: JMP TRANSF_OK "
TRANSF_ERR: MOV BX,-1 TRANSF_OK: POP SI
POP CX
ret
TRANS10TO16 endp
MULAXI PROC NEAR
PUSH CX
,
PUSH AX
MOV AX,DX
MUL BX
MOV CX,AX
POP AX ;
XOR DX,DX
MUL BX
PUSH AX
、
MOV AX,CX
ADD AL,DL
ADC AH,DH
MOV DX,AX
POP AX
POP CX
ret
.
MULAXI endp
DISPCR PROC NEAR
PUSH AX
PUSH DX
MOV AH,2
MOV DL,0AH
INT 21H
【
MOV AH,2
INT 21H
POP DX
POP AX
ret
DISPCR endp
。
ADISP PROC FAR PUSH AX
PUSH CX
PUSH DX
PUSH BX
LEA SI,BUF+7
MOV BX,10000
)
DIV BX
PUSH AX
MOV AX,DX
XOR DX,DX
MOV BX,10
MOV CX,4
L1: DIV BX
MOV [SI],DL
)
XOR DL,DL
ADD BYTE PTR [SI],30H DEC SI
LOOP L1
CMP SI,OFFSET BUF
JC L2
POP AX
MOV CX,4
JMP L1
L2:
LEA DX,BUF
MOV AH,09H
INT 21H
POP BX
POP DX
POP CX
POP AX
retf
ADISP endp
CODE ENDS
END START
五、实验体会
实验中遇到的问题以及解决方法:在这几次的编程实验中,我遇到了许多问题。首先,在最开始的时候,无论怎么输入都显示:‘masm’不是内部或外部命令,也不是可运行的程序或批处理文件。后来发现把自己编写的asm文件放到E盘masm文件夹里就行了,之后的每一步实验按照要求一步一步做,就都能出来结果。还有就是不懂得如何输出自己所得到的结果,于是先抄写课本上所给的程序,当出现自己想要的结果之后,再与同学讨论输出结果的语句,充分理解其内涵。
心得体会:通过几次的上机实验课,我懂得了如何使用txt文档编写asm文件。然后对其进行编译和连接。当完成上述过程后,可以使用DEBUG功能来对程序进行调试,这样,就可以清楚地看到每一步运行时各个寄存器的状态。同时,通过自己编译程序,我能够更好地理解课本中的许多程序,也能够自己编写一些简单的程序。总而言之,通过这几次的上机实验课,我学会了通过用计算机编译程序来处理自己在理论课学习上遇到的各种问题。希望在以后的实验中能够积累的越来越多,对此体会也越来越深。