当前位置: 首页 > 图文教程 > 开发语言 > 汇编语言 > 汇编实现字节数组相加

汇编语言
汇编语言的"多"层结构与理解
汇编语言上机指导及例示
汇编语言与Qbasic语言的接口技术
DEBUG命令详解
用汇编编写DOS下的内存驻留程序(1)
用汇编编写DOS下的内存驻留程序(2)
教你如何分析未文档化的数据结构
汇编语言实现字符串的拷贝
汇编实现字节数组相加
汇编多模块编译,连接
808x汇编指令
关于汇编语言和IL的异同点
汇编语言的优缺点
汇编语言概述
GCC内嵌汇编语言
Linux 汇编语言开发
汇编语言与C语言的混合使用
怎么才能把汇编学好呢?
ARM汇编伪指令介绍
Win32汇编语言教程

汇编语言 中的 汇编实现字节数组相加


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-08-14   浏览: 473 ::
收藏到网摘: n/a

为了实现字节数组的求和,须要先将要加的数放入数据段的一个字节数组中,然后用SI指向此数组的首地址,依次递增,将累加和放入一个寄存器.本程序功能有限,主要是用到了子程序,这就要求对现场进行保护,在子程序执行完后还要RET,恢复其现场,当然本程序没有这么复杂,只是将求和与显示分别作成了一个子程序,

       当然我写的这个DISP子程序还有很多不足的地方,只能显示10以下的数,超过10将会显示出乱码,因为出于时间关系没有对其进行完善,这就要用到代码转换的内容了,因为你要用不同的进制进行显示需要进行不同的处理,可能有人会问了,为什么汇编要转换呢,因为在计算机里都是以二进制进行存储的,而显示是显示的字符的ASCII码,如果不进行转换肯定会显示乱码的.

      现在大体上说一下代码转换的思路,我们先取出四位,你可以采取循环移位的方式,这样便可轻松的取出高四位,再对其进行判断,当是数字时对其加30H,是字符的时候对其加37H,这是由ASCII表决定的,如果你不信,可以查询一下ASCII表计算试试看.这样我们就可以以任十六进制显示数字了,至于转换成其它码制以后再叙.

      下面有一示例程序,完成一组数相加的功能,还有很多不足之处,见谅!

 


 



Java代码

 


       
  1. DATAS SEGMENT    
       
  2.     BUF DB 1,2,3,1,1,0,1  
       
  3.     COUNT EQU ($-BUF)-1  
       
  4.     QUESTION DB 13,10,13,10,13,10,'1+2+3+1+1+0+1 ='  
       
  5.     RESULT  DB ?   
       
  6.             DB '$'  
       
  7. DATAS ENDS   
       
  8. ;-------------   
       
  9. CODES SEGMENT   
       
  10.     ASSUME DS:DATAS,CS:CODES   
       
  11. START:   
       
  12.     MOV AX,DATAS   
       
  13.     MOV DS,AX      
       
  14.     XOR CX,CX   
       
  15.     XOR AX,AX   
       
  16.     LEA SI,BUF   
       
  17.     MOV CX,COUNT   
       
  18.     CALL SUM    ;调用求和子程序   
       
  19.     MOV RESULT,BL ;将结果存入RESULT存储单元   
       
  20.     CALL DISPLAY   ;调用显示子程序   
       
  21.     MOV AH,1  
       
  22.     INT 21H   
       
  23. [img]/upload/attachment/90267/fc243365-aaa4-315d-b24c-1215dc2b4620.bmp[/img]   
       
  24.   
       
  25.     MOV AH,4CH   ;RETURN TO DOS   
       
  26.     INT 21H   
       
  27.     ;-----------SUM BEGIN----------------   
       
  28.     ;子程序一   
       
  29.     ;作用:计算总和   
       
  30.     ;入口参数:SI,CX   
       
  31.     ;出口参数:AX   
       
  32.     SUM PROC   
       
  33.     MOV BX,0  
       
  34.     ADD BL,[SI]   
       
  35. NEXT:   
       
  36.     INC SI    
       
  37.     ADC BL,[SI]   
       
  38.     LOOP NEXT   
       
  39.     RET   
       
  40.     SUM ENDP   
       
  41.     ;-------------SUM END----------------   
       
  42.     ;------------- DISPLAY BEGIN---------   
       
  43.     ;子程序二   
       
  44.     ;作用:十进制显示   
       
  45.     ;入口参数:RESULT   
       
  46.     ;出口参数:NONE   
       
  47.     DISPLAY PROC   
       
  48.     XOR DX,DX   
       
  49.        
       
  50.     MOV DX,OFFSET QUESTION   
       
  51.     MOV AH,09H   
       
  52.     INT 21H   
       
  53.     MOV DL,[RESULT]   
       
  54.     ADD DL,30H   
       
  55.     MOV AH,2H   
       
  56.     INT 21H   
       
  57.     RET   
       
  58.     DISPLAY ENDP   
       
  59.     ;-------------DISPLAY END-------------     
       
  60. CODES ENDS   
       
  61.     END START