首页 / 知识
如何使用x86汇编语言将两个64位数字相乘?
2023-04-16 20:40:00

How can I multiply two 64-bit numbers using x86 assembly language?我该怎么办...
...使用汇编语言。 我只允许使用寄存器%eax,%ebx,%ecx,%edx和堆栈。
编辑:哦,我在x86上使用ATT语法 使用您的课程教科书,即兰德尔·海德(Randall Hyde)的"汇编语言的艺术"。 参见4.2.4-扩展精度乘法
(有关完整的装配清单和插图,请参见链接。) 如果是64x86,
此代码假定您需要x86(而不是x64代码),您可能只想要64位产品并且您不在乎溢出或带符号的数字。 (签名版本与此类似)。
这不符合OP的确切寄存器限制,但是结果完全适合x86提供的寄存器。 (此代码未经测试,但我认为是正确的)。 [注意:我从另一个已关闭的问题转移了这个答案,因为这里的其他"答案"中没有一个直接回答了该问题]。 由于您使用的是x86,因此需要4个考虑指令。将64位数量分成两个32位字,并将低位字乘以结果的最低和第二低字,然后分别使用不同编号的低和高字对(它们分别进入结果的第二和第三低字)和最终将两个高位词转换为结果的2个最高位词。将它们加在一起不要忘记处理进位。您没有指定输入和输出的内存布局,因此无法编写示例代码。 找到一个支持64位的C编译器(GCC执行IIRC),编译仅执行此操作的程序,然后进行反汇编。 GCC可以自己将其吐出,并且可以使用正确的工具将其从目标文件中删除。 OTOH他们是x86上的32bX32b = 64b op
一切都溢出 (未试) 仅编辑未签名 只需执行普通的长乘法,就好像您要对一对2位数字相乘,只是每个"数字"实际上是32位整数。如果您要在地址X和Y上将两个数字相乘并将结果存储在Z中,那么您想要做的(用伪代码)是:
请注意,我们将舍弃结果的高64位(因为64位数字乘以64位数字就是128位数字)。另请注意,这是假设为小端。另外,请注意有符号乘法和无符号乘法。 啊,大会,因为我已经使用了一段时间。因此,我假设这里的真正问题是您正在使用的微控制器(无论如何我还是用汇编语言编写代码的)没有64位寄存器?如果是这样,您将需要分开处理正在使用的数字,并对该部分进行多次乘法。 听起来这是您的措辞方式中的一项家庭作业,所以我不会再详细说明了:P 这取决于您使用的语言。从我从学习MIPS汇编中学到的东西来看,有一个从高位移动命令和从低位移动命令,或者mflo和mfhi。 mfhi存储总数的高64位,而mflo存储总数的低64位。 我打赌你是一个学生,所以看看你能不能做这个工作:逐字逐句地做,并使用移位。想想最有效的解决方案。当心标志位。 如果要使用128位乘法,则应采用AT&T格式。
如果要使用128模式,请尝试此...
|
最新内容
相关内容
linux如何打堆栈命令?
linux如何打堆栈命令?,系统,信息,电脑,代码,工作,公开,资料,数字,堆栈,命令,怎么在linux下俘获程序奔溃时的调用堆栈最简单的方法: 在内核中,prilinux命令匹配数字?
linux命令匹配数字?,数字,档案,位置,环境,名字,较大,系统,权限,命令,用户,Linux的基本命令格式如何?Linux下经常使用的通配符有哪些通配符 基linux权限数字命令?
linux权限数字命令?,数字,系统,地址,权限,命令,标准,情况,管理,基础,文件,linux734是什么权限1、linux权限从左至右,第一位数字代表文件所有者linux汇编语言命令?
linux汇编语言命令?,系统,地址,代码,数据,网络,平台,平均,位置,灵活,工作,汇编语言指令的基本格式是什么1、有以下几种基本格式:标号,又称为指令linux汇编语言命令?
linux汇编语言命令?,系统,地址,代码,数据,网络,平台,平均,位置,灵活,工作,汇编语言指令的基本格式是什么1、有以下几种基本格式:标号,又称为指令linux排序数字命令?
linux排序数字命令?,标准,数字,单位,情况,系统,信息,命令,文件,顺序,参数,linux下用shell编写,键盘输入三个数,按大小排序输出1、这个问题可以linux保留堆栈命令?
linux保留堆栈命令?,地址,工作,系统,信息,管理,命令,目录,代码,名称,连续,linux系统常用操作命令linux常用命令有pwd命令、cd命令、ls命令、calinux命令不能打数字?
linux命令不能打数字?,工作,密码,数字,地址,电脑,系统,命令,设备,下来,预期,你好,求助大师帮忙,我刚学ARM,怎么无法输入数字或字母呢1、ZI初始linux生成数字命令?
linux生成数字命令?,密码,数字,设备,环境,名称,时间,单位,地址,信息,系统,求一个linux的代码要求:随机生成一个密码8到16个字符,要有数字有大linux中常用命令语法?
linux中常用命令语法?,工作,地址,系统,信息,目录,标准,基础,命令,文件,常用命令,Linux常用命令linux系统常用操作命令如下:ls:全拼list,功能是列linux十六进制命令?
linux十六进制命令?,数据,数字,系统,位置,信息,软件,文件,设备,设计,烽火,Linux下的C语言编程,怎么读取16进制数1、输入的时候,直接输入16进制python语言属于汇编语言吗?
python语言属于汇编语言吗?,系统,设计,地址,培训,平台,语言,机器,指令,符号,解释性,python语言不是汇编语言。python是高级语言。Python是一