Консультация № 192474
25.01.2018, 23:38
0.00 руб.
0 16 1
Добрый день, уважаемые эксперты. У меня есть вопрос по CompModel. Требуется Ваша помощь с составлением программы, которая находит из массива чисел номер ячейки первого отрицательного числа и выводит его. Массив задается вручную,. Например, 20 значений начиная с адреса 50. Заранее благодарю Вас.

Обсуждение

давно
Посетитель
7438
7205
26.01.2018, 11:36
общий
Адресаты:
Здравствуйте! Самостоятельно не пробовали? Показывайте, не стесняйтесь... Быстрее получите ответ...
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
давно
Посетитель
401768
7
26.01.2018, 11:46
общий
Честно говоря, пробовал, но дальше массива я не знаю как и что делать. Просто банально не понимаю как это сделать. Даже не нашел команду как вывести адрес ячейки или это может иначе как-то делается
давно
Посетитель
7438
7205
26.01.2018, 11:59
общий
Адресаты:
Как же Вы учитесь? Как сдавали предыдущие задания? Или это - самое первое?
Кстати, что понимается под "выводит его"? Куда?
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
давно
Посетитель
401768
7
27.01.2018, 11:00
общий
Моя специальность вообще не связана с программированием. Нам внезапно добавили что-то типа дополнительных занятий на 20 академ. часов, где в т.ч. есть и CompModel, который мы пробегаем за 2-3 пары и это единственное задание по нему. Никто в нем не разбирается и нам ничего не хотят пояснять. Такое дело.

Результат выводит в выходной регистр OR
давно
Посетитель
401768
7
27.01.2018, 11:05
общий
Я находил от Вас ответ на такой вопрос https://rfpro.ru/question/188495# Как я понял это могло бы быть основой, но совсем не понятно как переделать таким образом, чтобы, во-первых, программа останавливалась после нахождения первого отрицательного числа, во-вторых, чтобы выводила номер ячейки в регистр OR, где это первое отрицательное число находится
давно
Посетитель
401768
7
27.01.2018, 13:05
общий
Получилось сделать эту программу, которая выводит последнее отрицательное число. В массиве могут быть и положительные и отрицательные, она все равно выводит последнее отрицательное. А по заданию требуется, чтобы выводила в регистр OR номер ячейки первого отрицательного числа. Чем можете тут помочь?

RD #40
WR R1
RD #10
WR R2
L1:RD @R1+
JNS L2
WR R3
L2: JRNZ R2,L1
RD R3
OUT
HLT
давно
Посетитель
7438
7205
27.01.2018, 13:16
общий
это ответ
Здравствуйте, SenseiDuke!
Где-то так Не забудьте внести в окно "Память" числа.
Напоминаю, что отрицательные числа кодируются '1' в старшем разряде
[code lang=asm]RD #50 ;адрес массива
WR R1 ;будем адресовать с помощью регистра R1
RD #20 ;20 значений
WR R2 ;r2 - счетчик массива

L1:RD @R1+ ;читаем очередное число с автоинкрементом адреса
js found ;нашли отрицательное - выходим
JRNZ R2,L1 ;счетчик уменьшается на 1, не 0 - продолжаем поиск
;просмотрели все числа, отрицательные не нашлись, выводим 0
RD #0
jmp print
found: rd r1 ;адрес следующего числа
sbi #1 ;адрес первого отрицательного
print:OUT ;выводим в OR
HLT
[/code]
5
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
давно
Посетитель
7438
7205
27.01.2018, 13:19
общий
Адресаты:
Приятно видеть ваш код Молодец! Ошибка в том, что после нахождения первого отрицательного значения надо сразу переходить на вывод результата, а не продолжать поиск. посмотрите, как сделано у меня...
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
давно
Посетитель
7438
7205
27.01.2018, 13:22
общий
Адресаты:
И плюс, не надо было сохранять значение отрицательного числа
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
давно
Посетитель
401768
7
28.01.2018, 01:05
общий
Снова здравствуйте, у меня вышло на этот раз так, что программа находит первое отрицательное число и выводит его. И ей всё равно, что положительные числа с нулем(нулями) стоят до первого отрицательного числа или что их нету, проверил, всё работает. Единственное, что осталось - сделать так, чтобы вместо первого отрицательного числа в регистр OR выводился номер ячейки этого первого отрицательного числа. Вот тут действительно идей нету. Подскажите, пожалуйста, может команда есть какая-то для вывода адреса ячейки или дело в другом?

Вот код
RD #40
WR R1
RD #10
WR R2
L1:RD @R1+
JNS L2
WR R3
JS 9
L2: JRNZ R2,L1
RD R3
OUT
HLT

Знаю, что могут быть некоторые недочеты, но в таком виде все работает.
давно
Посетитель
7438
7205
28.01.2018, 13:40
общий
Адресаты:
Ну так посмотрите, как я сделал. Надо выводить содержимое R1, только предварительно надо отнять единицу, т.к. после считывания числа, адрес увеличивается на 1, вот эту 1 и надо обратно отнять.
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
давно
Посетитель
401768
7
28.01.2018, 14:05
общий
Сделал, благодарю Вас)

RD #40
WR R1
RD #10
WR R2
L1:RD @R1+
JNS L2
WR R3
JS 9
L2: JRNZ R2,L1
RD R1
SUB #1
OUT
HLT
давно
Посетитель
7438
7205
28.01.2018, 14:22
общий
Адресаты:
Ну и славненько
Вот видите, ничего сложного
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
давно
Посетитель
7438
7205
28.01.2018, 14:25
общий
Адресаты:
Можно чуток соптимизировать
[code lang=asm]RD #40
WR R1
RD #10
WR R2
L1:RD @R1+
JS L2
JRNZ R2,L1
L2:RD R1
SUB #1
OUT
HLT[/code]
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
давно
Посетитель
7438
7205
28.01.2018, 14:28
общий
Адресаты:
Кстати, в моей программке был еще предусмотрено вывод 0, если не было найдено ни одного отрицательного числа
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
давно
Посетитель
401768
7
28.01.2018, 14:51
общий
Понял Вас, спасибо
Форма ответа