Самый опасный хищник в мире
У меня вопрос по языку ассемблера.
Помогите, пожалуйста, написать программу (хотя бы отдельные элементы).
"Рассмотреть содержимое буфера BUF1 как двумерный массив Mass[i;j], где i - номер строки, j - номер столбца. Вычислить сумму всех элементов вектор-строки N (для всех j) для случая записи массива по столбцам.
i=0...7
j=0..2
N=3"
Если я правильно понимаю, то речь идёт об одномерном массиве длиной 24 элемента, и нужно найти сумму элементов с номерами 4, 12, 20
Сдавать вообще завтра (т.е. последний раз я тут буду перед сдачей завтра в 6.30), но если не сдам, то делать всё равно придётся...
Или может кто знает форум, где смогут помочь с ассемблером, подскажите, пожалуйста!
Заранее всем спасибо!
уже не надо
Помогите, пожалуйста, написать программу (хотя бы отдельные элементы).
"Рассмотреть содержимое буфера BUF1 как двумерный массив Mass[i;j], где i - номер строки, j - номер столбца. Вычислить сумму всех элементов вектор-строки N (для всех j) для случая записи массива по столбцам.
i=0...7
j=0..2
N=3"
Если я правильно понимаю, то речь идёт об одномерном массиве длиной 24 элемента, и нужно найти сумму элементов с номерами 4, 12, 20
Сдавать вообще завтра (т.е. последний раз я тут буду перед сдачей завтра в 6.30), но если не сдам, то делать всё равно придётся...
Или может кто знает форум, где смогут помочь с ассемблером, подскажите, пожалуйста!
Заранее всем спасибо!
уже не надо
Я параллельно буду сам пытаться писать и здесь выкладывать.
;программа
LXI B,O ; иниц. суммы
LXI H, MASS ; иниц. указателя чтения
MVI D, ? ; иниц. счётчика (не знаю, что написать, возможно, 3)
LOOP:
MOV A,M ; чтение текущего байта
можно несколько раз использовать команду INR D (или у нас нужно использовать INX - но ведь D - это регистр, а не регистровая пара?)
другой способ - использовать команду DAD, но, опять-таки, D - это регистр, а не регистровая пара...
тогда попробую так:
INR D
INR D
INR D ; модиф. счётчика
ADD C ; сложение
INR D
INR D
INR D
INR D
INR D
INR D
INR D
INR D
MOV A,M
ADD C
INR D
INR D
INR D
INR D
INR D
INR D
INR D
INR D
MOV A,M
ADD C
Нашла всего одну ссылку
http://forum.progteam.ru/index.php?...mp;showforum=25
Но как я понимаю, тебе нужно сложить элементы третьей строки?
Почему у тебя такие номера?
У меня получилось 2, 10, 18
А то, что написано у тебя, это пятая строка.
Прости, помогаю только чем могу )))))))
Потому что номера изменяются от 0, но мы, наверное, от единицы должны считать... или у нас указатель с ячейку №0 устанавливается вначале, так, что ли?...
Но даже это не столь важно: мне бы нужен сам механизм: как я понимаю, он заключается в том, что мы просто передвигаем указатель чтения, читаем байт в ячейке и складываем его... только очень неуверен. Сейчас занят тем, что просто смотрю другие программы и пытаюсь взять оттуда какие-то куски, строки...
Спасибо за ссылку)
И не надо извиняться, прошу тебя!
А С никак не надо инициализировать сперва? Обнулить? (Я просто не знаю... К чему ты начинаешь добавлять содержимое?)
И вообще — С - это сумма, или наоборот слагаемое?
Каков синтаксис?
КУДА ты деваешь сумму?
(Если нет времени, не отвечай, а то я сейчас тебя совсем с толку собью!))
А подход верный — посмотреть на синтаксис и всё.
Задача ведь с алгоритмической точки зрения элементрная...
Представь себе, что ты - машина Тьюринга. И просто скопируй ее работу. Сдвинулся на ячейку, прочитал, пошел дальше. Шаг влево-шаг вправо-занес в сумму, и опять пошел читать....
...
С, насколько я понимаю, это регистровая пара BC)
Кстати, да: вероятно нужна строка
MVI C,O
Спасибо)
Я бы просто если бы была машиной Тьюринга, сначала обнулила ячейку для суммы, потом стала бы двигаться вдоль ленты, пока не достигла нужного адреса, потом считала бы оттуда значение, пошла в ячейку с суммой и прибавила к ней то, что у меня есть, а потом вернулась туда, где была и отправилась дальше.
И так, пока все не сложится.
На ассемблере это должно быть приблизительно так, но вот синтаксиса я не знаю. Может, даже гораздо проще получится, если там спец команды обращения к ячейке по имени есть, а не только по "адресу"... Я не помню ничего (((
тогда
;программа
LXI B,O ; иниц. суммы
LXI H, MASS ; иниц. указателя чтения
MVI D, 3 ; иниц. счётчика (не знаю, что написать, возможно, 3)
MVI C,O
;тело программы
INR D
INR D
INR D ; модиф. счётчика
LOOP1:
MOV A,M ; чтение текущего байта
ADD C ; сложение
MOV A,С; сохранение LSB
JMP NO_CARRY
INR B; учёт переноса в MSB суммы (если он есть)
NO_CARRY:
DCR D; модиф. счётчика
INX H; модиф. указателя
JNZ LOOP1
INR D
INR D
INR D
INR D
INR D
INR D
INR D
INR D; модиф. счётчика
LOOP2:
MOV A,M ; чтение текущего байта
ADD C ; сложение
MOV A,С; сохранение LSB
JMP NO_CARRY
INR B; учёт переноса в MSB суммы (если он есть)
NO_CARRY:
DCR D; модиф. счётчика
INX H; модиф. указателя
JNZ LOOP2
INR D
INR D
INR D
INR D
INR D
INR D
INR D
INR D
LOOP3:
MOV A,M ; чтение текущего байта
ADD C ; сложение
MOV A,С; сохранение LSB
JMP NO_CARRY
INR B; учёт переноса в MSB суммы (если он есть)
NO_CARRY:
DCR D; модиф. счётчика
INX H; модиф. указателя
JNZ LOOP3
вот, что-то такое и получается...
только нельзя ли как-то объединить все метки, они же одинаковы?
Дилетант
Ладно тогда, спасибо за помощь, не хочу больше отнимать у тебя время)
вот тоже просили помощи
походи по форуму поспрашивай тебе там могут помочь
Спасибо, загляну сейчас)
Удачи тебе на завтра!
Спасибо! Правда, завтра ещё много чего придётся делать в универе...
Скорее всего, курсовик по этому предметы вылетает на допсу, так что если я и зачёта не получу, это уже будет не столь критично)
Если завтра не справлюсь, то можно потом тебя попросить поспрашивать у вас на кафедре (я тогда потом напишу, надо или нет), хорошо?)
Хорошо, конечно... )))
За результат правда не ручаюсь )
Говорю же: вуз довольно специфический.
Спасибо, так средне дела...
Только сейчас вернулся из университета (т.е. был там больше 12 часов, в том числе и из-за Цифр)
Программу подкорректировали, она теперь стала правильной, только вот на её защите я сплоховал... В понедельник теперь... Но уже легче стало.
Там и других проблем ещё много...
Ещё раз спасибо тебе!
Потом выложу правильную программу, думаю, будет интересно)
Обязательно!!!
только комментариев побольше! )))
Дело ещё в том, что я не всё указал, надо было сделать программу на основании некоторого шаблона...
В самом шаблоне достаточно большой блок инициализации, потому как определяются три буфера. Но это также не важно...
вот программа идёт:
LXI B,O ; иниц. суммы
LXI H, BUF1 ; иниц. указателя чтения
MVI D,3 ; иниц. счётчика
MVI C,O
INX H
INX H
INX H ; перемещение указателя на одну позицию вниз
LOOP:
MOV A,M ; чтение текущего байта
ADD C ; сложение
MOV A,С; сохранение LSB
JNC NO_CARRY
INR B ; учёт переноса в MSB суммы (если он есть)
NO_CARRY:
DCR D; модиф. счётчика
INX H
INX H
INX H
INX H
INX H
INX H
INX H; модиф. указателя
JNZ LOOP ; переход на метку LOOP
END
сам удивляюсь, как, но она работает)
Или это автоматически присходит, когда массив иссякает? Или я вообще не туда?
Думаешь, я знаю?)))
Может, из-за того, что мы счётчик инициализируем так:
MVI D,3 ; иниц. счётчика,
а потом его модифицируем:
DCR D; модиф. счётчика?
Или просто буфер заканчивается))
Я и сам далёк от программирования, поэтому не вполне представляю до конца, как она работает)
Но ассемблер нам преподавали тяп-ляп - просто для отмазки: курс отчитан. По-моему мы его не сдавали даже...
Под "я и сам далёк" я не имел ввиду тебя))
У меня такое ощущение, что не так уж и много людей (относительно) разбираются хорошо в нём среди преподавателей. Среди инженеров, программистов, конструкторов, видимо, больше. Т.е. мне кажется этот язык чисто практическим (по сравнению с академическим паскалем)...
Хороший практик решает немыслимые задачи, выезжая порой на интуиции, порой на своем же опыте... А теоретик прекрасно владеет предметом, и может хорошо научить, но вот настоящую задачу будет решать с большим скрипом...
Это имхо, конечно, причем, весьма несвободное от личных пристрастий ))))
Хоть твоё имхо и несвободное, но оно сильно коррелирует с моим имхо, хоть опыта и там, и там нет, зато есть мама-педагог)
Тогда спрашивается: зачем теоретику прекрасно владеть предметом, если на практике это ему нисколько не помогает?) Парадокс...
Видимо, необходимо грамотное сочетание между теоретичекими познаниями и практическим опытом... так получается...