assembly 汇编x86 MASM如何将一个32位寄存器对相乘?

y3bcpkx1  于 2022-11-24  发布在  其他
关注(0)|答案(1)|浏览(129)

大家好,我有一个关于寄存器对相乘的问题。我有一个寄存器对edx:eax,现在我想把它乘以10。结果的最大值不会高于64位的最大值,因此不会发生溢出。我该如何进行?

.data
ten dd 10
.code
mul dword PTR ten
;instead of multiplying eax by ten i want to do the same on edx:eax.
bhmjp9jg

bhmjp9jg1#

将EDX:EAX乘以10

因为您声明不会发生溢出,所以接下来是简单的解决方案。

  • 将高位部分(EDX)乘以10并存储在临时寄存器(ECX)中
  • 将低位部分(EAX)乘以10,并将64位结果保存在EDX:EAX中
  • 连接两个较高部分
imul ecx, edx, 10
mul  DWORD PTR ten
add  edx, ecx

相关问题