预览加载中,请您耐心等待几秒...
1/4
2/4
3/4
4/4

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

实验一加法程序 一.实验目的 学习并掌握数据传送和算术运算指令的用法。编写多位十进制数相加程序。 二.实验内容 图2.1十进制数相加程序流程图 将两个多位十进制数28056,47193相加,并在屏幕上显示加数、被加数、和。要求两个操作数均以ASCII码形式各自顺序存放在DATA1和DATA2内存单元中,并将结果送回DATA1处(低位在前,高位在后)。 三.程序流程图 程序流程如图2.1所示。两操作数在内存中存放的情况如图2.2所示。 33H 39H 31H 37H 34H 36H 35H 30H 38H 32H 存储器 DATA1 DATA1 图2.2数据在内存中的存放情况 四、实验步骤 (1)进入DOS环境,如果计算机操作系统是在DOS环境下,则直接进入下一步即可。如果计算机操作系统是在Windows环境下,则打开“开始”菜单,选“运行”项,在“打开”栏中输入“CMD”,点击“确定”按钮,进入DOS环境; (2)将设计好的汇编语言程序用编辑器编辑; EDIT*.ASM,其中*号代表程序名,为任意1~8个字符,扩展名.ASM不可缺省。 进入编辑状态,输入汇编语言源程序,完成后,同时按“Alt+F”按钮,打开文件菜单,选择“Save”选项存盘,随后,选择“Exit”选项,退出编辑状态; (3)对源程序进行汇编链接; (4)执行并调试可执行文件。进入DOS全屏模式,运行可执行文件*.EXE,调试器运行和调试可执行文件*.EXE 。 五、参考程序 SHOW MACRO B ;宏定义 MOV DL,B ;B为要显示字符的ASCII码 MOV AH,02H INT 21H ;2号功能调用,在屏幕上显示一个字符 ENDM DATA SEGMENT ;数据段 DATA1 DB 33H,39H,31H,37H,34H ;被加数47193的ASCII码(倒序存放) DATA2 DB 36H,35H,30H,38H,32H ;加数28056的ASCII码(倒序存放) DATA3 DB '———',0DH,0AH,'$' DATA ENDS STACK SEGMENTSTACK ;堆栈段 STA DB20DUP(?) TOP EQULENGTHSTA 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 MOV AX,TOP MOV SP,AX MOV SI,OFFSETDATA2 ;取DATA2(加数)的偏移地址 MOV BX,05 ;设置地址指针,BX=5(加数为5位) SHOW 20H ;宏调用,显示“空格”(ASCII码为20H) CALL DISPL ;调显示子程序 SHOW 0DH ;宏调用,“回车” SHOW 0AH ;宏调用,“换行” MOV SI,OFFSETDATA1 ;取DATA1(被加数)的偏移地址 MOV BX,05 ;设置地址指针,BX=5(被加数为5位) SHOW 2BH ;宏调用,显示“+”(ASCII码为2BH) CALL DISPL ;调显示子程序 SHOW 0DH ;宏调用,“回车” SHOW 0AH ;宏调用,“换行” MOV CL,7 ;CL=7,显示7个“-”,构成直线 S1: SHOW 2DH ;宏调用,显示“-”(ASCII码为2DH) LOOP S1 ;CX-1→CX,CX≠0,转到标号S1 SHOW 0DH SHOW 0AH MOV SI,OFFSETDATA1 ;取DATA1(被加数)的偏移地址 MOV DI,OFFSETDATA2 ;取DATA2(加数)的偏移地址 CALL ADDA ;调加法程序 MOV SI,OFFSETDATA1 ;取DATA1的偏移地址,显示两数之和 SHOW 20H MOV BX,05 ;BX=5,设置地址指针 CALL DISPL ;调显示子程序 MOV AX,4C00H ;返回DOS INT 21H DISPL PROC NEAR ;显示子程序 DS1: SHOW [SI+BX-1] ;宏调用,倒序显示数据 DEC BX ;BX←BX-1 JNZ DS1 ;BX≠0,转到标号DS1,继续显示数据 RET DISPL