zoukankan      html  css  js  c++  java
  • 汇编 多位数相加

         上一次汇编写到,只是个位数的简单相加,只需要判断两者相加有无进位,进位即进一,在输出窗口输出一先。遇到多位数后,会变复杂很多,事实上汇编里面可以实现相加,难题在于需要把和转成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码,输出。

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

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

       

  • 相关阅读:
    找轮转后的有序数组中第K小的数
    linux下安装tomcat,并设置自动启动
    maven中添加proguard来混淆代码
    Maven编译可执行jar
    Maven pom项目部署
    Eclipse主题设置
    double hashing 双重哈希
    推荐系统
    vim插件
    多标记学习--Learning from Multi-Label Data
  • 原文地址:https://www.cnblogs.com/snake-hand/p/3206759.html
Copyright © 2011-2022 走看看