Необходимо написать программу на языке 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;

}

Помогите,пожалуйста, переписать это...


Ответы (0 шт):