0

Задачи на ассемблере с решениями

НА САМОСТОЯТЕЛЬНУЮ РАБОТУ СТУДЕНТАМ

по курсу ” Программирование на языке Ассемблера”

1. ЗАДАЧА. Дан массив из 10 беззнаковых слов. Инвертировать биты старших байтов всех элементов массива. Найти сумму четных элементов

2. Задача: Дан массив из 12 беззнаковых чисел (байтов).

Определить количество тех элементов массива, двоичные

коды которых содержат 0 в битах 1 и 5.

3. Задача: Дан массив из 9 знаковых чисел (байтов). Биты

отрицательных чисел сдвинуть арифметически вправо на

2 разряда, а биты 0 и 4 положительных чисел сбросить.

4. Задача: Дан массив из 10 слов. Инвертировать биты младших

байтов четных элементов массива.

5. Задача: Дан массив из 10 слов. Инвертировать все отрицательные

числа и найти сумму элементов полученного массива.

6. Задача: Дан массив из 10 беззнаковых чисел (байтов).

Коды четных элементов массива сдвинуть логически влево,

а нечетных – арифметически вправо.

7. Задача: Дан массив из 12 знаковых слов. Определить сумму

положительных и сумму отрицательных элементов. Проверить

наличие в коде суммы отрицательных элементов 1 в седьмом бите.

8. Задача: Дан массив из 10 слов. Инвертировать все отрицательные

числа и найти сумму элементов полученного массива.

9. Задача: Найти сумму положительных байтов массива, за-

ключенных между А и В. Предусмотреть сообщение о возник-

10. Задача: Найти сумму положительных байтов массива, за-

ключенных между А и В. Предусмотреть сообщение о возник-

11. ЗАДАЧА: Определить сумму элементов массива, превышающих

заданную величину В, и количество элементов, меньших В.

12. ЗАДАЧА. Установить 0 в 5-ом бите всех байтов массива с четным

индексом и 1 в 4-ом бите всех нечетных байтов массива. Определить

сумму элементов полученного массива.

13. ЗАДАЧА. Дан массив из 10 беззнаковых байтов. Инвертировать те

байты, в старших битах которых имеются 1. Найти сумму элементов

14. ЗАДАЧА: Установить 1 в 4-ых битах всех элементов массива

из 10 байтов. Определить сумму элементов полученного массива.

15. ЗАДАЧА: Байты элементов массива, в 7-ых битах которых

имеется 1, сдвинуть логически вправо на один разряд. Опреде-

лить сумму элементов полученного массива.

16. ЗАДАЧА: Байты элементов массива, в 7-ых битах которых

имеется 1, сдвинуть логически вправо на один разряд. Опреде-

лить сумму элементов полученного массива.

17. ЗАДАЧА: Определить сумму элементов массива, превышающих

заданную величину М, и количество элементов, меньших М (М наз-

18. Задача: Дан массив из 10 беззнаковых чисел (байтов).

Коды четных элементов массива сдвинуть логически влево,

а нечетных – арифметически вправо. Найти сумму элементов

19. ЗАДАЧА: Дан массив из 10 беззнаковых чисел (байтов).

Определить сумму тех элементов массива, двоичные коды

которых содержат 1 в битах 2 и 6.

20. ЗАДАЧА. Элементы массива из 10 байтов объединить по ИЛИ

с кодом 01101011. В полученном массиве подсчитать количество элементов, меньших числа 128.

21. Задача: Дан массив из 10 слов. Определить минимальный и

максимальный элементы массива.

22. Дан массив из 10 беззнаковых чисел (байтов).

Определить количество тех элементов массива, двоичные

коды которых содержат 0 в битах 1 и 5.

23.Задача: Дан массив из 12 слов. Инвертировать все отрицательные

числа и найти сумму элементов полученного массива.

24. Дан массив из 10 беззнаковых байтов. Определить

Читайте также:  Базовый gpt что это

сумму тех элементов массива, двоичные коды которых содержат 0

25. Задача: Дан массив из 10 знаковых слов. Определить сумму

положительных и сумму отрицательных элементов. Проверить

наличие в коде суммы отрицательных элементов 1 в 5 бите.

26. ЗАДАЧА. Элементы массива из 10 байтов объединить по ИЛИ

с кодом 01101011. В полученном массиве подсчитать количество элементов, больших числа 128.

27. ЗАДАЧА: Определить сумму элементов массива, превышающих

заданную величину В, и количество элементов, меньших В.

28. ЗАДАЧА. Установить 0 в 5-ом бите всех байтов массива с четным

индексом и 1 в 4-ом бите всех нечетных байтов массива. Определить

сумму элементов полученного массива.

29. ЗАДАЧА. Элементы массива из 10 байтов объединить по ИЛИ

с кодом 01101111. В полученном массиве подсчитать количество элементов, больших числа 125.

30. Задача: Дан массив из 10 знаковых слов. Определить сумму

положительных и сумму отрицательных элементов. Проверить

наличие в коде суммы отрицательных элементов 1 в 5 бите.

Задание 3.1. В регистре AX задано число от 0 до 65535. Выведите это число на экран.

Задание 3.2. Используя 32-битные регистры процессора, напишите программу, выводящую на экран число 65536.

.386 ;Разрешение трансляции команд процессора 386

mov ax, 65530 ;Заносим число 65530 в регистр AX

mov bx, 10 ;Заносим основание системы счисления, равное 10, в регистр BL

mov cx, 0 ;значение CX обнулятется

label1: mov dx, 0 ;устанавливается метка label1, значение DX обнуляется

div bx ;деление AX на BX

push dx ;сохранение значения регистра DX в стеке

add cx, 1 ;добавление к CX единицы

cmp ax, 0 ;сравнение AX с нулём

jnz label1 ;если условие выполняется, то переход на метку label1

label2: pop dx ;метка label2, сохранение DX в стеке

call print ;вывод DL на экран

loop label2 ;повторение с метки label2, пока значение CX не станет равно нулю

mov ax,4C00h ;завершение программы

print proc ;процедура для вывода значения DL на экран

mov eax, 65536 ;Заносим число 65536 в регистр EAX

mov bx, 10 ;Заносим основание системы счисления, равное 10, в регистр BX

mov cx, 0 ;значение CX обнулятется

label1: mov edx, 0 ;устанавливается метка label1, значение EDX обнуляется

div ebx ;деление EAX на EBX

push edx ;сохранение значения регистра EDX в стеке

add cx, 1 ;добавление к CX единицы

cmp eax, 0 ;сравнение EAX с нулём

jnz label1 ;если условие выполняется, то переход на метку label1

label2: pop edx ;метка label2, сохранение EDX в стеке

call print ;вывод DL на экран

loop label2 ;повторение с метки label2, пока значение CX не станет равно нулю

1. По какой схеме выполняется операция деления?

Ответ: Байтовая команда делит 16-битовое делимое на 8-битовый делитель. Делимое находится в регистре AX. В результате деления получается два числа: частное помещается в регистр AL, а остаток – в AH.

2. Как формируется машинный код для команд безусловного перехода типа SHORT, NEAR и FAR?

Ответ: Безусловному переходу соответствует команда JMP, она осотовляется по шаблону «jmp метка». Эта команда может осуществлять переход вплоть до 32768 байт. Если команда, на которую делается переход находится в том же сегменте памяти, что и команда jmp – переход называется внутрисегментным или ближним (near jmp). Если при этом адрес перехода находится в пределах от -128 до +127 байтов от команды jmp – такой переход называется коротким (short jmp). При использовании short jmp и near jmp изменяется только значение в регистре IP. Если команда находится в каком-либо другом сегменте программы – такой переход называется межсегментным или дальним (far jmp) – изменяется значение в регистре IP, а также значение CS.

Читайте также:  Индезит iwsc 5085 не включается

3. Каковы условия перехода для чисел со знаком и для чисел без знака?

Ответ: Чтобы сделать из положительного числа отрицательное, необходимо инвертировать все его биты и затем к младшему разряду прибавить единицу.

4. С помощью команд условного и безусловного перехода выполните программную реализацию алгоритма ветвления для определения наименьшего числа из двух заданных.

R1 — первое число хранится в регистре AX;
R2 — второе число хранится в регистре BX;
R3 — результат заносится в регистр DX;

vr2, cont — метки команд.

5. Какие действия выполняют команды организации цикла?

Ответ: При каждой встрече с оператором loop, ассемблер сравнивает регистр CX с нулём, и если он ему не равен, то значение CX уменьшается на 1 и происходит переход к нужной метке.

6. Какой диапазон образуют знаковые числа, которые можно умножать на 2 путем сдвига в одном байте?

Ответ: (n+1) – разрядный прямой код (n цифровых разрядов и один знаковый) позволяет представлять целые числа в диапазоне

7. Как с помощью команды сдвига проверить содержимое регистра AH на четность?

Ответ: Командой shr ah, 1 выполнить логический сдвиг вправо на 1 и затем узнать значение флага CF. Если он = 1, то число чётное, в противном случае – нечётное.

Вход в систему

Навигация

Последние комментарии

  • ПСЗ
    5 недель 6 дней назад
  • Наверное вот так вот ?
    6 недель 6 дней назад
  • Спасибо
    7 недель 1 час назад
  • Эльдар
    7 недель 5 дней назад
  • Умножение двух положительных чисел в Ассемблере МиК
    7 недель 6 дней назад
  • Да
    8 недель 1 день назад
  • А вот почему, ВЛАД, .
    8 недель 2 дня назад
  • Почему? Я когда писал код,
    8 недель 2 дня назад
  • Продолжу.
    8 недель 3 дня назад
  • Снова Влад
    8 недель 3 дня назад

Задачи по программированию на машинном языке и на Ассемблере МиК

Напоминаю, что умение программировать в системе команд МиК (в машинном языке и на ассемблере) включено в аттестационный тест модуля 1 и что материалы по МиК лежат здесь (архитектура и система команд МиК), здесь(программирование на МЯ МиК) и здесь (понятие об Ассемблерах и программирование на языке ассемблера МиК).

Материал в основном предназначен для самостоятельного изучения. В указанных выше разделах, помимо теории, вы так же найдёте много задач, их решений и обсуждений. Кроме того, у вас имеется возможность практической проверки ваших решений на МиК-интерпретаторе, который Вы можете скачать в конце этой статьи.

Моя помощь гарантирована по востребованию.

А сейчас, собственно, несколько разминочных задач и вопросов по МиК:

Задача1. Что напечатает МиК, выполнив как программу следующий размещённый в ОП c адреса 100 код (принимаются только решения с объяснением!):

Задача2. Запишите на МЯ МиК-программу, которая по заданному X вычисляет функцию 3X -2X -X -1.

Задача3. Решите задачу2, записав программу на Ассемблере МиК.

Задача4. Объясните, какую задачу и как решает следующая программа на Ассемблере:

  • VTlyusten’s blog
  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

Комментарии

Валерий Шахамболетович,

Валерий Шахамболетович, извените, можно ли на Мик выполнять умножение и деление числа на число.

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

Команд таких нет

Команд таких нет, Николай. Но запрограммировать их можно. Например:

Задача М*N. Пусть даны 2 целых неотрицательных числа M и N. Найти их произведение.

Идея решения проста. Y=M*N – это M повторённое в качестве СЛОГАЕМОГО N раз. Поэтому начав с Y=0, будем многократно добавлять к Y число N, после каждого добавления уменьшая M на 1. Процесс завершится, как только M иссякнет, т.е. превратится в 0 (в этот момент и будет получена нужная сумма, равная M*N). На Ассемблере это может выглядеть так:

Читайте также:  Как войти в whatsapp без телефона

Надеюсь, увидеть на сайте и эти решения!

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

Реализация div на МиК.IN;ST

Реализация div на МиК.

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

Реализация DIV верна.

Реализация DIV верна. Нравится у Андрея мне и культура оформления текста (комментарии, структура).
Что же до его вопроса о реальном ассемблере вместо ассемблера МиК – это из той серии, почему не С++, а Паскаль; не Паскаль, а МиП; не IBM PC, а МиК и т.п.
Похоже, авторы этих вопросов или не слушают, или не слышат, а потому не понимают и не воспринимают, неоднократно декларируемые мною цели и обоснования подобных выборов. Повторять здесь свою аргументацию не буду (оставив за собой право просить Вас это сделать самим, на экзамене).

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

КОНКУРС!

Как известно, МиК обладает всего лишь двумя условными командами: Jz и Jm. Первая способна реагировать на 0 (т.е. передавать управление туда, куда нам нужно, если в сумматоре был получен 0), а вторая – на отрицательное число.

Сформулируйте явно, как можно было бы в МиК программно выразить смысл следующих физически отсутствуюших в архитектуре данной машины, но иногда необходимых команд типа:
Jp (переход по плюсу), Jnz (переход по не нулю), Jnm (переход по не минусу, т.е. если анализируемое число >= 0), Jnp (переход по не плюсу)?

Оцениваю правильность, наглядность и оперативность предлагаемых решений!

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

На сегодняшней лекции я

На сегодняшней лекции я услышал ответ на свой некорректный вопрос о том, почему мы не изучаем ассемблер. Мы, как оказалось, вообще не изучаем какой-то конкретный ЯП, а сам принцип программирования, основные алгоритмы и понятия. Впредь постараюсь быть более внимательным.

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

Да, Андрей.

Да, Андрей. Было бы Вам полезно ещё раз, внимательней посмотреть как наш предмет называется.
Понятно, что учить информатике и программированию, невозможно вне рамок конкретных информационных моделей и систем программирования.
И в частности поэтому, как и во многих университетах мира, нами выбран один из наиболее простых ЯП (Паскаль), который специально создан для целей обучения программированию .

При этом, нельзя не учитывать, что на стадии начала обучения чему либо сложному, простота выбранных инструментов и моделей, позволяющая максимально быстро постичь суть предмета, является главным приоритетом.

МиК – предельно простая модель компьютера фон Неймановской архитектуры. Ассемблер МиК – простейший представитель ассемблеров. МиП даёт концентрированное представление о процедурно ориентированных языках высокого уровня и о том, как они могут быть описаны формальными (такими как БНФ) средствами и т.п.

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

Задача 2. Ассемблер

Решите задачу2, записав программу на Ассемблере МиК, которая по заданному X вычисляет функцию 3X -2X -X -1.

admin

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *