;***************************************************************
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
;************************************************************************
标签:汇编,edi,mov,MOV,数组,加法,main,进位,ecx
From: https://blog.51cto.com/u_15995156/6166881