Помогите решить задачу с матрицей (ассемблер) |
1. Заголовок или название темы должно быть информативным
2. Все тексты программ должны помещаться в теги [CODE=asm] [/CODE]
3. Прежде чем задавать вопрос, см. "FAQ",если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно, такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Ассемблера. Исключение только с согласия модератора.
5. НЕ используйте форум для личного общения! Все, что не относиться к обсуждению темы - на PM!
6. Проверяйте программы перед тем, как выложить их на форум!!
Помогите решить задачу с матрицей (ассемблер) |
volvo |
2.11.2008 18:34
Сообщение
#21
|
Гость |
Цитата как осуществить непосредственно сдвиг чтобы в основной памяти один элемент матрицы стал на место другого? В esi - адрес ячейки, откуда перемещать, в edi - адрес ячейки куда перемещать. В ecx - количество элементов для перемещения... И вызываешь REP MOVSB для байт, REP MOVSW для слов, или REP MOVSD для двойных слов...Я ж тебе привел пример, как это делается... Ты его смотрел вообще? |
1147 |
2.11.2008 19:05
Сообщение
#22
|
Бывалый Группа: Пользователи Сообщений: 205 Пол: Мужской Реальное имя: Евгений Репутация: 0 |
смотрел разумеется. Но как-то там слишком много всего написано. Мне в институте преподаватель сказал что это делается гораздо проще. С помощью двух циклов-внутренний по строкам, внешний по столбцам
Добавлено через 10 мин. Вот к примеру, самы простой вариант. Дан одномерный массив: 1,3,2,4,7,3. нужно удалить цифру 2 (тоесть сдвинуть 4,7,3 влево). какие адреса нужно указывать в ES и EDI? Добавлено через 48 сек. ESI и EDI |
volvo |
2.11.2008 20:29
Сообщение
#23
|
Гость |
Цитата как-то там слишком много всего написано. Мне в институте преподаватель сказал что это делается гораздо проще. С помощью двух циклов-внутренний по строкам, внешний по столбцам С твоим преподавателем в принципе все понятно... "Легче", конечно, сделать 2 цикла, вместо того одного, который сейчас у меня... А на MASM32 он что, распечатать матрицу (именно для этого используются у меня еще 2 цикла) может одним вызовом? Флаг ему в руки, пусть вызывает... Больше не получишь полных решений, буду приводить только тот кусок, который реализует задание... Вот:Цитата mov eax, rows Цитата Дан одномерный массив: 1,3,2,4,7,3. нужно удалить цифру 2 (тоесть сдвинуть 4,7,3 влево). какие адреса нужно указывать в ES и EDI? Какое ЭТО имеет отношение к теме? Это не удаление столбца в матрице, записанной ПО СТОЛБЦАМ. Это удаление столбца в матрице, записанной ПО СТРОКАМ. Разницу замечаешь? Надо было говорить сразу, что тебе нужно... Тем более, тебя еще и переспросили...В ESI - адрес "четверки", в EDI - адрес "двойки". Типы данных ты не привел, поэтому смещения от начала массива высчитывай сам... Удачи... Сообщение отредактировано: volvo - 2.11.2008 20:36 |
1147 |
2.11.2008 21:35
Сообщение
#24
|
Бывалый Группа: Пользователи Сообщений: 205 Пол: Мужской Реальное имя: Евгений Репутация: 0 |
Жду более "легкого" решения...
как сделаю, обязательно выложу |
Гость |
18.11.2008 12:41
Сообщение
#25
|
Гость |
Более легкое решение:
;Дана матрица 6х5. Вычеркнуть столбец с заданным номером. .DATA A dw 1,3,7,2,4 dw 9,1,3,5,6 dw 2,9,7,4,1 dw 8,2,5,3,7 dw 6,2,7,4,3 dw 5,9,3,5,1 .DATA? inbuf DB 100 DUP (?) .CODE Start: mov ecx,4; здесь задаем номер вычеркиваемого столбца (от 1 до 5) mov edi,ecx cycl0: inc edi loop cycl0 mov ebx,0 mov ax,A mov ecx,4 cycl: mov ax, A[bx+di] mov A[bx+di]-2,ax add di,2 loop cycl mov ecx,4 cycl1: mov ax, A[bx+di]+2 mov A[bx+di]-2,ax add di,2 loop cycl1 mov ecx,4 cycl2: mov ax, A[bx+di]+4 mov A[bx+di]-2,ax add di,2 loop cycl2 mov ecx,4 cycl3: mov ax, A[bx+di]+6 mov A[bx+di]-2,ax add di,2 loop cycl3 mov ecx,4 cycl4: mov ax, A[bx+di]+8 mov A[bx+di]-2,ax add di,2 loop cycl4 mov ecx,4 cycl5: mov ax, A[bx+di]+10 mov A[bx+di]-2,ax add di,2 loop cycl5 mov ecx,6 cycl6: mov ax, A[bx+di]+12 mov A[bx+di]-2,ax add di,2 loop cycl6 |
1147 |
18.11.2008 12:43
Сообщение
#26
|
Бывалый Группа: Пользователи Сообщений: 205 Пол: Мужской Реальное имя: Евгений Репутация: 0 |
блин это не гость. Это я выложил более легкое решение как и обещал. забыл войти просто
|
volvo |
18.11.2008 15:46
Сообщение
#27
|
Гость |
Цитата Это я выложил более легкое решение как и обещал Угу... Настолько легкое, что компилировать его MASM 6.14 напрочь отказался... Хотя правильно. Оно же легкое, чтобы оно было работоспособным - это совсем не обязательно, об этом речи не шло...А после "допиливания" твоей "программы" (почему ту программу, которая приведена в 17-ом посте не надо ни дорабатывать, ни исправлять ошибки, ничего, можно сразу проверить, а твою - нельзя?) она компилируется, но при запуске хочет сразу отправить письмо Биллу Гейтсу. Это ее основная функциональность? |
1147 |
19.11.2008 17:27
Сообщение
#28
|
Бывалый Группа: Пользователи Сообщений: 205 Пол: Мужской Реальное имя: Евгений Репутация: 0 |
ее основная функциональность-удалять заданный столбец. У меня она работает без малейших ошибок. Более того, вчера в институте у меня ее приняли и защитали. Единственный недостаток-много лишних циклов. Ее можно было свести к 2м циклам, как я и говорил раньше. Тогда было бы еще проще
Добавлено через 7 мин. и в допиливании и исправлении "ошибок" она нисколько не нуждается, разве только с целью отправки письма Биллу Гейтсу |
1147 |
19.11.2008 17:55
Сообщение
#29
|
Бывалый Группа: Пользователи Сообщений: 205 Пол: Мужской Реальное имя: Евгений Репутация: 0 |
кроме того программа написана в masm32, с использованием 32х разрядных регистров. Я бы сильно удивился если бы она правильно работала в masm 6.14
|
Гость |
1.05.2013 15:29
Сообщение
#30
|
Гость |
Нужно с клавиатуры ввести предложение а после заменить в предложении символ "а"(или другой), на символ "о"
|
Гость |
1.05.2013 15:31
Сообщение
#31
|
Гость |
[quote name='Гость' date='1.05.2013 15:29' post='162058']
Нужно с клавиатуры ввести предложение а после заменить в предложении символ "а"(или другой), на символ "о" Желательно на 32 и 16 бит в TASMe |
Текстовая версия | 17.11.2024 5:35 |