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