实验一两个多位十进制数相加的实验

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验一两个多位十进制数相加的实验

一、实验目的

1、学习数据传送和算术运算指令的用法。

2、熟悉在PC机上建立、汇编、链接、调试和运行汇编语言程序的过程。

二、实验内容

将两个多位十进制数相加,要求被加数和加数均以ASCII码形式各自顺序存放在以DATA1、DATA2为首的5个内存单元中(低位在前),结果送回DATA1处。

三、程序框图

四、程序清单

DATA SEGMENT ;定义数据段DATA1 DB 33H,39H,31H,37H,34H ;被加数DATA1END EQU $-1

DATA2 DB 34H,35H,30H,38H,32H ;加数DATA2END EQU $-1

SUM DB 5 DUP() ;定义5个空字节DATA ENDS

STACK SEGMENT ;定义堆栈段

STA DB 20 DUP() ;取从STA开始的20个字节为堆栈段

TOP EQU LENGTH STA ;将堆栈段长度存放在TOP中

STACK ENDS ;堆栈段定义结束

CODE SEGMENT ;定义程序代码段

ASSUME CS:CODE,DS:DATA,SS:STACK,ES:DATA ;表明程序代码段与段地址之间的关系START: MOV AX,DATA

MOV DS,AX ;将段地址送入段地址寄存器

MOV AX,STACK

MOV SS,AX ;将当前堆栈段首地址送入SS

MOV SP,AX ;将堆栈段首地址送入堆栈指针寄存器

MOV SI,OFFSET DATA1END ;将DATA1的偏移地址送入SI

MOV DI,OFFSET DATA2END ;将DATA2的偏移地址送入DI

CALL ADDA ;调用子程序ADDA

MOV AX,4C00H

INT 21H ;中断调用

ADDA PROC NEAR ;子程序段

MOV DX,SI ;DX=0004H

MOV BP,DI ;BP=0009H

MOV BX,05H ;程序调用次数

AD1: SUB BYTE PTR[SI],30H ;将被加数的ASCII码转换成十六进制数

SUB BYTE PTR[DI],30H ;将加数的ASCII码转换成十六进制数

DEC SI ;SI中的内容自减1

DEC DI ;DI中的内容自减1

DEC BX ;程序调用次数自减1

JNZ AD1 ;条件转移

MOV SI,DX ;回到初始位置

MOV DI,BP

MOV CX,05H ;循环次数控制

CLC ;清除CF位

AD2: MOV AL,[SI]

MOV BL,[DI]

ADC AL,BL ;从低位开始进行带进/借位的加法运算

AAA ;转换成非压缩BCD码,低位存于AL,高位存于AH MOV [SI],AL ;将AL中的内容存入SI所在地址

DEC SI ;偏移地址自减

DEC DI ;偏移地址自减

LOOP AD2 ;循环控制指令

MOV SI,DX

MOV DI,BP

MOV BX,05H

AD3: ADD BYTE PTR[SI],30H ;将16进制数转换为ASCII码表示 ADD BYTE PTR[DI],30H

DEC SI ;偏移地址自减

DEC DI

DEC BX

JNZ AD3

RET ;返回指令

ADDA ENDP ;结束子程序

CODE ENDS ;结束程序代码段

END START

五、实验结果(截屏--软件实验或者拍照---硬件实验)

六、实验结果分析(预期结果与实际结果的对照)

1、数据段分析

用ASCII码值的形式表示被加数和加数

被加数=39174;加数=45082

2、堆栈段分析

用于存放计算过程中的过程量。

3、程序代码段分析

1)从低位起,将被加数和加数转换成十六进制数

被加数和加数转换各位转换成十六进制数表示。

2)从低位起进行各个位上的带进位的加法运算

得到的结果的各位上的十六进制表示形式。

3)将结果的各个位上的数转换成ASCII码的形式得到最后的结果

实验得到的最后的结果是39174+45082=84256。

七、实验心得体会

通过本次实验,我对汇编有了更物理化的认识,也明白了汇编中各个寄存器的作用及寄存器间是怎样联系的,也初步明白了什么是段地址,什么是堆栈,以及汇编的基本结构和循环结构的基本运用。但是,我的了解只是初步的,汇编中还有很多我不明白和不了解的地方,最重要的是,汇编语句掌握不牢固,不能很快的知道一些专用的汇编语句的意义,对于宏方面的认识也非常薄弱,还需要在今后的实验和学习中不多的学习和练习。

相关文档
最新文档