一、实验目的
1.学习并掌握数据传送指令和算术运算指令的用法。
2.熟悉在PC机上建立、汇编、链接和运行8086汇编语言程序的过程。
二、实验内容
将两个多位十进制数相加,并在屏幕上显示加数、被加数以及和。己知被加数和加数均以ASCII码形式存放在DATA1和DATA2为首的单元中(低位位于低地址),结果送回DATAl处。
如:
DATA1 DB ‘2’,‘1’,‘4’,‘3’ ;两个两位十进制被加数以ASCII码保存
DATA2 DB ‘6’,‘5’,‘8’,‘7’ ;两个两位十进制加数以ASCII码保存
结果在屏幕上打印出:
12+56=68
34+78=112
结果为
三、编程提示
1.因被加数和加数均以ASCII码形式存放,所以在相加前必须转化为BCD码,此时用未组合BCD码最适宜。未组合BCD码相加要用到AAA加法调整指令。
2.显示数据可用2号DOS功能调用。
3.程序流程图如图所示。
接口技术实验四、加减运算实验

DATAS SEGMENT
    ;此处输入数据段代码  
    DATA1 DB '2','1','4','3' 
    DATA2 DB '6','5','8','4'
DATAS ENDS

CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS
START:
    MOV AX,DATAS
    MOV DS,AX
    MOV CX,0002H
    LEA SI,DATA1
    MOV SI,OFFSET DATA1
    LEA DI,DATA2
    MOV DI,OFFSET DATA2
    ;第一行开始
    MOV AX,[SI+1]   ;取1
    MOV AH,02H    ;输出1
	MOV DL,AL
	INT 21H
	MOV AX,[SI]   ;取2
	MOV AH,02H    ;输出2
	MOV DL,AL
	INT 21H
    
    MOV AH,02H    ;第一个'+'
	MOV DL,'+'
	INT 21H
	
	MOV AX,[DI+1]   ;取5
    MOV AH,02H    ;输出5
	MOV DL,AL
	INT 21H
	MOV AX,[DI]   ;取6
    MOV AH,02H    ;输出6
	MOV DL,AL
	INT 21H
    
    MOV AH,02H    ;第一个'='
	MOV DL,'='
	INT 21H
    
    MOV AX,[SI]   ;取2
    SUB AX,30H
	MOV BX,[DI]   ;取6
	SUB BX,30H
	ADD AL,BL
	AAA
	ADD AX,30H
	MOV [SI],AX
	
	MOV AX,[SI+1]   ;取1
    SUB AX,30H
	MOV BX,[DI+1]   ;取5
	SUB BX,30H
	ADD AL,BL
	AAA
	JNC NC0;CF!=0跳转
	ADD AX,30H
	MOV [SI+1],AX
	;结果输出  12+56=68
 	MOV AH,02H
 	MOV DL,'1'
 	INT 21H
 	MOV AH,02H
 	MOV DL,[SI+1]
	INT 21H
	MOV DL,[SI]
	INT 21H
	JMP L
 NC0:
  	ADD AX,30H
	MOV [SI+1],AX
    MOV AH,02H
	MOV DL,[SI+1]
	INT 21H
	MOV DL,[SI]
	INT 21H
	JMP L
	
  L:INC SI   ;SI,DI分别自增两次
	INC DI
	LOOP L
	;第一行结束
	
	MOV AH,02H
	MOV DL,0DH ;回车
	INT 21H
	MOV AH,02H
	MOV DL,0AH ;换行
	INT 21H
	
	;第二行开始
    MOV AX,[SI+1]   ;取3
    MOV AH,02H    ;输出3
	MOV DL,AL
	INT 21H
	MOV AX,[SI]   ;取4
	MOV AH,02H    ;输出4
	MOV DL,AL
	INT 21H
    
    MOV AH,02H    ;第二个'+'
	MOV DL,'+'
	INT 21H
	
	MOV AX,[DI+1]   ;取7
    MOV AH,02H    ;输出7
	MOV DL,AL
	INT 21H
	MOV AX,[DI]   ;取8
    MOV AH,02H    ;输出8
	MOV DL,AL
	INT 21H
    
    MOV AH,02H    ;第二个'='
	MOV DL,'='
	INT 21H
    
    MOV AX,[SI]   ;取4
    SUB AX,30H
	MOV BX,[DI]   ;取8
	SUB BX,30H
	ADD AL,BL
	AAA
	ADD AX,30H
	MOV [SI],AX
	
	MOV AX,[SI+1]   ;取3 其实是取4,因为之前进位1,3+1=4
    SUB AX,30H
	MOV BX,[DI+1]   ;取7
	SUB BX,30H
	ADD AL,BL
    AAA
    JNC NC1;CF!=0跳转
    ADD AX,30H
	MOV [SI+1],AX
 	MOV AH,02H
 	MOV DL,'1'
 	INT 21H
 	MOV AH,02H
 	MOV DL,[SI+1]
	INT 21H
	MOV DL,[SI]
	INT 21H
	JMP DOC
 NC1:
	ADD AX,30H
	MOV [SI+1],AX
	MOV AH,02H
 	MOV DL,[SI+1]
	INT 21H
	MOV DL,[SI]
	INT 21H
	JMP DOC
	
DOC:MOV AH,4CH
    INT 21H
CODES ENDS
    END START


相关文章:

  • 2021-07-14
  • 2021-06-01
  • 2021-11-04
  • 2021-11-12
  • 2021-08-22
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2021-04-18
  • 2022-12-23
  • 2022-12-23
  • 2021-06-29
  • 2021-12-08
  • 2021-08-08
相关资源
相似解决方案