Программа будет принимать два номера от пользователя и отображать сумму, произведение и мощность (a^b) этих двух чисел. Вот улов, однако ...x86 Сборка с помощью добавления
Программа ДОЛЖНА: использовать AddNumbers функционировать Используйте эту функцию AddNumbers через MultiplyNumbers функционировать использование этой функции MultiplyNumbers в функции CalculatePower
Я не могу понять, как найти Продукт двух чисел путем реализации функции умножения через сложение. Я не могу понять логику этого. Я, очевидно, что-то делаю неправильно, но я не уверен, что. (Просьба игнорировать неэффективность кода, я просто хочу знать, что я делаю неправильно, насколько найти продукт двух)
Мой код до сих пор ..
INCLUDE Irvine32.inc
.data
str1 BYTE "Enter a positive integer: ",0
str2 BYTE "The sum is: ",0
str3 BYTE "The product is: ",0
str4 BYTE "The power result is: ",0
.code
main PROC
call GetInteger
call Crlf
mov eax, ebx
call AddNumbers
mov edx, OFFSET str2
call WriteString
call WriteInt
call Crlf
mov eax, 0
mov ecx, edi
call MultiplyNumber
mov eax, edx
mov edx, OFFSET str3
call WriteString
call WriteInt
call Crlf
call CalculatePower
mov eax, esi
mov edx, OFFSET str4
call WriteString
call WriteInt
call Crlf
exit
main ENDP
GetInteger PROC
mov edx, OFFSET str1
call WriteString
call ReadInt
mov ebx, eax
call WriteString
call ReadInt
mov edi, eax
ret
GetInteger ENDP
CalculatePower PROC USES edi ebx
mov ecx, edi
mov esi, 0
L2:
call MultiplyNumber
add esi, edx
loop L2
ret
CalculatePower ENDP
MultiplyNumber PROC USES ebx edi ecx
mov edx, 0
L1:
mov edi, ebx
mov eax, 0
call AddNumbers
add edx, eax
loop L1
ret
MultiplyNumber ENDP
AddNumbers PROC
add eax, edi
ret
AddNumbers ENDP
END main
Несомненно, вы узнали в школе, как умножение относится к сложениям (?). Процитировать из википедии: _ «Умножение двух целых чисел эквивалентно добавлению одного из них с собой столько же раз, сколько значение другого, например, 3 умноженное на 4 (часто упоминаемое как« 3 раза 4 ") можно рассчитать, добавив 3 копии из 4 вместе" _. – Michael
Кажется безумным, что умножение не может просто использовать инструкции 'mul/imul' на x86 ... в любом случае вы можете использовать [shift-add] (http://stackoverflow.com/questions/2776211/how-can-i -multiply-and-divide-using-only-bit-shifting-and-added) имитировать его. –
Большая часть ваших трудностей в понимании обусловлена отсутствием комментариев. Если вы поместите (значимый, точный) комментарий по каждой строке кода, который вы пишете, свет будет намного быстрее –