Перейти к основному содержанию
EDU-MMCS
Вы используете гостевой доступ (Вход)

CS221. Архитектура компьютера и операционные системы

  1. В начало
  2. Курсы
  3. Осенний семестр
  4. Фундаментальная информатика и ИТ
  5. CS221 CA&OS
  6. Материалы лабораторных работ
  7. Лаб. Занятие 6. Обязательные задания для решения в...

Лаб. Занятие 6. Обязательные задания для решения в классе

Требуемые условия завершения
Открыто с: понедельник, 7 октября 2024, 08:00
Срок сдачи: пятница, 11 октября 2024, 13:30

Лаб. Занятие 6.  Обязательная задача [3  балла]

Следует разместить в Moodle решение одной из перечисленных ниже задач (по выбору преподавателя)

Во всех заданиях следует в основной программе вызвать написанную функцию (или процедуру),  полученный результат (результаты) вывести на консоль и завершить основную программу соответствующим системным вызовом (аналогично тому, как было описано в Лаб3). Если не указано иначе, то все функции и процедуры следует писать, используя конвенции вызова  cdecl. 

  1. [ 61.s] Создайте процедуру конкатенации (слияния) двух строк в формате .ASCIZ  concatenate(str1, str2, con_str) Аргументы  - адреса исходных строк str1, str2 и  адрес буфера для объединенной строки con_str .  Обратите внимание, что все строки должны быть в формате .ASCIZ. Для определенности будем считать, что объединенная строка не длиннее 255 символов. 

    .SECT   .BSS
    con_str:    .SPACE  255

  2. [62.s] Создайте функцию LAST_5(str) для нахождения номера последнего символа '5' в строке, адрес которой передается параметром в функцию.  Строка в формате .ASCIZ. Если символ '5' ни разу не встречается в строке, то в регистре AX по завершению функции должно быть значение -1.  Указание: использовать проход от конца строки к началу.
  3. [63.s] Создайте процедуру FILTER_DIG, которая принимает в качестве аргументов две строки и предикат. Она записывает во вторую строку все символы из первой, удовлетворяющие данному предикату. Указания: использовать инструкции LODS/STOS и передачу функций в функции, которая обсуждалась на занятии 4 (часть 3). В основной программе сделайте демонстрацию вызова — с предикатом проверки на то, что очередной символ является цифрой (0-9), т. е. в результате работы функции вторая строка должна включать только цифры. 
    В основной программе вызвать функцию для строки " Если 5<x, то повторять цикл 15 раз, иначе 20" и распечатать на консоль результат.
  4. [64.s] Создайте функцию EQ_3, которая подсчитывает количество элементов массива, равных трём. Используйте при создании функции подходящие цепочечные инструкции. В качестве параметров функции передаётся адрес начала массива и его длина. В основной программе вызовите функцию для массива {9, 3, 11, 12, 3, 45} и распечатайте на консоль результат.
  5. [65.s] Создайте процедуру преобразования строки в формате .ASCIZ по следующему правилу все строчные английские буквы должны быть заменены заглавными. Аргумент процедуры  - адрес исходной строки str.  Обратите внимание, что коды строчных английских букв в таблице кодов ACSII расположены последовательно и лежат в диапазоне 97-122, а все заглавные буквы имеют коды 65-90 и также расположены последовательно в таблице кодов. Используйте для создания функции подходящие цепочечные инструкции.
  6. [66.s] Создайте функцию CMP_STR, которая получает на вход адреса двух строк  str1, str2 в формате  .ASCIZ и возвращает в регистре AX значение -1, если строка   str2 не входит в строку  str1, в остальных вариантах в AX должно быть значение смещения (номер позиции) с которого строка  str2 входит в строку   str1. 
  7. [67.s] Создайте функцию COUNT_STR, которая получает на вход адреса двух строк  str1, str2 в формате  .ASCIZ и возвращает в регистре AX значение -1, если строка   str2 не входит в строку  str1, в остальных вариантах в AX должно быть количество вхождений  строки  str2  в строку  str1 c учетом возможных пересечений. Обратите внимание, что, к примеру, для строк "AAABBBCCC" и "BB" функция должна вернуть значение 2. 
  8. [68.s] Создайте процедуру преобразования строки в формате .ASCIZ по следующему правилу - все слова в исходной строке должны начинаться с заглавной английской буквы, т. е. строчные английские буквы в начале слов должны быть заменены заглавными. Словом будем называть последовательность английских букв, начинающуюся с буквы и заканчивающуюся символом пробел (' ') или нулём (строки в формате .ASCIZ!). Аргумент  процедуры - адрес исходной строки str.  Обратите внимание, что коды строчных английских букв расположены последовательно и лежат в диапазоне 97-122, а все заглавные буквы имеют коды 65-90 и также расположены последовательно в таблице кодов ASCII. Используйте для создания функции подходящие цепочечные инструкции.
  9. [69.s] Создайте процедуру SWAP_STR, которая меняет местами строки по двум заданным адресам. В качестве параметров функции передаются адреса двух строк. Строки равной длины в формате .ASCIZ. В основной программе (ни в сегменте .DATA ни в сегменте .BSS) нельзя выделять память-буфер для временного хранения строки. Используйте для реализации подходящие цепочечные инструкции.  Выведите на консоль значения этих строк до вызова процедуры и после вызова. 
  10. [ 6a.s] Создайте процедуру преобразования  строки в формате .ASCIZ  conc_rev(str, conсrev_str). Преобразование строки должно состоять в следующем - в полученной строке должна быть размещена исходная строка (без завершающего нуля), а затем её зеркальное отображение (символы исходной строки в обратном порядке). Результирующая строка должна быть в формате .ASCIZ.  Аргументы процедуры  - адрес исходной строки  str и  адрес буфера для объединенной строки concrev_str .   Для определенности будем считать, что объединенная строка не длиннее 255 символов. 
    .SECT   .BSS
    concrev_str:    .SPACE  255
  11. [6b.s] Создайте функцию ALL_5(str) для нахождения смещения вхождения символа '5' в строке, адрес которой передается параметром в функцию.  Строка в формате .ASCIZ. Если символ '5' ни разу не встречается в строке, то в регистре AX по завершению функции должно быть значение -1.  В основной программе распечатайте все смещения (номера) указанного символа в строке. 
  12. [6c.s] Создайте процедуру FILTER, которая принимает в качестве аргументов два адреса массивов и предикат. Она записывает во второй массив все  числа  из первого, удовлетворяющие данному предикату. Указания: использовать инструкции LODS/STOS и передачу функций в функции, которая обсуждалась на занятии 4 (часть 3). В основной программе сделайте демонстрацию вызова — с предикатом проверки на то, число состоит из 3-х значащих цифр (0-9), т. е. в результате работы функции  FILTER   второй массив  должен включать только трехзначные положительные или отрицательные числа. 
  13. [6d.s] Создайте функцию PRINT_WORDS, которая разделяет строку на слова и распечатывает их по одному в строке на экране.  Словом будем называть последовательность любых символов, начинающуюся с заглавной английской буквы  (удобно использовать для сравнения  'A' и 'Z'. Например CMP DL,'A') и заканчивающуюся символом пробел (' ').  Используйте при создании функции подходящие цепочечные инструкции (к примеру REPNE   SCASB). Для облегчения решения будем полагать, что последнее слово также заканчивается пробелом. В качестве параметров функции передаётся адрес строки. В основной программе вызовите функцию для строки 
    str:    .ASCIZ  "12 AB C45 ab34 ZER "
    и распечатайте на консоль результат. Обратите внимание, что с точки зрения определения слова на экран должны быть выведены  следующие последовательности 
    AB
    C45
    ZER
  14. [6e.s] Создайте процедуру преобразования строки в формате .ASCIZ по следующему правилу все заглавные английские буквы должны быть заменены строчными. Аргумент процедуры  - адрес исходной строки str.  Обратите внимание, что коды строчных английских букв в таблице кодов ACSII расположены последовательно и лежат в диапазоне 97-122, а все заглавные буквы имеют коды 65-90 и также расположены последовательно в таблице кодов. Используйте для создания функции подходящие цепочечные инструкции. 
  15. [6f.s] Создайте функцию CMP_STR, которая получает на вход адреса двух строк  str1, str2 в формате  .ASCIZ и возвращает в регистре AX значение -1, если строка   str2 не входит в строку  str1, в остальных вариантах в AX должно быть значение смещения (номер позиции) с которого строка  str2 входит в строку   str1. Для простоты будем считать что строка  str2 входит в строку   str1  не более одного раза. Используйте для реализации подходящие цепочечные инструкции. 
  16. [6g.s] Создайте функцию COUNT_STR, которая получает на вход адреса двух строк  str1, str2 в формате  .ASCIZ и возвращает в регистре AX значение -1, если строка   str2 не входит в строку  str1, в остальных вариантах в AX должно быть количество вхождений  строки  str2  в строку  str1 без учета пересечений, т.е. для строк "ABCX AAAABC YZ" и "AA" функция должна вернуть значение 2. 
  17. [6h.s] Создайте процедуру преобразования строки в формате .ASCIZ по следующему правилу - все слова в исходной строке должны начинаться с заглавной английской буквы, т. е. строчные английские буквы в начале слов должны быть заменены заглавными. Словом будем называть последовательность английских букв, начинающуюся со строчной английской буквы и заканчивающуюся символом пробел (' '). Аргумент  процедуры - адрес исходной строки str.  Обратите внимание, что коды строчных английских букв расположены последовательно и лежат в диапазоне 97-122, а все заглавные буквы имеют коды 65-90 и также расположены последовательно в таблице кодов ASCII. Используйте для создания функции подходящие цепочечные инструкции.
  18. [6i.s] Создайте процедуру SWAP_STR, которая меняет местами строки по двум заданным адресам. В качестве параметров функции передаются адреса двух строк. Исходные строки в формате .ASCIZ и имеют равную длину. В основной программе (ни в сегменте .DATA ни в сегменте .BSS) нельзя выделять память-буфер для временного хранения строки. Используйте для реализации подходящие цепочечные инструкции.  Выведите на консоль значения этих строк до вызова процедуры и после вызова. 

◄ Лаб. Занятие 5. Обязательные задания для решения в классе
IJVM Assembly Language Specification ►
Пропустить Навигация
Навигация
  • В начало

    • Страницы сайта

      • Мои курсы

      • Теги

    • Мои курсы

    • Курсы

      • Осенний семестр

        • Прикладная математика и информатика

        • Фундаментальная информатика и ИТ

          • Compiler Development

          • CMVSM

          • АЗПК

          • Frontend

          • ТеорЯП

          • Ruby Eng

          • EngCA&OS

          • CS201e

          • Компиляторы - лекции

          • CS202

          • CS211 C++ ENG

          • CS221 CA&OS

            • Общая информация

            • Материалы лабораторных работ

              • ЗаданиеЛаб. Занятие 1. Введение. Арифметика. Циклы LOOP

              • ЗаданиеЛаб. Занятие 2. Подготовка. Массивы. Условные и бе...

              • ЗаданиеЛаб. Занятие 2. Обязательные задания для решения в...

              • ЗаданиеЛаб. Занятие 3. Подготовка. Интерфейс системных вы...

              • ЗаданиеЛаб. Занятие 3. Обязательные задания для решения в...

              • СтраницаЛаб. Занятие 4. Подготовка. Подпрограммы (продолже...

              • ЗаданиеЛаб. Занятие 4. Обязательные задания для решения в...

              • ЗаданиеЛаб. Занятие 5. Подготовка. Работа с файлами

              • ЗаданиеЛаб. Занятие 5. Обязательные задания для решения в...

              • СтраницаЛаб. Занятие 6. Подготовка. Цепочечные инструкции

              • ЗаданиеЛаб. Занятие 6. Обязательные задания для решения в...

              • СтраницаЛаб. Занятие 7. Подготовка. Микропрограммирование

              • ФайлIJVM Assembly Language Specification

              • ФайлСправочник ассемблерных инструкций Java-машины

              • ЗаданиеЛаб. Занятие 7.1. Обязательные задания для решения...

              • ЗаданиеЛаб. Занятие 7.2. Обязательные задания для решения...

              • СтраницаЛаб. Занятие 8. Подготовка. Основы работы в UNIX-п...

              • ЗаданиеЛаб. Занятие 8. Обязательные задания для решения в...

              • СтраницаЛаб. Занятие 9. Подготовка. Написание сценариев

              • ЗаданиеЛаб. Занятие 9. Обязательные задания для решения в...

              • СтраницаЛаб. Занятие 10. Подготовка. Многопоточность

              • ЗаданиеЛаб. Занятие 10. Обязательные задания для решения ...

              • СтраницаЛаб. Занятие 11. Подготовка. Разделяемая память

              • ЗаданиеЛаб. Занятие 11. Обязательные задания для решения ...

              • СтраницаЛаб. Занятие 12. Подготовка. Работа с каналами

              • ЗаданиеЛаб. Занятие 12. Обязательные задания для решения ...

              • СтраницаЛаб. Занятие 13. Подготовка. Синхронизация потоков

              • ЗаданиеЛаб. Занятие 13. Обязательные задания для решения ...

              • ЗаданиеЛаб. Занятие 14. Обязательные задания для решения ...

            • Тестирование

            • Дистрибутивы и справочная информация

            • Доборы

        • Математика, механика

        • Педагогическое образование

        • Магистратура

          • Разработка мобильных приложений и компьютерных игр

        • Аспирантура

        • Вечернее отделение

        • Другое

      • Весенний семестр

        • Прикладная математика и информатика

        • Фундаментальная информатика и ИТ

        • Математика, механика

        • Педагогическое образование

        • Магистратура

          • Разработка мобильных приложений и компьютерных игр

        • Аспирантура

        • Вечернее отделение

        • Другое

      • Воскресная компьютерная школа

        • Пользователь компьютера плюс

        • Пользователь прикладных программ

        • Программирование I ступень

        • Программирование II ступень

        • Программирование III ступень

        • Архив

      • Воскресная математическая школа

        • Открытое тестирование РНОМЦ и мехмата ЮФУ - 2025

        • Олимпиадная математическая школа

        • Повышение квалификации

        • Доступная математика

        • Лаборатория математического онлайн-образования мех...

        • Осенняя универсиада

        • Научно-практическая конференция

        • ВМШ

          • ВМШ - 24

        • Летняя олимпиадная математическая школа РНОМЦ и ме...

      • Государственная итоговая аттестация

      • Дополнительное образование

      • Олимпиады

      • Видеолекции

      • Разное

      • Архив курсов

      • Заочная школа мехмата ЮФУ

Служба поддержки сайта
Вы используете гостевой доступ (Вход)
CS221 CA&OS
Сводка хранения данных
Скачать мобильное приложение Яндекс.Метрика