【Win32汇编】数组求和函数

本文介绍了一个32位数组求和的汇编语言函数实现,使用esi寄存器保存数组偏移,ecx寄存器保存数组长度并用于loop计数,eax寄存器返回求和结果。通过push和pop操作保存与恢复寄存器值,确保函数调用前后寄存器状态不变。

32位数组求和函数,esi 保存数组偏移,ecx 保存数组长度,同时用于 loop 计数, eax 返回和。

.386
.model flat, stdcall
.stack 4096
ExitProcess proto, dwExitCode:DWORD

.data
array DWORD 10000h, 20000h, 30000h, 40000h, 50000h
theSum DWORD ?

.code
main PROC
mov esi, offset array	;// esi 作为参数保存数组地址
mov ecx, lengthof array	;// ecx 是数组长度参数
call ArraySum
mov theSum, eax


invoke ExitProcess, 0
main ENDP

ArraySum PROC
push esi				;// 如果不希望函数修改寄存器,则用栈保存,返回时恢复
push ecx
mov eax, 0				;// sum = 0

L1:
add eax, [esi]
add esi, type dword
loop l1

pop ecx
pop esi
ret
ArraySum ENDP

end main

函数中使用push pop 临时保存寄存器的值,并在ret前恢复。也可以用uses伪指令代替,让汇编器自动添加push pop。

在这里插入图片描述

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值