首页 > 编程语言 >汇编中数组的加法运算-包含进位

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

时间:2023-04-03 17:41:42浏览次数:37  
标签:汇编 edi mov MOV 数组 加法 main 进位 ecx

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

 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

相关文章

  • 我的第一个win32汇编程序
    .386.ModelFlat,stdcalloptioncasemap:none;头文件包含includewindows.incincludekernel32.incincludelibkernel32.libincludeuser32.incincludelibuser32.libincludegdi32.incincludelibgdi32.lib;数据段定义.datahInstancedd......
  • 汇编延时输出随机数
    ;***********************************************************************;TITLE生成20个随机数;***********************************************************************;***********************************************************************;程序运行......
  • win32汇编语言学习之二
        对于汇编语言来说win32环境中只有一种类型,那就是32位整数,例如MessageBoxA的四个参数HWND,LPCTSTR,LPCTSTR,UINT之所以定义成不同的摸样主要是为了说明其用途,我们在汇编环境下调用MessageBoxA时,DOS状态下会是这样的:  pushuType  pushlpCaption  pushlpText ......
  • 有进位的高精度加法
    【问题描述】有两个位数在200以内的高精度数a和b,请编程求出a与b之和。输入:两行,第一行为a,第二行为b。输出:一行,表示a与b之和C。注意:a与b的位数不一定相同。【输入样例】省略【输出样例】省略#include<iostream>#include<cstring>usingnamespaces......
  • 逆向——C语言的汇编表示之堆栈图 手把手示例 可以考虑在函数内部加一个局部变量来综
    课程概要来自:https://gh0st.cn/Binary-Learning/C%E8%AF%AD%E8%A8%80.html写得非常详细本章课程需要具备汇编语言基础,若无汇编语言基础是无法去理解课程中所讲的一些知识点和技术细节的;同时也表示本课程是以汇编语言来理解C语言,透过本质理解高级语言。关于本节课的环境:VC6,VC6......
  • C语言逆向分析——IF条件语句的反汇编,要熟悉各种if的姿势以及与或非表达式组合
    第四课IF语句的反汇编判断  第四课练习1intplus(intY,intX){intN=t;if(X<Y)t=t+Y;//t=N+yC}voidmain(){plus(5,4);}第五课IF...ELSE...语句的反汇编判断IF…ELSE…语句的反汇编判断:  ......
  • 16 同步与互斥(二) 内联汇编
    汇编参考GCC工具链使用1引入内联汇编即在C函数中使用汇编去实现某些功能。为什么需要在C代码中引入汇编?C语言在大多数的时候效率都很高,但在某些情况下直接使用汇编效率会更加高效部分功能通过C语言很难实现,这部分代码就需要使用汇编去实现(实现某些功能)在C文件中使用汇编......
  • C语言逆向——如何寻找main入口,一个反汇编成C的实战练习
    第二节2.3找程序的入口原文:https://www.showdoc.com.cn/fengxin1225/7054696489361869控制台应用程序的main函数入口在OD中找到以上其他中的函数,然后跟着3个参数的CALL就是main例:———————————————————- 第二节2.4.1逆向并还原为C代码(网上解答)......
  • 8086汇编计算次方,模块化设计
    就是把dw那一行的每个字的数据,求三次方,然后存到dd那一行assumecs:code,ds:datadatasegment dw1,2,3,4,5,6,7,8 dd0,0,0,0,0,0,0,0;;双字,32位dataendscodesegmentmain: movax,data movds,ax callcul;;放到子程序里计算 movax,4c00h int21hcul:......
  • C语言逆向汇编——参数局部变量、函数堆栈、调用约定和内嵌汇编码
    第一节1.1C语言1、注意参数和局部变量在堆栈中的存储方式2、参数在调用函数前就已经存入堆栈,从[EBP+8]、[EBP+C]、……开始。3、局部变量是在调用函数后,存入缓冲区里,从[EBP-4]、[EBP-8]、……开始4、函数运算得到的结果,通常存在EAX里。        第一......