Лаб. Занятие 3. Обязательные задания.
Лаб. Занятие 3. Обязательная задача [3 балла]
Следует разместить в Moodle решение одной из перечисленных ниже задач (по выбору преподавателя)
-
[
v31.s
] Добавление символа перехода на новую строку в подпрограмме из задачи 5 (см. материалы для подготовки) можно реализовать без помощиprintf
, а используя более простой системный вызов 122, который моделирует работу функцииputchar
. Она имеет единственный аргумент: символ, который необходимо вывести. Нужный символ можно класть на стек примерно так:PUSH 'a'
(для размещения на стеке символа
a
). Организуйте процедуру печать символа перехода на новую строку с помощью системного вызова 122. Объявите для 122 именованную константу по аналогии с_EXIT
и_PRINTF
. В основной программе напечатайте все числа от n (n - положительное целое, объявленное в секции инициализированных данных) до нуля через запятую и пробел, по окончании печати используйте вызов написанной Вами процедуры для перевода курсора на следующую строку. -
[
v32.s
] Создайте процедуру печати всех отрицательных элементов массива (адрес массива и его длина в словах передаются как параметры через стек). В основной программе вызовите написанную Вами процедуру для массива, объявленного в секции инициализированных данных. При печати элементы должны отделяться друг от друга пробелом. По завершению печати курсор должен быть в начале следующей строки. -
[
v33.s
] Создайте функцию суммирования всех элементов массива (адрес массива и его длина в словах передаются функции как параметры, через стек). После вызова функции сумма должна остаться в регистре AX. В основной программе вызовите написанную Вами функцию для массива, объявленного в секции инициализированных данных. По завершению работы функции распечатайте найденную сумму и переведите курсор в начало следующей строки. -
[
v34.s
] Создайте процедуру печати квадратов элементов массива (адрес массива и его длина в словах передаются как параметры через стек). В основной программе вызовите написанную Вами процедуру для массива, объявленного в секции инициализированных данных. При печати элементы должны отделяться друг от друга точкой и пробелом. По завершению печати курсор должен быть в начале следующей строки. -
[
v35.s
] Создайте функцию, которая для отрицательных чисел возвращает модуль числа, а для положительных - квадрат исходного числа. Само число передаётся функции как параметр, через стек. Возвращаемое значение должно оставаться в регистре AX. В основной программе вызовите написанную Вами функцию для всех элементов массива, объявленного в секции инициализированных данных. В основной программе распечатайте новые значения для всех элементов массива и переведите курсор в начало следующей строки. Указание - для перехода от отрицательного числа к его модулю можно использовать инструкцию NEG <аргумент> (подробнее см. стр. 744 в книге Таненбаума). -
[
v36.s
] Создайте процедуру печати элементов массива в обратном порядке (адрес массива и его длина в словах передаются как параметры через стек). В основной программе вызовите написанную Вами процедуру для массива, объявленного в секции инициализированных данных. При печати элементы должны отделяться друг от друга пробелом. По завершению печати курсор должен быть в начале следующей строки. -
[
v37.s
] Создайте функцию, которая подсчитывает количество отрицательных элементов в массиве (адрес массива и его длина в словах передаются функции как параметры, через стек). После вызова функции найденное количество должно остаться в регистре AX. В основной программе вызовите написанную Вами функцию для массива, объявленного в секции инициализированных данных. По завершению работы функции распечатайте количество и переведите курсор в начало следующей строки. -
[
v38.s
] Создайте процедуру печати элементов массива, сначала следует напечатать все четные элементы, а затем все нечетные.Четность и нечетность определяется для самих элементов, а не для их номеров. Адрес массива и его длина в словах передаются как параметры через стек. В основной программе вызовите написанную Вами процедуру для массива, объявленного в секции инициализированных данных. При печати элементы должны отделяться друг от друга запятой и пробелом. По завершению печати курсор должен быть в начале следующей строки. -
[
v39.s
] Создайте функцию, которая подсчитывает количество нечетных элементов в массиве (адрес массива и его длина в словах передаются функции как параметры, через стек). После вызова функции найденное количество должно остаться в регистре AX. В основной программе вызовите написанную Вами функцию для массива, объявленного в секции инициализированных данных. По завершению работы функции распечатайте количество и переведите курсор в начало следующей строки. -
[
v3a.s
] Создайте процедуру печати элементов массива, смещения которых четны (адрес массива и его длина в словах передаются как параметры через стек). В основной программе вызовите написанную Вами процедуру для массива, объявленного в секции инициализированных данных. При печати элементы должны отделяться друг от друга пробелом. По завершению печати курсор должен быть в начале следующей строки. -
[
v3b.s
] Создайте функцию вычисления произведения всех элементов массива (адрес массива и его длина в словах передаются функции как параметры, через стек). После вызова функции произведение должно остаться в регистре AX. Если произведение будет выходить за пределы регистра AX (т. е. после умножения регистр DX будет отличен от 0), следует выдать сообщение "Переполнение регистра AX". В основной программе вызовите написанную Вами функцию для массива, объявленного в секции инициализированных данных. По завершению работы функции распечатайте найденное произведение и переведите курсор в начало следующей строки. -
[
v3c.s
] Создайте процедуру печати элементов массива, сначала следует напечатать все положительные элементы, а затем все отрицательные. Нулевые элементы, если таковые имеются, на печать выводить не следует. Адрес массива и его длина в словах передаются как параметры через стек. В основной программе вызовите написанную Вами процедуру для массива, объявленного в секции инициализированных данных. При печати элементы должны отделяться друг от друга запятой и пробелом. По завершению печати курсор должен быть в начале следующей строки. -
[
v3d.s
] Добавление символа перехода на новую строку в подпрограмме из задачи 5 (см. материалы для подготовки) можно реализовать без помощиprintf
, а используя более простой системный вызов 122, который моделирует работу функцииputchar
. Она имеет единственный аргумент: символ, который необходимо вывести. Нужный символ можно класть на стек примерно так:PUSH 'a'
(для размещения на стеке символа
a
). Организуйте процедуру печати в одну строку сорока символов "тире" ('-') и символа перехода на новую строку с помощью системного вызова 122. Объявите для 122 именованную константу по аналогии с_EXIT
и_PRINTF
. В основной программе напечатайте два любых числа, разделенные пробелом, по окончании печати чисел используйте вызов написанной Вами процедуры для печати "линии" и перевода курсора на следующую строку. -
[
v3e.s
] Создайте функцию, которая подсчитывает количество ненулевых элементов в массиве (адрес массива и его длина в словах передаются функции как параметры, через стек). После вызова функции найденное количество должно остаться в регистре AX. В основной программе вызовите написанную Вами функцию для массива, объявленного в секции инициализированных данных. По завершению работы функции распечатайте количество и переведите курсор в начало следующей строки. -
[
v3f.s
] Создайте процедуру печати всех элементов массива, кратных семи (адрес массива и его длина в словах передаются как параметры через стек). В основной программе вызовите написанную Вами процедуру для массива, объявленного в секции инициализированных данных. При печати элементы должны отделяться друг от пробелом. По завершению печати курсор должен быть в начале следующей строки. -
[
v3g.s
] Создайте функцию, которая для четных чисел возвращает половину исходного числа, а для нечетных - квадрат исходного числа. Само число передаётся функции как параметр, через стек. Возвращаемое значение должно оставаться в регистре AX. В основной программе вызовите написанную Вами функцию для всех элементов массива, объявленного в секции инициализированных данных. В основной программе распечатайте новые значения для всех элементов массива и переведите курсор в начало следующей строки. -
[
v3h.s
] Создайте процедуру печати противоположных элементов массива (адрес массива и его длина в словах передаются как параметры через стек). Сам массив меняться не должен. В основной программе вызовите написанную Вами процедуру для массива, объявленного в секции инициализированных данных. При печати элементы должны отделяться друг от друга запятой и пробелом. По завершению печати курсор должен быть в начале следующей строки. Пример, для массива 1, -2, 3, -4, 0, -6 на печать должен быть выдан набор -1, 2, -3, 4, 0, 6. -
[
v3i.s
] Создайте функцию, которая подсчитывает количество положительных элементов в массиве (адрес массива и его длина в словах передаются функции как параметры, через стек). После вызова функции найденное количество должно остаться в регистре AX. В основной программе вызовите написанную Вами функцию для массива, объявленного в секции инициализированных данных. По завершению работы функции распечатайте количество и переведите курсор в начало следующей строки.