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

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

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

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

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

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

  1. 100)2300232200231000230299

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

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

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

  1.     in;
  2.     jm   F;
  3.     st   X;
  4.     sub  X;
  5.     sub  X;
  6. F:  out;
  7.     halt;

Замечание. halt в используемой нами версии интерпретатора - это команда 99 (т.е. stop)

4.588235
Your rating: Нет Average: 4.6 (17 votes)

Комментарии

Ильюхов Александр аватар

Задача №1

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

Объяснение задачи:

  1. 0100) 23 0023  // Запись в сумматор числа 23
  2. 0103) 22 0023  // Пересылка содержимого в сумматоре числа 23 в ячейку с номером 0023
  3. 0106) 10 0023  // Суммирование содержимго сумматора с содержимым в ячейке с номером 0023, в результате будет 46
  4. 0109) 02       // Вывод содержимого сумматора на экран
  5. 0110) 99       // Остановка программы

Ильюхов Александр аватар

Задача №2

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

Запуск программы начинается с адреса 0100:

  1. 094)              // Ячейка для хранения 1
  2. 096)              // Ячейка для хранения X
  3. 098)              // Ячейка для хранения 2X
  4. 100)   23 0001    //S:=1
  5. 103)   22 0094    // СОХРАНЯЕМ 1
  6. 106)   01         //S:=X
  7. 107)   22 0096    // СОХРАНЯЕМ X
  8. 110)   10 0096    //S:=S+X  (S=2X)
  9. 113)   22 0098    // СОХРАНЯЕМ 2X
  10. 116)   10 0096    //S:=S+X  (S=3X)
  11. 119)   11 0098    //S:=S-2X (3X-2X)
  12. 122)   11 0096    //s:=S-X  (3X-2X-X)
  13. 125)   11 0094    //S:=S-1  (3X-2X-X-1)
  14. 128)   02         //ВЫВОД РЕЗУЛЬТАТА
  15. 129)   99         //ОСТАНОВКА

Ильюхов Александр аватар

Задача №3

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

  1. LA 0001;
  2. ST ONE;
  3. IN;
  4. ST X;
  5. ADD X;
  6. ST X2;
  7. ADD X;
  8. SUB X2;
  9. SUB X;
  10. SUB ONE;
  11. OUT;
  12. HALT;

Ильюхов Александр аватар

Задача №4

Задача4. Объясните, какую задачу и как решает следующая программа на Ассемблере:
Программа, после ввода числа, проверяет меньше ли оно нуля. Если введенное число меньше, то программа переходит по метке F к команде вывода этого числа. Если число не меньше нуля, то сохраняет его в ячейку памяти X, и преобразует его в отрицательное (в сумматоре), вычитая его из сумматора дважды, после этого выводит на экран

  1.                  
  2.     in;
  3.     jm   F;  //Переход к метке F, если регистр Z=-1
  4.     st   X;
  5.     sub  X;  //S=0
  6.     sub  X; //S=-X
  7. F:  out;
  8.     halt;

Хорошо, Александр

Единственное но - эти задачи уже решены другими. Но если Вы пропустили их через себя - польза несомненна и можно считать, что к контрольной МиК-тема у Вас отработана.
Тем не менее, одно замечание. Речь о задаче 2. Её не следует решать "в лоб", а можно проще! Подумайте как.

Ильюхов Александр аватар

Другой вариант Задачи №2

Валерий Шахамболетович, вчера, при решении задачи №2, у меня возникло небольшое недопонимание, так как результат функции 3X-2X-X-1 не зависит от X, и поэтому я решил пойти безотказным путем. Спасибо за то, что внесли ясность, написав, что задачу №2 можно решить проще.

Другой вариант решения задачи №2:

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

Выполнение программы начинается с адреса 0100

  1. 098)            // Ячейка для хранения 1
  2. 100)   01       // Ввод в сумматор X (для формальности)
  3. 101)   23 0001  // S:=1
  4. 104)   22 0098  // Сохраняем 1
  5. 107)   11 0098  // S:=S-1  (S=0)
  6. 110)   11 0098  // S:=S-1  (S=-1)
  7. 113)   02       // Вывод результата
  8. 114)   99       // Остановка

Вы дожали!

Вы дожали её, Александр!

Романов Максим аватар

Задача 1

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

  1. Пояснение:
  2. 0100) 23 0023  // Команда записывает число 23 в сумматор
  3. 0103) 22 0023  // Отправление содержимого сумматора в ячейку с номером 0023
  4. 0106) 10 0023  // 23+23=46
  5. 0109) 02       // Вывод сумматора на экран
  6. 0110) 99       // Остановиться

Ильюхов Александр аватар

Спасибо!

Спасибо Валерий Шахамболетович. Рад стараться!