我在装配中遇到了一些麻烦。 我正在使用程序集IA32。假设-4(%ebp)= x和-8(%ebp)= y,我已经从用户那里获得它们(都是32位长)。 这是代码:汇编乘法操作64位
format1: .string "Multiply : %u * %u = %llu\n"
format2: .string "Divide : %u/%u = %u\n"
# operation multiply
movl -4(%ebp), %eax
mull -8(%ebp)
pushl %edx
pushl %eax
pushl -8(%ebp)
pushl -4(%ebp)
pushl $format1
call printf
# operation divide
movl -4(%ebp), %eax
divl -8(%ebp)
pushl %eax
pushl -8(%ebp)
pushl -4(%ebp)
pushl $format2
call printf
原因乘法的结果是%LLU是因为我希望能够乘2个长数字和打印结果,即使达到64个字节。 而且在%edx中,mull命令保存了64字节结果的“其他32个字节”,因此我需要将它推送到堆栈以及printf。 例如我想要这个输出:
Multiply : 4000000000 * 2 = 16000000000
另外,我想用4的除法运算返回X.YZ结果。 (在尾数中不超过2个数字,并且不舍入) 例如
Divide : 3/4 = 0.75
19和1000:
Divide : 19/1000 = 0.01
和8和2:
Divide : 8/2 = 4.00
我真的努力了很多得到的结果,但没有成功。 谢谢ALOT! :)
'4000000000 * 2 = 16000000000'?星球大战:奔腾反击? –
只是想举个例子,我需要能够得到最大64位的结果。我无法让这个例子在我的代码中工作:/ – Jjang
为什么?你为什么标记这个C或C++?如果你坚持C,你问过你的本地C专家,也就是你的C编译器,他会怎么做这样的事情? (例如使用gcc或clang选项-S产生相当不错的汇编代码) –