微机原理上机--汇编语言程序--编写程序求两个十进制数之和-并将和以十进制数的形式送屏幕显示

微机原理上机--汇编语言程序--编写程序求两个十进制数之和-并将和以十进制数的形式送屏幕显示
微机原理上机--汇编语言程序--编写程序求两个十进制数之和-并将和以十进制数的形式送屏幕显示

}

上机作业二

一.实验目的

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功能来对程序进行调试,这样,就可以清楚地看到每一步运行时各个寄存器的状态。同时,通过自己编译程序,我能够更好地理解课本中的许多程序,也能够自己编写一些简单的程序。总而言之,通过这几次的上机实验课,我学会了通过用计算机编译程序来处理自己在理论课学习上遇到的各种问题。希望在以后的实验中能够积累的越来越多,对此体会也越来越深。

相关主题
相关文档
最新文档