MS Visual C++ + asm: определить принадлежность числа к классу простых чисел - Assembler

Узнай цену своей работы

Формулировка задачи:

Определить принадлежность числа к классу простых чисел (С++/asm)
Листинг программы
  1. int num; // !!!
  2. //...
  3. _asm
  4. {
  5. lea esi,num
  6. mov ebx,1
  7. @L:
  8. inc ebx
  9. mov eax,[esi]
  10. xor edx,edx
  11. div ebx
  12. cmp edx,0
  13. jne @L
  14. cmp ebx,num
  15. je simple
  16. //пришли сюда если непростое
  17. jmp done
  18. simple:
  19. //сюда если число простое
  20. done:
  21. }
как полностью написать код всей программы? не могу понять

Решение задачи: «MS Visual C++ + asm: определить принадлежность числа к классу простых чисел»

textual
Листинг программы
  1. org 100h
  2. jmp start
  3.  
  4. mes0   db  13,10,'Type digit: $'
  5. mes1   db  13,10,'Simple! $'
  6. mes2   db  13,10,'Component! $'
  7.  
  8. num    dw  0               ;
  9. N      dw  0               ;
  10.  
  11. start:                     ;
  12.      mov   ah,9            ;
  13.      mov   dx,mes0         ;
  14.      int   21h             ;
  15.      mov   ah,1            ;
  16.      int   21h             ;
  17.      and   ax,0fh          ;
  18.      mov   [num],ax        ;
  19.  
  20.      mov   si,num          ;
  21.      mov   bx,1            ;
  22. @L:  inc   bx              ;
  23.      mov   ax,[si]         ;
  24.      xor   dx,dx           ;
  25.      div   bx              ;
  26.      or    dx,dx           ;
  27.      jnz   @L              ;
  28.  
  29.      cmp   bx,[num]        ;
  30.      jz    ok              ;
  31.      inc   [N]             ;
  32.      mov   dx,mes2         ;
  33.      jmp   pri             ;
  34. ok:  mov   dx,mes1         ;
  35. pri: mov   ah,9            ;
  36.      int   21h             ;
  37.  
  38. exit:                      ;
  39.      xor   ax,ax           ;
  40.      int   16h             ;
  41.      int   20h             ;

Объяснение кода листинга программы

На языке ассемблера написано следующее:

  1. org 100h — начало работы программы, все смещения в коде будут относительны этого адреса.
  2. jmp start — переход на метку start, с которой начинается выполнение основной программы.
  3. mes0 db 13,10,'Type digit: $' — описание сообщения, которое выводится на экран при запуске программы. В данном случае, пользователю предлагается ввести цифру.
  4. mes1 db 13,10,'Simple! $' — описание сообщения, которое выводится на экран, если число простое.
  5. mes2 db 13,10,'Component! $' — описание сообщения, которое выводится на экран, если число не является простым.
  6. num dw 0 — переменная для хранения числа, которое проверяется на простоту.
  7. N dw 0 — переменная для хранения результата проверки числа на простоту (1 - число простое, 0 - число не является простым).
  8. start: — метка начала выполнения основной программы.
  9. mov ah,9 — подготовка регистров к выполнению функции вывода на экран.
  10. mov dx,mes0 — указание, какое сообщение нужно вывести на экран.
  11. int 21h — выполнение функции вывода на экран.
  12. mov ah,1 — подготовка регистров к выполнению функции ввода с клавиатуры.
  13. int 21h — выполнение функции ввода с клавиатуры.
  14. and ax,0fh — очистка регистра AX, который использовался для ввода числа.
  15. mov [num],ax — сохранение введенного числа в переменной num.
  16. mov si,num — подготовка переменной si для цикла.
  17. mov bx,1 — инициализация переменной bx для цикла.
  18. @L: inc bx — увеличение значения переменной bx на 1.
  19. mov ax,[si] — получение значения переменной num для проверки на простоту.
  20. xor dx,dx — подготовка регистра DX для проверки числа на простоту.
  21. div bx — деление числа на переменную bx.
  22. or dx,dx — получение остатка от деления, который будет равен 0, если число простое.
  23. jnz @L — если число не простое, то повторный цикл.
  24. cmp bx,[num] — сравнение значения переменной bx с числом, которое было введено пользователем.
  25. jz ok — если число не простое, то переход на метку ok.
  26. inc [N] — увеличение значения переменной N на 1.
  27. mov dx,mes2 — вывод на экран сообщения, что число является составным.
  28. jmp pri — переход на метку pri.
  29. ok: mov dx,mes1 — вывод на экран сообщения, что число простое.
  30. pri: mov ah,9 — подготовка регистров к выполнению функции вывода на экран.
  31. int 21h — выполнение функции вывода на экран.
  32. exit: xor ax,ax — подготовка регистра AX для выполнения функции завершения работы программы.
  33. int 16h — завершение работы программы.
  34. int 20h — завершение работы программы.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 4.1 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы