• 汇编 多位数相加


         上一次汇编写到,只是个位数的简单相加,只需要判断两者相加有无进位,进位即进一,在输出窗口输出一先。遇到多位数后,会变复杂很多,事实上汇编里面可以实现相加,难题在于需要把和转成ASCII码显示在dos窗口。所以需要把和一个一个数提取,转成ASCII。程序如下:

    DATAS SEGMENT	
        	OP1 DW 255
        	OP2 DW 366
        	RESULT DW 10 DUP(?)		 定义一个RESULT数组,长度为10个字节
    DATAS ENDS
    
    STACKS SEGMENT
        
    STACKS ENDS
    
    CODES SEGMENT
        ASSUME CS:CODES,DS:DATAS,SS:STACKS
    START:
        MOV AX,DATAS	
        MOV DS,AX
        MOV AX,OP1
        ADD AX,OP2			OP1和OP2相加后附加到AX
        MOV BX,0
        MOV CL,10			将10附加到CL
      	
      	
    SS1:
    DIV CL		         		AX除以10
    ADD AH,30H       			余数转为ASCII码,
    MOV SI, OFFSET RESULT		保存到RESULT数组。
    MOV [SI+BX],AH  			商取代结果
    INC BX            			BX递增
    	MOV AH,0				将AH清空,以便将下一次的商附加进去
    	CMP AL,0				比较余数是否零,是则跳出循环
    	JNZ SS1
    
    SS2:DEC BX					BX递减
    	MOV DX,[SI+BX]	将RESULT数组从最高位开始附加到DX
    	MOV AH,2				字符串输出
    		INT 21H
    	
    	CMP BX,0				判断BX是否为零,是则跳出
    		JNZ SS2
    	
    	MOV AH,4CH		
            INT 21H
    CODES ENDS
        END START				正常结束程序
    
    
    
    


             程序的思想有点像进制转换,要把数字一个一个从和中提取,由于是十进制,可以将和除以10,所得的余数依次为个位开始的数字,最后,只需要把数字存入数组,用栈式的读取,最后存的先读,为最高位,转成ASCII码,输出。

        个位数相加当然也可以用这种方法,但是没必要这么复杂。所以第一个程序很简单的判断一下进位即可。

        原来一个多位数的相加之后的显示是如此的精妙!

       

  • 相关阅读:
    P2048 [NOI2010]超级钢琴
    [LOJ#6468.] 魔法
    [牛客小白月赛18] Forsaken的数列
    [JSOI2011]柠檬
    [TJOI2015]组合数学
    【单调队列优化】[CF372C] Watching Fireworks is Fun
    【线段树】[Luogu P4198]楼房修建
    Python资源
    人生的几个阶段
    两种解读,生活的意义和方法
  • 原文地址:https://www.cnblogs.com/snake-hand/p/3206759.html
Copyright © 2020-2023  润新知