Другие языки программирования и технологии
Задачи для Ассемблер
помогите кто чем может ...Найти и вывести на экран все простые числа в интервале от А до В... (А-двухбайтное и В-двухбайтное, вводятся с клавиатуры) напишите код программы хотябы.. .
.386
.model flat, stdcall
option casemap :none
include windows.inc
include msvcrt.inc
includelib msvcrt.lib
.data
Prompt db "Введите A: ", 0
Message db "Простые числа в заданном интервале: ", 13, 10, 0
WaitMsg db 13, 10, 10, "Для завершения работы нажмите любую клавишу... ", 0
InFmt db "%u", 0
OutFmt db "%8u", 0
.data?
A dw ?
B dw ?
Tmp dd ?
Primes dw 6543 dup (?)
.code
N172618774:
invoke crt_printf, addr Prompt
invoke crt_scanf, addr InFmt, addr Tmp
mov ax, word ptr Tmp
mov A, ax
inc byte ptr Prompt + 8
invoke crt_printf, addr Prompt
invoke crt_scanf, addr InFmt, addr Tmp
mov ax, word ptr Tmp
mov B, ax
cmp ax, A
jae @F
xchg A, ax
mov B, ax
@@:
mov edi, offset Primes
mov ax, 2
stosw
inc ax
mov bx, ax
CreatePrimes:
stosw
CreatePrimesTest:
cmp B, bx
jb OutPrimes
add bx, 2
mov esi, offset Primes + 2
@@:
mov ax, [esi]
mul ax
test dx, dx
jnz OutPrimes
cmp ax, bx
ja @F
mov ax, bx
div word ptr [esi]
test dx, dx
jz CreatePrimesTest
add esi, 2
jmp @B
@@:
mov ax, bx
jmp CreatePrimes
OutPrimes:
mov ax, bx
stosw
invoke crt_printf, addr Message
mov esi, offset Primes
@@:
lodsw
cmp A, ax
ja @B
@@:
cmp B, ax
jb Quit
movzx eax, ax
invoke crt_printf, addr OutFmt, eax
lodsw
jmp @B
Quit:
invoke crt_printf, addr WaitMsg
invoke crt__getch
invoke crt__exit, NULL
end N172618774
Ввод и вывод осуществляется библиотечными функциями. Проверка корректности ввода не производится. Максимальное вводимое число не должно превышать 64000.
Компилятор MASM, пакет The Masm32 SDK, ОС Windows 32.
Пример работы:

.model flat, stdcall
option casemap :none
include windows.inc
include msvcrt.inc
includelib msvcrt.lib
.data
Prompt db "Введите A: ", 0
Message db "Простые числа в заданном интервале: ", 13, 10, 0
WaitMsg db 13, 10, 10, "Для завершения работы нажмите любую клавишу... ", 0
InFmt db "%u", 0
OutFmt db "%8u", 0
.data?
A dw ?
B dw ?
Tmp dd ?
Primes dw 6543 dup (?)
.code
N172618774:
invoke crt_printf, addr Prompt
invoke crt_scanf, addr InFmt, addr Tmp
mov ax, word ptr Tmp
mov A, ax
inc byte ptr Prompt + 8
invoke crt_printf, addr Prompt
invoke crt_scanf, addr InFmt, addr Tmp
mov ax, word ptr Tmp
mov B, ax
cmp ax, A
jae @F
xchg A, ax
mov B, ax
@@:
mov edi, offset Primes
mov ax, 2
stosw
inc ax
mov bx, ax
CreatePrimes:
stosw
CreatePrimesTest:
cmp B, bx
jb OutPrimes
add bx, 2
mov esi, offset Primes + 2
@@:
mov ax, [esi]
mul ax
test dx, dx
jnz OutPrimes
cmp ax, bx
ja @F
mov ax, bx
div word ptr [esi]
test dx, dx
jz CreatePrimesTest
add esi, 2
jmp @B
@@:
mov ax, bx
jmp CreatePrimes
OutPrimes:
mov ax, bx
stosw
invoke crt_printf, addr Message
mov esi, offset Primes
@@:
lodsw
cmp A, ax
ja @B
@@:
cmp B, ax
jb Quit
movzx eax, ax
invoke crt_printf, addr OutFmt, eax
lodsw
jmp @B
Quit:
invoke crt_printf, addr WaitMsg
invoke crt__getch
invoke crt__exit, NULL
end N172618774
Ввод и вывод осуществляется библиотечными функциями. Проверка корректности ввода не производится. Максимальное вводимое число не должно превышать 64000.
Компилятор MASM, пакет The Masm32 SDK, ОС Windows 32.
Пример работы:

Как самый простой вариант, берем пишем прожку на С
#include <stdio.h>
int main() {
short a, b;
scanf("%hd", &a);
scanf("%hd", &b);
if (a > b) {
puts("a > b.");
return -1;
}
for (;a <= b; ++a) {
printf("%hd", a);
}
return 0;
}
Потом смотрим ассемблерный листинг, мусор выкидываем, пишем стандартную инициализацию, а printf, scanf и puts заменяем на вызовы самописных процедур ввода-вывода (это можно загуглить) .
#include <stdio.h>
int main() {
short a, b;
scanf("%hd", &a);
scanf("%hd", &b);
if (a > b) {
puts("a > b.");
return -1;
}
for (;a <= b; ++a) {
printf("%hd", a);
}
return 0;
}
Потом смотрим ассемблерный листинг, мусор выкидываем, пишем стандартную инициализацию, а printf, scanf и puts заменяем на вызовы самописных процедур ввода-вывода (это можно загуглить) .
Похожие вопросы
- задача по ассемблеру.помогите!
- Создание алгоритма для решения задачи на Ассемблере!
- Помогите решить задачу на ассемблере!!!
- Пожалуйста решите задачу на Ассемблере
- задача на ассемблере: ввести предложение и заменить в нем символ "а" на символ "о" и наоборот Напишите код пожалуйста
- Проверьте простую задачу на Ассемблере
- помогите пожалуйста с задачей по ассемблеру 8086
- Помогите с ассемблером (задачей про матрицы) внутри...
- Что может ассемблер?
- Почему многие программисты ненавидят ассемблер?Ведь у него куча плюсов!Он позволяет максимально задействовать