4位BCD码加法
- 格式:doc
- 大小:36.50 KB
- 文档页数:4
实验二 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