2.程序流程图如图所示。
3.参考程序。
;PCS3-2
ORG 0100H START:MOV CX,0004H MOV DI,0150H AA: MOV AL,[DI] ADD AL,AL MOV BL,AL ADD AL,AL ADD AL,AL
ADD AL,BL
INC DI
MOV AH,00H ADD AL,[DI]
MOV [DI+14H],AX INC DI LOOP AA
MOV AH,4CH
INT 21H
ORG 0150H
DB 03H,06H,08H,09H,06H,05H,02H,09H
三、思考题
1.本实验中用DEBUG软件输入的程序的起始地址等于多少?最初四个段寄存器的初始化值有何特点?
2.DEBUG状态下输入的程序属哪一种可执行文件?它有几个段?这种文件第一条可执行指令必须位于何处?
3.画出循环程序结构框图。 四、实验报告
6
1.打印程序清单。 2.回答思考题。
3.总结本实验主要收获。
注:将(一)程序改写为标准汇编语言程序格式。
7
实验四 两个多位十进制数相加
一、实验目的
1.学习并掌握数据传送指令和算术运算指令的用法。
2.熟悉在PC机上建立、汇编、链接和运行8088汇编语言程序的过程。 二、实验内容
将两个多位十进制数相加,并在屏幕上显示加数、被加数以及和。已知被加数和加数均以ASCII码形式存放在DATAl和DATA2为首的单元中(低位位于低地址),结果送回DATAl 处。
三、编程提示
1.因被加数和加数均以ASCⅡ码形式存放,所以在相加前必须转化为BCD码,此时用组合BCD码最适宜。未组合BCD码相加要用到AAA加法调整指令。 2.显示数据可用2号DOS功能调用。 3.程序流程图如图所示。
四、思考题
如果是减法,程序应如何修改?如果加数、被加数以组合BCD码形式存放在DATAl、DATA2缓冲区,程序应怎样修改?
五、实验报告-
1. 打印程序清单。 2.回答思考题。
3.调试程序中遇到什么问题?怎样解决的? 六、参考程序 ;PCS4.ASM CRLF MACR0
8
MOV DL,0DH MOV AH,02H
INT 21H
MOV DL,0AH MOV AH,02H INT 21H ENDM
DATA SEGMENT
DATAl DB 33H,39H,31H,37H,34H COUNT EQU$—DATA1
DATA2 DB 36H,35H,30H,38H,32H DATA ENDS
STACK SEGMENT STACK ’STACK’ DB 20 DUP(?) STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK,ES:DATA
START: MOV AX,DATA MOV DS,AX
MOV SI,OFFSET DATA2 MOV BX,COUNT CALL DISPL CRLF
MOV SI,OFFSET DATA1 MOV BX,COUNT CALL DISPL CRLF
MOV DI,OFFSET DATA2 CALL ADDA
MOV SI,OFFSET DATA1 MOV BX,COUNT CALL DISPL
CRLF
MOV AX,4C00H INT 21H
DISPL PROC NEAR DS1: MOV AH,02H
MOV DL,[SI+BX-1] INT 21H DEC BX JNZ DS1
RET
DISPL ENDP
ADDA PROC NEAR
9
MOV DX,SI MOV BP,DI
MOV BX,COUNT
AD1:SUB BYTE PTR[SI+BX-1],30H SUB BYTE PTR [DI+BX-1],30H DEC BX JNZ AD1 MOV SI,DX MOV DI,BP
MOV CX,COUNT CLC
AD2: MOV AL,[SI] ADC AL,[DI] AAA
MOV [SI],AL INC SI INC DI LOOP AD2 MOV SI,DX MOV DI,BP
MOV BX,COUNT
AD3:ADD BYTE PTR [SI+BX-1],30H ADD BYPE PTR [DI+BX-1],30H DEC BX JNZ AD3 RET ADDA ENDP CODE ENDS
END START
10