移位指令实现乘法

移位指令实现乘法includeirvine32.inc;.dataidword0;sumqword0;str1byte”请输入16进制的(32位整数)乘数和被乘数”,0str2byte”乘积为:”,0;jdword0;.codemainprocL1:movedx,offsetstr1;callwritestring;movj,0;moveax,0;eax为…

大家好,又见面了,我是你们的朋友全栈君。

include irvine32.inc;
.data
i dword 0;
sum qword 0;
str1 byte “请输入16进制的(32位整数)乘数和被乘数”,0
str2 byte “乘积为:”,0;
j dword 0;

.code

main proc

L1:
   mov edx,offset str1;
   call writestring;

   mov j,0;
   mov eax,0;eax为(低32位)乘积值;
   mov ebx,0;edx为(低32位)乘积值的中间值
   mov edx,0;
   mov esi,0;dsi为(高32位)乘积值的中间值
   mov edi,0;edi为(高32位)乘积值;
   mov cl,0;cl为移位的位数

   call readhex;
   cmp eax,80000000h;

   jna L4;
   neg eax;
   inc j;
L4:
   mov ebx,eax;    ebx存储乘数(来移位的)
   ;call writeint;

   call readhex;
   cmp eax,80000000h;

   jna L5;
   neg eax;
   inc j;
L5:
   mov i,eax;
   ;call writeint;
   mov eax,0;
   cmp ebx, 0;
   jne L2;
   cmp i,0;
   je  finally;

  L2: cmp ebx,0;
      jz quit;
      shr ebx,1;
      jnc next;if(ZF==0)

      mov esi,0;每次都要清零;
      mov edx,i;

      shld esi,edx,cl;
      shl edx,cl;

      add eax,edx;
      jnc L3;if(ZF==0)
      add edi,1;

 L3:
      add edi,esi;
next:
      inc cl;
      jmp L2;

quit:
     call crlf;
     mov edx,offset str2;
     call writestring;
     mov ebx,eax;

     cmp j,1;
     jne L6;
     add edi,80000000h
     ;call writestring
 L6:

     mov eax,edi;
     call writehex;

     mov eax,ebx;
     call writehex;

     call crlf;

     jmp L1;

finally:

exit
main endp;
end main

转载于:https://www.cnblogs.com/hqu-ye/archive/2013/02/25/2932588.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/136773.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • mysql读写分离配置

    mysql读写分离配置mysql读写分离配置随着网站访问和请求量的增加,单台数据库服务器的连接已耗尽,会出现连接请求还在等待,或是数据库服务器崩溃等现象,这时候我们考虑如何减少数据库的连接,可以通过优化代码、使用缓存、数据库读写分离等方式解决此问题。 什么是读写分离:将数据库的读、写操作分别作用到不同的数据库(不同物理机)上。 适用场景:读操作远大于写操作,包含大量复杂统计、离线计算等任务(比如定时按各维度对数…

    2022年6月9日
    39
  • 设计模式(4)-对象创建型模式-Prototype模式

    设计模式(4)-对象创建型模式-Prototype模式

    2022年1月22日
    51
  • 图像文字识别(二):java调用tesseract 识别图片文字

    图像文字识别(二):java调用tesseract 识别图片文字

    2021年9月26日
    480
  • java编译器——安装IDEA 步骤

    java编译器——安装IDEA 步骤1、从官网上下载ideaIU-2021.2.3,地址如下,点击download;IntelliJIDEA:TheCapable&ErgonomicJavaIDEbyJetBrainsACapableandErgonomicJavaIDEforEnterpriseJava,Scala,Kotlinandmuchmore…https://www.jetbrains.com/idea/图12、IntelliJIDEA是一款跨平台的开发工具,

    2022年7月15日
    47
  • try catch 对性能影响

    try catch 对性能影响引言之前一直没有去研究trycatch的内部机制,只是一直停留在了感觉上,正好这周五开会交流学习的时候,有人提出了相关的问题。借着周末,正好研究一番。讨论的问题当时讨论的是这样的问题:比较下面两种trycatch写法,哪一种性能更好。for(inti=0;i<1000000;i++){try{Ma

    2022年6月16日
    57
  • FinSH控制台「建议收藏」

    FinSH控制台「建议收藏」RT-ThreadFinSH使用一、FinSH内置命令二、自定义FinSH命令2.1自定义msh命令2.2自定义C-style命令三、FinSH功能配置  shell是用户与操作系统间接口的程序,它允许用户向操作系统输入需要执行的命令,并将操作系统的运行结果返回给用户。  FinSH就是RT-Thread的shell(命令行组件),在读取输入命令后,解析并自动扫描内部函数表,寻找对应函数…

    2022年5月11日
    49

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号