4位BCD码加法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验二 4位BCD码加法
实验目的:
1.掌握BCD码加法的编程方法。
2.掌握串操作指令的使用方法。
3.掌握简单循环结构编程方法。
实验设备:
计算机一台。
预装Windows XP、宏汇编MASM5。
实验内容A:
编写能够实现以下要求的汇编语言程序,并上机实现。
1.编写一个4位BCD码加法程序,并将结果输出到屏幕上。
2.给出两个4位BCD码加数,手工计算出结果,再用本程序获得结果,对照二者是否相同。
注意数的高、低位在内存中的放置规则。
实验内容B:
编写能够实现以下要求的汇编语言程序,并上机实现。
1.将参考程序中输出到屏幕部分修改成循环结构。
预习要求:
1.阅读实验内容A的参考源程序,对其结构以及实现方法进行分析,在理解的基础上掌握编程方法。
2.根据要求,编写实验内容B的源程序。
3.编辑建立实验内容A和实验内容B的源程序文件,存入U盘保存。
4.写出预习报告,报告中应有实验内容B的源程序清单。
实验步骤:
1.编辑建立实验内容A的源程序,对其进行汇编、链接获得可执行文件。
运行可执行文件,实现实验内容A的要求。
2.参考实验内容A的源程序,编辑建立实验内容B的源程序,对其进行汇编、链接获得可执行文件。
如果在汇编、链接过程中有错误产生,则根据提示信息逐一修改错误,直到无错误产生。
运行可执行文件,实现实验内容B的要求。
重要提示:
1.注意参加运算的数的高位~低位的放置规则。
2.参加运算的2个数的位数必须相同。
3.对于实验内容B,以[SI]为源操作数,每循环一次SI加1。
4.循环结构所用到的计数单元,不能与循环结构中所用到的单元冲突。
实验内容A参考程序:
NAME demo2
DATA SEGMENT
STRI1 DB 1,7,5,2 ;第1个加数,注意低位在前
STRI2 DB 3,8,1,4 ;第2个加数,注意应与第1个加数位数相同COUNT EQU $-STRI2 ;加数的位数
DATA ENDS
STACK SEGMENT PARA STACK 'STACK'
DB 100 DUP(?)
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,SS:STACK,DS:DATA,ES:DATA
START PROC FAR
PUSH DS
MOV AX,0
PUSH AX
GO: MOV AX,DATA
MOV DS,AX ;设置源串段基址
MOV ES,AX ;设置目的串段基址
MOV SI,OFFSET STRI1 ;设置源串首地址
MOV DI,OFFSET STRI2 ;设置目的串首地址
MOV CX,COUNT ;设置串长度
;
CLC ;为多字节加法预清进位标志CYCLE: MOV AL,[SI]
ADC AL,[DI]
AAA
MOV [DI],AL
INC SI
INC DI
LOOP CYCLE
MOV SI,OFFSET STRI2
MOV DL,[SI+3] ;输出千位
ADD DL,30H
MOV AH,2
INT 21H
MOV DL,[SI+2] ;输出百位
ADD DL,30H
MOV AH,2
INT 21H
MOV DL,[SI+1] ;输出十位
ADD DL,30H
MOV AH,2
INT 21H
MOV DL,[SI+0] ;输出个位
ADD DL,30H
MOV AH,2
INT 21H
RET
START ENDP
CODE ENDS
END START
实验B参考程序
DATA SEGMENT
STRI1 DB 1,7,5,2 ;第1个加数,注意低位在前
STRI2 DB 3,8,1,4 ;第2个加数,注意应与第1个加数位数相同
COUNT EQU $-STRI2 ;加数的位数
DATA ENDS
STACK SEGMENT PARA STACK 'STACK'
DB 100 DUP(?)
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,SS:STACK,DS:DATA,ES:DATA
START PROC FAR
PUSH DS
MOV AX,0
PUSH AX
GO: MOV AX,DATA
MOV DS,AX ;设置源串段基址
MOV ES,AX ;设置目的串段基址
MOV SI,OFFSET STRI1 ;设置源串首地址
MOV DI,OFFSET STRI2 ;设置目的串首地址
MOV CX,COUNT ;设置串长度
;
CLC ;为多字节加法预清进位标志
CYCLE: MOV AL,[SI]
ADC AL,[DI]
AAA
MOV [DI],AL
INC SI
INC DI
LOOP CYCLE
MOV SI,OFFSET STRI2
mov bx,4
lp1: MOV DL,[SI+3] ADD DL,30H
MOV AH,2
INT 21H
dec SI
dec bx
jnz lp1
RET
START ENDP
CODE ENDS
END START。