移位指令实现乘法

移位指令实现乘法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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • C# ManualResetEvent

    C# ManualResetEvent原文链接http://dotnetpattern.com/threading-manualreseteventManualResetEvent和AutoResetEvent一样,是另外一种.NET线程同步技术。ManualResetEvent被用于在两个或多个线程间进行线程信号发送。多个线程可以通过调用ManualResetEvent对象的WaitOne方法进入等待或阻塞状态。当…

    2022年7月13日
    20
  • java如何向数组里添加元素

    java如何向数组里添加元素java篇哇,菜鸟第一次写这个东西,当加深印象,大佬们请略过,欢迎有错指出。向数组里添加一个元素怎么添加,这儿总结有三种方法:1、一般数组是不能添加元素的,因为他们在初始化时就已定好长度了,不能改变长度。但有个可以改变大小的数组为ArrayList,即可以定义一个ArrayList数组,然后用add(element)方法往里添加元素即可,还可add(index,element)往指…

    2022年6月9日
    115
  • PHP常用的开发工具_小程序开发工具有哪些

    PHP常用的开发工具_小程序开发工具有哪些互联网的流行使得,软件程序发的需求也越来越大,其中PHP程序开发就是一个先例。PHP是英文超级文本预处理语言HypertextPreprocessor的缩写。PHP是一种HTML内嵌式的语言,

    2022年8月3日
    6
  • Vue项目实战 —— 哔哩哔哩移动端开发—— 第一篇

    Vue项目实战 —— 哔哩哔哩移动端开发—— 第一篇撑着下班前半小时我用vue写《哔哩哔哩项目》移动端、新手还在哭、老鸟一直在笑。。。技术选型Vue2,技术栈有axios、Vh等,下班过来敲哈哈

    2022年6月24日
    27
  • 全网最详细ENSP安装教程,零基础网工小白必看![通俗易懂]

    全网最详细ENSP安装教程,零基础网工小白必看![通俗易懂]全网最详细ENSP安装教程,零基础网工小白必看!学习更多网络技术,扫码即可免费报名听课,更多资料加QQ群414605852材料准备在下载ENSP之前先安装这3个软件1.1.安装WinPcap1.2.安装Wireshark1.3.安装VirtualBoXENSP安装2.1.软件安装2.2.设备注册在注册设备之前,先保证没有任何设备在界面上然后点击菜单—>工具—>注册设

    2022年10月14日
    4
  • 对c语言中static函数的理解「建议收藏」

    对c语言中static函数的理解「建议收藏」先看看前两篇博客:个人对头文件的理解、对声明和定义的理解。static函数只在定义该static函数的cpp中可见,在其他cpp中是不可见的。举个例子,我建立了一个project,该projec

    2022年7月4日
    23

发表回复

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

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