32位汇编用移位做乘法

misaki_526 2014-06-12 04:47:41
把这个溢出了的数值弄到edx
...全文
394 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2014-06-30
  • 打赏
  • 举报
回复
代码功能归根结底不是别人帮自己看或讲解或注释出来的;而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒:再牛×的老师也无法代替学生自己领悟和上厕所! 单步调试和设断点调试(VS IDE中编译连接通过以后,按F10或F11键单步执行,按Shift+F11退出当前函数;在某行按F9设断点后按F5执行停在该断点处。)是程序员必须掌握的技能之一。
大熊猫侯佩 2014-06-12
  • 打赏
  • 举报
回复
请参考我置顶的帖子: [置顶] [原创]初学者问题集以及一些编程思路 [推荐]
misaki_526 2014-06-12
  • 打赏
  • 举报
回复
为什么输出结果有些正确,有些错误
misaki_526 2014-06-12
  • 打赏
  • 举报
回复
以下是我的代码 include irvine32.inc .data input1 byte '请输入第一个数:', 0 input2 byte '请输入第二个数:', 0 array db 32 dup(0) array_sum dd 64 dup(0) .code main proc mov edx, offset input1 call writestring call readint mov ebx, eax ;ebx为乘数 mov edx, offset input2 call writestring call readint ;eax为被乘数 mov ecx, 32 xor edi, edi ;初始化开关数组的指针,CF清零 rcl ebx, 1 ;循环左移,调整 MOVE: rcr ebx, 1 mov edx, ebx and edx, 1;0fffeh mov array[edi], dl inc edi loop MOVE XOR EDI,EDI MOV ECX,32 L2: MOV EDX,OFFSET array MOV EBX,OFFSET array_sum CALL MoveMul INC EDI LOOP L2 MOV ECX,32 XOR EDI,EDI XOR EAX,EAX XOR EDX,EDX SUM: ADD EAX,array_sum[EDI] ADC EDX,array_sum[EDI+4] ADD EDI,8 LOOP SUM call writedec exit MoveMul PROC ;NEAR push ecx test byte ptr [edx][edi],1 ;测试移动开关是否打开 jz OFF ON: xor ecx,ecx ;清除进位标志 mov ecx,edi ;移位次数 cmp ecx, 0 je L2 L1: shl eax,1 ;被乘数eax左移1位 shl edx,1 ;移入edx loop L1 L2: mov [ebx][edi*8],eax ;保存移位后的结果eax mov [ebx][edi*8+4],edx ;保存移位后的结果edx OFF: pop ecx ret MoveMul ENDP main endp end main

21,458

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧