IPB
ЛогинПароль:

> ПРАВИЛА РАЗДЕЛА!!!

1. Заголовок или название темы должно быть информативным
2. Все тексты программ должны помещаться в теги [CODE=asm] [/CODE]
3. Прежде чем задавать вопрос, см. "FAQ",если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно, такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Ассемблера. Исключение только с согласия модератора.
5. НЕ используйте форум для личного общения! Все, что не относиться к обсуждению темы - на PM!
6. Проверяйте программы перед тем, как выложить их на форум!!

2 страниц V < 1 2  
 Ответить  Открыть новую тему 
> Помогите решить задачу с матрицей (ассемблер)
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
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 2.11.2008 20:29
Сообщение #23


Гость






Цитата
как-то там слишком много всего написано. Мне в институте преподаватель сказал что это делается гораздо проще. С помощью двух циклов-внутренний по строкам, внешний по столбцам
С твоим преподавателем в принципе все понятно... "Легче", конечно, сделать 2 цикла, вместо того одного, который сейчас у меня... А на MASM32 он что, распечатать матрицу (именно для этого используются у меня еще 2 цикла) может одним вызовом? Флаг ему в руки, пусть вызывает... Больше не получишь полных решений, буду приводить только тот кусок, который реализует задание... Вот:

Цитата

	mov eax, rows
sub eax, to_delete
mul cols
mov ecx, eax

cld
mov eax, (to_delete-1)*sizeof(dword)
mul cols

mov edi, offset mx
add edi, eax

mov esi, edi
mov eax, sizeof(dword)
mul cols
add esi, eax
rep movsd ; Один единственный цикл, больше никаких циклов нигде нет...

Все остальное к заданию напрямую не относится... Жду более "легкого" решения...

Цитата
Дан одномерный массив: 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  +


Жду более "легкого" решения...

как сделаю, обязательно выложу
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Гость
сообщение 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  +


блин это не гость. Это я выложил более легкое решение как и обещал. забыл войти просто
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 18.11.2008 15:46
Сообщение #27


Гость






Цитата
Это я выложил более легкое решение как и обещал
Угу... Настолько легкое, что компилировать его MASM 6.14 напрочь отказался... Хотя правильно. Оно же легкое, чтобы оно было работоспособным - это совсем не обязательно, об этом речи не шло...

А после "допиливания" твоей "программы" dry.gif (почему ту программу, которая приведена в 17-ом посте не надо ни дорабатывать, ни исправлять ошибки, ничего, можно сразу проверить, а твою - нельзя?) она компилируется, но при запуске хочет сразу отправить письмо Биллу Гейтсу. Это ее основная функциональность?
 К началу страницы 
+ Ответить 
1147
сообщение 19.11.2008 17:27
Сообщение #28


Бывалый
***

Группа: Пользователи
Сообщений: 205
Пол: Мужской
Реальное имя: Евгений

Репутация: -  0  +


ее основная функциональность-удалять заданный столбец. У меня она работает без малейших ошибок. Более того, вчера в институте у меня ее приняли и защитали. Единственный недостаток-много лишних циклов. Ее можно было свести к 2м циклам, как я и говорил раньше. Тогда было бы еще проще

Добавлено через 7 мин.
и в допиливании и исправлении "ошибок" она нисколько не нуждается, разве только с целью отправки письма Биллу Гейтсу
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
1147
сообщение 19.11.2008 17:55
Сообщение #29


Бывалый
***

Группа: Пользователи
Сообщений: 205
Пол: Мужской
Реальное имя: Евгений

Репутация: -  0  +


кроме того программа написана в masm32, с использованием 32х разрядных регистров. Я бы сильно удивился если бы она правильно работала в masm 6.14
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Гость
сообщение 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
 К началу страницы 
+ Ответить 

2 страниц V < 1 2
 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 17.11.2024 5:35
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"