Поиск всех составных чисел на заданном диапазоне.
Надо написать программу, отображающую на экране все составные числа на диапазоне от 2 до введённого с клавиатуры целого положительного числа N. При запуске, программа должна запросить верхний предел диапазона проверяемых чисел с помощью функции scanf(). Все числа диапазона должны быть проверены на простоту и составные — выведены на экран с помощью функции printf().
Другие языки программирования и технологии
Люди, которые хоть немного разбираются в ассемблере, помогите написать программу)
MASM + Masm32 SDK, функции scanf и printf импортируются из библиотеки msvcrt.lib.
Проверка корректности ввода с клавиатуры не производится.
.386
.model flat, stdcall
option casemap:none
include kernel32.inc
include msvcrt.inc
includelib kernel32.lib
includelib msvcrt.lib
.stack 100h
.data
Prompt db 'Введите верхний предел диапазона: ',0
InpFormat db '%i',0
OutFormat db '%8i',0
Result db 'Составные числа от 2 до %i:',13,10,0
QuitPrompt db 13,10,10,'Для завершения работы нажмите любую клавишу... ',0
.data
N dd ?
X dd ?
IntBuf dd ?
.code
N88738523:
invoke crt_printf,addr Prompt
invoke crt_scanf,addr InpFormat,addr N
mov dword ptr X,2
finit
fstcw word ptr IntBuf
or word ptr IntBuf,0C00h
fldcw word ptr IntBuf
invoke crt_printf,addr Result,N
MainLoop:
mov eax,X
cmp N,eax
jl Quit
fild X
fsqrt
fistp IntBuf
mov ecx,IntBuf
TestLoop:
cmp ecx,2
jb NextNumber
mov eax,X
cdq
idiv ecx
test edx,edx
jz PrintNumber
dec ecx
jmp TestLoop
PrintNumber:
invoke crt_printf,addr OutFormat,X
NextNumber:
inc dword ptr X
jmp MainLoop
Quit:
invoke crt_printf,addr QuitPrompt
WaitKey:
invoke crt__kbhit
test eax, eax
jz WaitKey
invoke ExitProcess,0
end N88738523

Проверка корректности ввода с клавиатуры не производится.
.386
.model flat, stdcall
option casemap:none
include kernel32.inc
include msvcrt.inc
includelib kernel32.lib
includelib msvcrt.lib
.stack 100h
.data
Prompt db 'Введите верхний предел диапазона: ',0
InpFormat db '%i',0
OutFormat db '%8i',0
Result db 'Составные числа от 2 до %i:',13,10,0
QuitPrompt db 13,10,10,'Для завершения работы нажмите любую клавишу... ',0
.data
N dd ?
X dd ?
IntBuf dd ?
.code
N88738523:
invoke crt_printf,addr Prompt
invoke crt_scanf,addr InpFormat,addr N
mov dword ptr X,2
finit
fstcw word ptr IntBuf
or word ptr IntBuf,0C00h
fldcw word ptr IntBuf
invoke crt_printf,addr Result,N
MainLoop:
mov eax,X
cmp N,eax
jl Quit
fild X
fsqrt
fistp IntBuf
mov ecx,IntBuf
TestLoop:
cmp ecx,2
jb NextNumber
mov eax,X
cdq
idiv ecx
test edx,edx
jz PrintNumber
dec ecx
jmp TestLoop
PrintNumber:
invoke crt_printf,addr OutFormat,X
NextNumber:
inc dword ptr X
jmp MainLoop
Quit:
invoke crt_printf,addr QuitPrompt
WaitKey:
invoke crt__kbhit
test eax, eax
jz WaitKey
invoke ExitProcess,0
end N88738523

Похожие вопросы
- Ассемблер помогите написать программу..
- Помогите написать программу на ассемблере, завтра экзамен а я в нём совсем не шарю.
- помогите написать программы в ассемблере
- срочно помогите написать программу на ассемблере вычисляющую R. R=x2+y2, где x=a+b-c, y=b*c-a. a,b,c вводятся с клавы
- помогите написать программу любой игры в ассемблере с блок-схемой. спасибо
- Помогите написать программу на ассемблере по условию
- Помогите написать программу на Ассемблере
- Помогите написать программу со switch в СИ
- Помогите написать программу на С. Тема Составление программ с использованием массивов
- Помогите написать программу выключения компьютера на С++