Необходимо написать программу на языке Assembler в види ассемблерной вставки VS. Само задание:Найти все простые делители натурального числа N
Я использовал алгоритм:
for (int i = 2; i <= number; i++) {
while (number % i == 0) {
int is_new_divisor = 1;
for (int j = 0; j < count; j++) {
if (dividers[j] == i) {
is_new_divisor = false;
break;
}
}
if (is_new_divisor) {
dividers[count++] = i;
}
number /= i;
}
}
if (number > 1) {
bool is_new_divisor = true;
for (int j = 0; j < count; j++) {
if (dividers[j] == number) {
is_new_divisor = false;
break;
}
}
if (is_new_divisor) {
dividers[count++] = number;
}
}
В результате запрашивается цифра, дальше программа просто стоит: никаких измениний нет
Моё решение:
#include <iostream>
using namespace std;
int main() {
int number, count = 0;
cout << "Enter a natural number: ";
cin >> number;
int dividers[100];
_asm {
mov ecx, 2
mov edi, 0
mov ebx, number
outer_loop :
mov eax, ebx
cdq
idiv ecx
cmp edx, 0
je divisible
mov esi, 0
inner_loop:
cmp esi, edi; compare esi with count
jge not_divisible; if esi >= count, then i is not a divisor
mov eax, [dividers + esi * 4]; eax = dividers[esi]
cmp eax, ecx; compare eax with i
je divisible; if eax == i, then i is a divisor
inc esi; esi++
jmp inner_loop; jump to inner_loop
divisible :
mov[dividers + edi * 4], ecx
inc edi
; check if number is greater than 1
cmp ebx, 1
jle end_loop; if ebx <= 1, then end the loop
; update number and i
mov ebx, edx; number = remainder
inc ecx; i++
jmp outer_loop; jump to outer_loop
not_divisible :
; check if number is greater than 1
cmp ebx, 1
jle end_loop; if ebx <= 1, then end the loop
; update number and i
mov ebx, edx; number = remainder
inc ecx; i++
jmp outer_loop; jump to outer_loop
end_loop :
; check if number is greater than 1
cmp ebx, 1
jle end_loop; if ebx <= 1, then end the loop
; store number in the array
mov[dividers + edi * 4], ebx; dividers[edi] = number
inc edi; count++
}
cout << "Prime divisors of are: ";
for (int i = 0; i < count; i++) {
cout << dividers[i] << " ";
}
cout << endl;
return 0;
}
Помогите,пожалуйста, переписать это...