Задан символьный массив. Ввести с клавиатуры символ и вывести на консоль количество таких символов в массиве. - Assembler
Формулировка задачи:
Помогите решить лабораторные:
1,Задан символьный массив. Ввести с клавиатуры символ и вывести на консоль количество таких символов в массиве.
2,Ввести с клавиатуры элементы цифрового массива и ещё две цифры. Вывести на консоль сумму порядковых номеров нечётных элементов массива, значения которых лежат в диапазоне, определяемом введенными цифрами
3,Ввести с клавиатуры два цифровых массива одинакового размера и ещё одну цифру. Вывести на консоль сумму элементов первого массива, превышающих введённое число, и сумму элементов второго, не превышающих его.
Я экономист по профессии, не знаю, зачем нам ввели системное программирование, но месяц я лежала в больнице и в этом языке совершенно ничего не смыслю. Прощу помощи специалистов, желательное с пояснением, что какая команда означает. Заранее спасибо - не хочется вылететь из-за этого.
Решение задачи: «Задан символьный массив. Ввести с клавиатуры символ и вывести на консоль количество таких символов в массиве.»
textual
Листинг программы
@stack segment para stack db 1024 dup(?) @stack ends @data segment Result db ? Prompt db 'Enter the char:', 0Dh, 0Ah, '$' Msg1 db 'In the string:', 0Dh, 0Ah, '"' A db 'The quick brown fox jumps over the lazy dog.' LenA equ $-A Msg2 db '"', 0Dh, 0Ah, 'symbol "' X db ? Msg3 db '" found ' Times dw ? Msg4 db ' times.', 0Dh, 0Ah, '$' CrLf db 0Dh, 0Ah, '$' @data ends @code segment assume cs:@code, ds:@data, ss:@stack main proc ;инициализация сегментного регистра данных mov ax, @data mov ds, ax ;ввод символа для подсчёта вхождения в строку mov ah, 09h lea dx, [Prompt] int 21h mov ah, 01h int 21h mov [X], al mov ah, 09h lea dx, [CrLf] int 21h ;вычисление суммы элементов первого массива, ;превышающих введённое число mov cx, LenA lea bx, [A] mov si, 0 ;текущее значение индекса mov dx, 0 ;количество найденных символов @@For: mov al, [bx+si] cmp al, [X] ;if (A[si]>X) jne @@Next ;then add dx, 1 ; Count:=Count+1 @@Next: add si, 1 loop @@For mov [Result], dl ;вывод результата mov al, [Result] aam add ax, '00' xchg al, ah mov [Times], ax mov ah, 09h lea dx, [Msg1] int 21h ;завершение программы mov ax, 4C00h int 21h main endp @code ends end main
Объяснение кода листинга программы
- Ввод символа для подсчёта вхождения в строку Создается процедура ввода символа, которая использует BIOS-функцию int 21h с параметрами 09h и Prompt (введенный символ сохраняется в регистре al).
- Вычисление суммы элементов первого массива, превышающих введённое число Создается цикл, который проходит по всем элементам массива A. Если значение текущего элемента больше значения X, к переменной Count добавляется единица.
- Вывод результата Результат подсчета (количество найденных символов) выводится на экран с помощью BIOS-функции int 21h с параметрами 09h и Msg1 (подсчитанное количество символов выводится как 16-ричное число).
- Завершение программы Программа завершается с помощью BIOS-функции int 21h с параметрами 4C00h (код завершения работы программы).
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д