2025年4月14日 星期一 乙巳(蛇)年 正月十五 设为首页 加入收藏
rss
您当前的位置:首页 > 计算机 > 编程开发 > 汇编

汇编语言示例:整数数组求和

时间:03-05来源:作者:点击数:131

程序员在 C++Java 中编写过的非常常见的循环类型是计算整数数组之和。这在汇编语言中很容易实现,它可以被编码为按照尽可能快的方式来运行。比如,在循环内可以使用寄存器而非变量。

现在创建一个过程 ArraySum,从一个调用程序接收两个参数:一个指向 32 位整数数组的指针,以及一个数组元素个数的计数器。该过程计算和数,并用 EAX 返回数组之和:

  • ;------------------------------------
  • ;ArraySum
  • ;计算32位整数数组元素之和
  • ;接收:ESI = 数组偏移量
  • ; ECX = 数组元素的个数
  • ;返回:EAX = 数组元素之和
  • ;-------------------------------------
  • ArraySum PROC
  • push esi ;保存ESI和ECX
  • push ecx
  • mov eax,0 ;设置和数为0
  • L1: add eax,[esi] ;将每个整数与和数相加
  • add esi,TYPE DWORD ;指向下一个整数
  • loop L1 ;按照数组大小重复
  • pop ecx ;恢复ECX和ESI
  • pop esi
  • ret ;和数在EAX中
  • ArraySum ENDP

这个过程没有特别指定数组名称和大小,它可以用于任何需要计算32位整数数组之和的程序。只要有可能,编程者也应该编写具有灵活性和适应性的程序。

测试 ArraySum 过程

下面的程序通过传递一个 32 位整数数组的偏移量和长度来测试 ArraySum 过程。调用 ArraySum 之后,程序将过程的返回值保存在变量 theSum 中。

  • ;测试ArraySum过程
  • .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 ;用EAX返回和数
  • INVOKE ExitProcess,0
  • main ENDP
  • ;------------------------------------
  • ;ArraySum
  • ;计算32位整数数组元素之和
  • ;接收:ESI = 数组偏移量
  • ; ECX = 数组元素的个数
  • ;返回:EAX = 数组元素之和
  • ;-------------------------------------
  • ArraySum PROC
  • push esi ;保存ESI和ECX
  • push ecx
  • mov eax,0 ;设置和数为0
  • L1: add eax,[esi] ;将每个整数与和数相加
  • add esi,TYPE DWORD ;指向下一个整数
  • loop L1 ;按照数组大小重复
  • pop ecx ;恢复ECX和ESI
  • pop esi
  • ret ;和数在EAX中
  • ArraySum ENDP
  • END main
方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门