Нужна с Асемблером! Нужно написать на ассемблере задачки. Номер 1
В программу вводиться 2 натуральных числа: A и B. Если A делится на B, то вывести частное, иначе вывести оба числа.

Номер 2
В программу вводиться натуральное число. Нужно программе подсчитать содержащееся в нём количество простых множителей, равных 5-ти.

Номер 3
В программу вводиться X натуральных чисел. Нужно программе посчитать, сколько среди введённых чисел чётных и нечётных.

Номер 4
В программу вводиться натуральное число X . Подсчитать X !. Если X! не вмещается в ячейку памяти (переполнение), вывести -1.

Номер 5
Вычислить приближённое значение натурального числа е по формуле:
r = 1 + 1/2! + 1/1! +1/3! + 1/4!;

Номер 6
В программу вводиться 2 натуральных числа: A и B. Вычислить C = AB. Если C не вмещается в ячейку памяти (переполнение), вывести -1.

Номер 7
В программу вводиться в произвольном порядке три положительных и три отрицательных числа. Вывести сначала отрицательные числа, а затем - положительные.

Номер 8
В программу вводиться три числа и вывести их в порядке возрастания.

Номер 9
Алгоритм Герона для вычисления квадратного корня x = a1/2. Ввести положительное число a.
Принять в первом приближении
x1 = a/2;
Вычислять по формуле
xi = (a/xi-1 + xi-1)/2 ,
пока |a - xi*xi| > 0.001*a.

Номер 10
В программу вводиться натуральное число a. Определить, в какой из следующих диапазонов оно попадает:
1. 0 ≤ a ≤ 10 ;
2. 10 1000 .
Вывести номер диапазона.

Номер 11
В программу вводиться X чисел x1, x2, . xX, X > 3.
Вывести xi, если xi > xi-1, i =2, 3, ..X.

Номер 12
В программу вводиться X чисел. Найти их среднее арифметическое.

Номер 13
В программу вводиться коды ASCII двух чисел. Вывести в арабских цифрах большее из них.

Номер 14
В программу вводиться число записанное арабскими цифрами. Вывести его в кодах ASCII.

Номер 15
В программу вводиться X чисел. Найти их произведение.

Номер 16
В программу вводиться коды ASCII X символов. Выбрать из них и вывести только коды цифр.

Номер 17
Вводить натуральные числа до тех пор, пока не выполнится условие:
Xi ≥ Xi-1 + Xi-2.

Номер 18
Вводятся коды символов в UTF-8. Нужно выводить только коды цифр.

Номер 19
Вводить натуральные числа до тех пор, пока не будет введено такое число a, что
a + a = a * a = a2. (1)
P.s:(1) Должно проверяться в программе даже, если Вы догадались, что это за число.

Номер 20
Вводить натуральные числа до тех пор, пока не будут введены три таких числа a, b и с, что
a2+ b2 = c2.
Выведите эти числа.

a12efefsd a12efefsd    2   06.12.2020 05:48    117

Ответы
marina151987 marina151987  20.12.2023 21:44
Номер 1:

Ассемблер код для решения задачи номер 1 будет выглядеть следующим образом:

```
section .data
message db 'Введите число A: '
message_len equ $ - message
message2 db 'Введите число B: '
message2_len equ $ - message2
message3 db 'Частное равно: '
message3_len equ $ - message3
message4 db 'A не делится на B. A = '
message4_len equ $ - message4
message5 db ', B = '
message5_len equ $ - message5

section .text
global _start

_start:
; выводим сообщение "Введите число A: "
mov eax, 4
mov ebx, 1
mov ecx, message
mov edx, message_len
int 0x80

; считываем число A
mov eax, 3
mov ebx, 0
mov ecx, num_a
mov edx, 4
int 0x80

; выводим сообщение "Введите число B: "
mov eax, 4
mov ebx, 1
mov ecx, message2
mov edx, message2_len
int 0x80

; считываем число B
mov eax, 3
mov ebx, 0
mov ecx, num_b
mov edx, 4
int 0x80

; сравниваем числа A и B
mov eax, dword [num_a]
mov ebx, dword [num_b]
cmp eax, ebx

; если A делится на B, выводим частное
je print_quotient

; если A не делится на B, выводим оба числа
jmp print_numbers

print_quotient:
; выводим сообщение "Частное равно: "
mov eax, 4
mov ebx, 1
mov ecx, message3
mov edx, message3_len
int 0x80

; делим числа A и B
xor edx, edx ; обнуляем регистр edx
mov eax, dword [num_a]
div dword [num_b]

; преобразуем частное в строку
push eax
mov eax, 0
mov ecx, 10
xor edx, edx
convert_loop:
xor edx, edx
div ecx
add dl, '0'
push dx
inc eax
cmp eax, 0
jnz convert_loop

; выводим частное
print_loop:
pop eax
or al, 0x30
mov [result_buffer], al
mov eax, 4
mov ebx, 1
mov ecx, result_buffer
mov edx, 1
int 0x80
dec edx
cmp edx, 0
jge print_loop

; переходим к выводу обоих чисел
jmp print_numbers

print_numbers:
; выводим число A
mov eax, dword [num_a]
push eax
mov eax, 0
mov ecx, 10
xor edx, edx
convert_loop2:
xor edx, edx
div ecx
add dl, '0'
push dx
inc eax
cmp eax, 0
jnz convert_loop2

; выводим сообщение "A не делится на B. A = "
mov eax, 4
mov ebx, 1
mov ecx, message4
mov edx, message4_len
int 0x80

; выводим число A
print_loop2:
pop eax
or al, 0x30
mov [result_buffer], al
mov eax, 4
mov ebx, 1
mov ecx, result_buffer
mov edx, 1
int 0x80
dec edx
cmp edx, 0
jge print_loop2

; выводим сообщение ", B = "
mov eax, 4
mov ebx, 1
mov ecx, message5
mov edx, message5_len
int 0x80

; выводим число B
mov eax, dword [num_b]
push eax
mov eax, 0
mov ecx, 10
xor edx, edx
convert_loop3:
xor edx, edx
div ecx
add dl, '0'
push dx
inc eax
cmp eax, 0
jnz convert_loop3

print_loop3:
pop eax
or al, 0x30
mov [result_buffer], al
mov eax, 4
mov ebx, 1
mov ecx, result_buffer
mov edx, 1
int 0x80
dec edx
cmp edx, 0
jge print_loop3

; завершаем программу
mov eax, 1
xor ebx, ebx
int 0x80

section .bss
num_a resd 1
num_b resd 1
result_buffer resb 1
```

Программа запрашивает у пользователя два числа A и B, считывает их и затем проверяет, делится ли A на B. Если да, то выводит частное чисел A и B. Если нет, то выводит оба числа.

Номер 2:

Ассемблер код для решения задачи номер 2 будет выглядеть следующим образом:

```
section .data
message db 'Введите число: '
message_len equ $ - message
result_message db 'Количество простых множителей, равных 5-ти: '
result_message_len equ $ - result_message

section .text
global _start

_start:
; выводим сообщение "Введите число: "
mov eax, 4
mov ebx, 1
mov ecx, message
mov edx, message_len
int 0x80

; считываем число
mov eax, 3
mov ebx, 0
mov ecx, num
mov edx, 4
int 0x80

; сохраняем вводимое число в регистры eax и ecx
mov eax, dword [num]
mov ecx, eax

; обнуляем счетчик простых множителей
xor ebx, ebx

; инициализируем счетчик делителей
mov edx, 2

; цикл проверки делителей
check_divisor:
xor edx, edx ; обнуляем регистр edx
div edx ; делим число на делитель

; проверяем, является ли делитель 5-м простым множителем
cmp edx, 5
je increment_counter

; увеличиваем делитель для проверки
inc edx
cmp edx, ecx ; проверяем, не превысили ли мы число
jle check_divisor

print_result:
; выводим сообщение "Количество простых множителей, равных 5-ти: "
mov eax, 4
mov ebx, 1
mov ecx, result_message
mov edx, result_message_len
int 0x80

; преобразуем счетчик в строку
push ebx
mov ebx, 0
mov edx, 10
xor eax, eax ; обнуляем регистр eax
convert_loop:
xor edx, edx
div edx
add dl, '0'
push dx
inc ebx
cmp eax, 0
jnz convert_loop

; выводим количество простых множителей
print_loop:
pop eax
or al, 0x30
mov [result_buffer], al
mov eax, 4
mov ebx, 1
mov ecx, result_buffer
mov edx, 1
int 0x80
dec edx
cmp edx, 0
jge print_loop

; завершаем программу
mov eax, 1
xor ebx, ebx
int 0x80

section .bss
num resd 1
result_buffer resb 1
```

Программа запрашивает у пользователя натуральное число, считывает его и затем подсчитывает количество простых множителей, равных 5-ти.

Номер 3:

Ассемблер код для решения задачи номер 3 будет выглядеть следующим образом:

```
section .data
message db 'Введите число: '
message_len equ $ - message
even_message db 'Четных чисел: '
even_message_len equ $ - even_message
odd_message db 'Нечетных чисел: '
odd_message_len equ $ - odd_message

section .text
global _start

_start:
; выводим сообщение "Введите число: "
mov eax, 4
mov ebx, 1
mov ecx, message
mov edx, message_len
int 0x80

; считываем число
mov eax, 3
mov ebx, 0
mov ecx, num
mov edx, 4
int 0x80

; сохраняем вводимое число в регистр eax
mov eax, dword [num]

; обнуляем счетчики четных и нечетных чисел
xor ebx, ebx
xor ecx, ecx

; цикл подсчета четных и нечетных чисел
count_numbers:
test al, 1 ; проверяем младший бит числа

; если младший бит равен 0, число четное
jz increment_even_counter

; если младший бит равен 1, число нечетное
inc ecx

increment_even_counter:
; увеличиваем счетчик четных чисел
inc ebx

; сдвигаем число на один бит вправо
shr eax, 1

; проверяем, что все биты числа были обработаны
cmp eax, 0
jnz count_numbers

print_results:
; выводим сообщение "Четных чисел: "
mov eax, 4
mov ebx, 1
mov ecx, even_message
mov edx, even_message_len
int 0x80

; преобразуем счетчик четных чисел в строку
push ebx
mov ebx, 0
mov edx, 10
xor eax, eax ; обнуляем регистр eax
convert_loop1:
xor edx, edx
div edx
add dl, '0'
push dx
inc ebx
cmp eax, 0
jnz convert_loop1

; выводим количество четных чисел
print_loop1:
pop eax
or al, 0x30
mov [result_buffer], al
mov eax, 4
mov ebx, 1
mov ecx, result_buffer
mov edx, 1
int 0x80
dec edx
cmp edx, 0
jge print_loop1

; выводим сообщение "Нечетных чисел: "
mov eax, 4
mov ebx, 1
mov ecx, odd_message
mov edx, odd_message_len
int 0x80

; преобразуем счетчик нечетных чисел в строку
push ebx
ПОКАЗАТЬ ОТВЕТЫ
Другие вопросы по теме Информатика