21:23

Самый опасный хищник в мире
У меня вопрос по языку ассемблера.

Помогите, пожалуйста, написать программу (хотя бы отдельные элементы).



"Рассмотреть содержимое буфера BUF1 как двумерный массив Mass[i;j], где i - номер строки, j - номер столбца. Вычислить сумму всех элементов вектор-строки N (для всех j) для случая записи массива по столбцам.

i=0...7

j=0..2

N=3"



Если я правильно понимаю, то речь идёт об одномерном массиве длиной 24 элемента, и нужно найти сумму элементов с номерами 4, 12, 20



Сдавать вообще завтра (т.е. последний раз я тут буду перед сдачей завтра в 6.30), но если не сдам, то делать всё равно придётся...





Или может кто знает форум, где смогут помочь с ассемблером, подскажите, пожалуйста!



Заранее всем спасибо!



уже не надо

@темы: Программирование (тема закрыта

Комментарии
30.05.2007 в 21:32

Самый опасный хищник в мире
У меня есть несколько примеров сложения, но во всех из них складываются соседние элементы массива, поэтому главная трудность сдесь - перемещение указателя чтения.

Я параллельно буду сам пытаться писать и здесь выкладывать.



;программа

LXI B,O ; иниц. суммы

LXI H, MASS ; иниц. указателя чтения

MVI D, ? ; иниц. счётчика (не знаю, что написать, возможно, 3)



LOOP:

MOV A,M ; чтение текущего байта
30.05.2007 в 22:06

Самый опасный хищник в мире
Далее нужно переместить указатель:

можно несколько раз использовать команду 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









30.05.2007 в 22:12

На плечах гигантов, на спинах электронов
Dieter Zerium

Нашла всего одну ссылку

http://forum.progteam.ru/index.php?...mp;showforum=25



Но как я понимаю, тебе нужно сложить элементы третьей строки?

Почему у тебя такие номера?

У меня получилось 2, 10, 18

А то, что написано у тебя, это пятая строка.



Прости, помогаю только чем могу )))))))
30.05.2007 в 22:19

Самый опасный хищник в мире
Дилетант

Потому что номера изменяются от 0, но мы, наверное, от единицы должны считать... или у нас указатель с ячейку №0 устанавливается вначале, так, что ли?...



Но даже это не столь важно: мне бы нужен сам механизм: как я понимаю, он заключается в том, что мы просто передвигаем указатель чтения, читаем байт в ячейке и складываем его... только очень неуверен. Сейчас занят тем, что просто смотрю другие программы и пытаюсь взять оттуда какие-то куски, строки...



Спасибо за ссылку)

И не надо извиняться, прошу тебя!
30.05.2007 в 22:20

На плечах гигантов, на спинах электронов
Dieter Zerium только приблизительно понимаю, что написано, но выглядит логично.

А С никак не надо инициализировать сперва? Обнулить? (Я просто не знаю... К чему ты начинаешь добавлять содержимое?)

И вообще — С - это сумма, или наоборот слагаемое?

Каков синтаксис?

КУДА ты деваешь сумму?

(Если нет времени, не отвечай, а то я сейчас тебя совсем с толку собью!))
30.05.2007 в 22:26

На плечах гигантов, на спинах электронов
Dieter Zerium это был ответ на предыдущее... )))

А подход верный — посмотреть на синтаксис и всё.

Задача ведь с алгоритмической точки зрения элементрная...

Представь себе, что ты - машина Тьюринга. И просто скопируй ее работу. Сдвинулся на ячейку, прочитал, пошел дальше. Шаг влево-шаг вправо-занес в сумму, и опять пошел читать....

...
30.05.2007 в 22:37

Самый опасный хищник в мире
Дилетант

С, насколько я понимаю, это регистровая пара BC)



Кстати, да: вероятно нужна строка

MVI C,O

Спасибо)
30.05.2007 в 22:44

На плечах гигантов, на спинах электронов
Dieter Zerium ))) да не за что...
Я бы просто если бы была машиной Тьюринга, сначала обнулила ячейку для суммы, потом стала бы двигаться вдоль ленты, пока не достигла нужного адреса, потом считала бы оттуда значение, пошла в ячейку с суммой и прибавила к ней то, что у меня есть, а потом вернулась туда, где была и отправилась дальше.
И так, пока все не сложится.
На ассемблере это должно быть приблизительно так, но вот синтаксиса я не знаю. Может, даже гораздо проще получится, если там спец команды обращения к ячейке по имени есть, а не только по "адресу"... Я не помню ничего (((
30.05.2007 в 22:58

Самый опасный хищник в мире
Вот я ещё думаю, что, наверное, нужно организовать обход для случая наличия MSB:

тогда

;программа

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



вот, что-то такое и получается...

только нельзя ли как-то объединить все метки, они же одинаковы?



Дилетант

Ладно тогда, спасибо за помощь, не хочу больше отнимать у тебя время)
30.05.2007 в 23:00

http://forum.cxem.net/index.php?sho...amp;mode=linear

вот тоже просили помощи

походи по форуму поспрашивай тебе там могут помочь
30.05.2007 в 23:05

Самый опасный хищник в мире
#Free world#

Спасибо, загляну сейчас)
30.05.2007 в 23:08

На плечах гигантов, на спинах электронов
Dieter Zerium какое там время, а главное, какая там помощь... так только... (((



Удачи тебе на завтра!

30.05.2007 в 23:17

Самый опасный хищник в мире
Я там зарегистрировался, но почему-то не имею прав для создания новой темы((
30.05.2007 в 23:20

Самый опасный хищник в мире
Дилетант

Спасибо! Правда, завтра ещё много чего придётся делать в универе...

Скорее всего, курсовик по этому предметы вылетает на допсу, так что если я и зачёта не получу, это уже будет не столь критично)

Если завтра не справлюсь, то можно потом тебя попросить поспрашивать у вас на кафедре (я тогда потом напишу, надо или нет), хорошо?)
31.05.2007 в 20:26

На плечах гигантов, на спинах электронов
Dieter Zerium как дела?

Хорошо, конечно... )))

За результат правда не ручаюсь )

Говорю же: вуз довольно специфический.
31.05.2007 в 21:36

Самый опасный хищник в мире
Дилетант

Спасибо, так средне дела...

Только сейчас вернулся из университета (т.е. был там больше 12 часов, в том числе и из-за Цифр)

Программу подкорректировали, она теперь стала правильной, только вот на её защите я сплоховал... В понедельник теперь... Но уже легче стало.



Там и других проблем ещё много...



Ещё раз спасибо тебе!



Потом выложу правильную программу, думаю, будет интересно)
31.05.2007 в 23:14

На плечах гигантов, на спинах электронов
Dieter Zerium Потом выложу правильную программу, думаю, будет интересно)

Обязательно!!!

только комментариев побольше! )))
31.05.2007 в 23:15

На плечах гигантов, на спинах электронов
Dieter Zerium ну а вообще, гляжу я, — дела не слишком и плохо. Ты устал просто. Это пройдет )))
31.05.2007 в 23:48

Самый опасный хищник в мире
ага, устал((



Дело ещё в том, что я не всё указал, надо было сделать программу на основании некоторого шаблона...

В самом шаблоне достаточно большой блок инициализации, потому как определяются три буфера. Но это также не важно...



вот программа идёт:



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



сам удивляюсь, как, но она работает)
01.06.2007 в 13:31

На плечах гигантов, на спинах электронов
Dieter Zerium всё относительно "понимаю", кроме того, как она останавливается )))

Или это автоматически присходит, когда массив иссякает? Или я вообще не туда?
01.06.2007 в 17:43

Самый опасный хищник в мире
Дилетант

Думаешь, я знаю?)))

Может, из-за того, что мы счётчик инициализируем так:

MVI D,3 ; иниц. счётчика,

а потом его модифицируем:

DCR D; модиф. счётчика?



Или просто буфер заканчивается))

Я и сам далёк от программирования, поэтому не вполне представляю до конца, как она работает)
01.06.2007 в 22:24

На плечах гигантов, на спинах электронов
Dieter Zerium я-то ведь от программирования НЕ далека! (((( Вот что не радует :-D

Но ассемблер нам преподавали тяп-ляп - просто для отмазки: курс отчитан. По-моему мы его не сдавали даже...
01.06.2007 в 22:30

Самый опасный хищник в мире
Дилетант

Под "я и сам далёк" я не имел ввиду тебя))

У меня такое ощущение, что не так уж и много людей (относительно) разбираются хорошо в нём среди преподавателей. Среди инженеров, программистов, конструкторов, видимо, больше. Т.е. мне кажется этот язык чисто практическим (по сравнению с академическим паскалем)...

01.06.2007 в 23:06

На плечах гигантов, на спинах электронов
Dieter Zerium Знаешь, я тебе скажу, как программист с большим стажем и преподаватель со стажем не таким большим: теория от практики отличаются весьма сильно.

Хороший практик решает немыслимые задачи, выезжая порой на интуиции, порой на своем же опыте... А теоретик прекрасно владеет предметом, и может хорошо научить, но вот настоящую задачу будет решать с большим скрипом...

Это имхо, конечно, причем, весьма несвободное от личных пристрастий ))))
01.06.2007 в 23:27

Самый опасный хищник в мире
Дилетант

Хоть твоё имхо и несвободное, но оно сильно коррелирует с моим имхо, хоть опыта и там, и там нет, зато есть мама-педагог)

Тогда спрашивается: зачем теоретику прекрасно владеть предметом, если на практике это ему нисколько не помогает?) Парадокс...

Видимо, необходимо грамотное сочетание между теоретичекими познаниями и практическим опытом... так получается...
01.03.2013 в 16:03

Владелец дневника видит IP-адреса пользователей, оставивших комментарии!