汇编中数组的加法运算-包含进位

来源:互联网 发布:粉笔软件下载事业单位 编辑:程序博客网 时间:2024/06/11 22:07
;***************************************************************
TITLE 数组求和
;***************************************************************

;***************************************************************
;*程序的运行环境,最低环境是386,数据段和代码段公用4GB空间,函数
;*是stdcall的调用方式,大小写敏感
.386
.model flat,stdcall
option casemap:None
;***************************************************************


;***************************************************************
;*文件包含
INCLUDE Irvine32.inc
;***************************************************************

;***************************************************************
;*数据段定义
.data
arrayB byte 0F0h,0F0h,30h
arrayBLength byte $-arrayB
;***************************************************************

;***************************************************************
;*代码段
.code

main proc  
  ;*ebx清空,存放结果
  xor ebx,ebx
  ;*将自动计数器清空
  xor ecx,ecx
  ;*获得数组长度
  mov cl,arrayBLength;
  ;*数组索引应该是长度-1,作为指向数组中最后一个元素
  dec cl;
  mov esi,offset arrayB;  
  SumOut:
  mov al,[esi+ecx]
  ;*取数组元素  
  add bl,al;
  ;如果产生了进位则要进行进位
  jc L1;
  jmp L2;
  L1:
    inc bh;
  L2:
  loopd SumOut;
  ;因为当cx是1的时候不再执行,也就是说第一个元素没有计算到
  add bl,[esi];
  jc L3;
  jmp L4;
  L3:
    inc bh
  L4:
  invoke DumpRegs
  exit  
main endp
end main

;***************************************************************


另一个数组运算程序

;************************************************************************
;*程序运行平台要求
.386
.model flat,stdcall
option casemap:none
;************************************************************************

;************************************************************************
;*包含文件
INCLUDE Irvine32.inc
INCLUDELIB kernel32.lib
INCLUDELIB user32.lib
INCLUDELIB msvcrt.lib
;************************************************************************

;************************************************************************
;*数据段定义
.DATA
source BYTE "123456789",0
target BYTE 10 DUP(0)
;************************************************************************


;************************************************************************
;*代码段定义
.code
main proc    
   ;*目的地址的索引值
   MOV edi,0
   MOV ecx,sizeof source
   dec ecx
   L1:
      MOV al,source[edi];
      MOV target[edi],al;
      INC edi;
   loopw L1;  
   mov edx,offset target
   invoke printf,edx;
   invoke ExitProcess,0
main endp
end main
;************************************************************************


原创粉丝点击