Содержание
НА САМОСТОЯТЕЛЬНУЮ РАБОТУ СТУДЕНТАМ
по курсу ” Программирование на языке Ассемблера”
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 беззнаковых байтов. Определить
сумму тех элементов массива, двоичные коды которых содержат 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.
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). На Ассемблере это может выглядеть так:
Надеюсь, увидеть на сайте и эти решения!
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Реализация div на МиК.IN;ST
Реализация div на МиК.
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Реализация DIV верна.
Реализация DIV верна. Нравится у Андрея мне и культура оформления текста (комментарии, структура).
Что же до его вопроса о реальном ассемблере вместо ассемблера МиК – это из той серии, почему не С++, а Паскаль; не Паскаль, а МиП; не IBM PC, а МиК и т.п.
Похоже, авторы этих вопросов или не слушают, или не слышат, а потому не понимают и не воспринимают, неоднократно декларируемые мною цели и обоснования подобных выборов. Повторять здесь свою аргументацию не буду (оставив за собой право просить Вас это сделать самим, на экзамене).
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
КОНКУРС!
Как известно, МиК обладает всего лишь двумя условными командами: Jz и Jm. Первая способна реагировать на 0 (т.е. передавать управление туда, куда нам нужно, если в сумматоре был получен 0), а вторая – на отрицательное число.
Сформулируйте явно, как можно было бы в МиК программно выразить смысл следующих физически отсутствуюших в архитектуре данной машины, но иногда необходимых команд типа:
Jp (переход по плюсу), Jnz (переход по не нулю), Jnm (переход по не минусу, т.е. если анализируемое число >= 0), Jnp (переход по не плюсу)?
Оцениваю правильность, наглядность и оперативность предлагаемых решений!
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
На сегодняшней лекции я
На сегодняшней лекции я услышал ответ на свой некорректный вопрос о том, почему мы не изучаем ассемблер. Мы, как оказалось, вообще не изучаем какой-то конкретный ЯП, а сам принцип программирования, основные алгоритмы и понятия. Впредь постараюсь быть более внимательным.
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Да, Андрей.
Да, Андрей. Было бы Вам полезно ещё раз, внимательней посмотреть как наш предмет называется.
Понятно, что учить информатике и программированию, невозможно вне рамок конкретных информационных моделей и систем программирования.
И в частности поэтому, как и во многих университетах мира, нами выбран один из наиболее простых ЯП (Паскаль), который специально создан для целей обучения программированию .
При этом, нельзя не учитывать, что на стадии начала обучения чему либо сложному, простота выбранных инструментов и моделей, позволяющая максимально быстро постичь суть предмета, является главным приоритетом.
МиК – предельно простая модель компьютера фон Неймановской архитектуры. Ассемблер МиК – простейший представитель ассемблеров. МиП даёт концентрированное представление о процедурно ориентированных языках высокого уровня и о том, как они могут быть описаны формальными (такими как БНФ) средствами и т.п.
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Задача 2. Ассемблер
Решите задачу2, записав программу на Ассемблере МиК, которая по заданному X вычисляет функцию 3X -2X -X -1.