![]() |
|
![]() ![]() ![]() |
|
droha |
|
|||
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 4.10.2009 Репутация: нет Всего: нет |
Помогите, плиз, с таким заданием:
Найти минимальный нечетный элемент и удалить его из массива. Нужно сделать - передачей параметров через стек. Минимальный нечетный я нашел:
Помогите с удалением. P.S. Заранее огромнейшее спасибо!!! |
|||
|
||||
iff |
|
|||
![]() Администратор ![]() ![]() Профиль Группа: Участник Сообщений: 949 Регистрация: 23.3.2007 Репутация: 4 Всего: 16 |
Знаком ";!!!" я пометил те строки, которые я добавил, а знаком ";*" - те, которые изменил. Изменения косаются строк "sseg segment para stack" и "assume cs:cseg, ss:sseg, ds:dseg, es:dseg". В первой я добавил параметр para stack чтобы компилятор понимал, что это сегмент стека. Во второй я дописал es:dseg т.к. в моей подпрограмме используется регистр es. Это сообщение отредактировал(а) iff - 9.10.2010, 18:40 -------------------- DOS... Синей пеленой экран заполнил чистый DOS Мышь... Стала вдруг квадратной, потеряла форму мышь... Я разбил окно, девяностопятое мастдайное окно, И поставил DOS, и тогда увидел: Это счастье, — вот оно. |
|||
|
||||
droha |
|
|||
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 4.10.2009 Репутация: нет Всего: нет |
Спасибо огромное!!! Но есть вопросик!
1. В первом массиве удаляется минимум, но следующее число дублируется 2 раза, как это исправить? 2. А во втором массиве происходит зацикливание? Заранее спасибо за ответ! |
|||
|
||||
iff |
|
|||
![]() Администратор ![]() ![]() Профиль Группа: Участник Сообщений: 949 Регистрация: 23.3.2007 Репутация: 4 Всего: 16 |
1. При отладке кода вам действительно может показаться что последнее число дублируется, но это не так. Что значит удалить элемент из массива?
Итак, синим цветом и жирно я выделил сам массив (адрес - ds:0000), зеленым - его длину (адрес - ds:000E), а красным минимум, элемент со значением которого будет удален (адрес - ds:0010). Все остальное, черного цвета, - мусор. Исходный массив соответственно содержит 0004 0008 0045 0003 0001 0005 0058 Шаг 1. Пусть имеется вот такие данные (дамп после выполнения подпрограммы поиска минимума): ds:0000 0004 0008 0045 0003 ds:0008 0001 0005 0058 0007 ds:0010 0001 0019 0009 000D (Выполнение моей подпрограммы): Шаг 2. Найдем индекс элемента содержащего 1 инструкцией repne scasw. Шаг 3. Сместим (копируем инструкцией rep movsb) элементы, стоящее правее удаляемого, влево на слово. Получим: ds:0000 0004 0008 0045 0003 ds:0008 0005 0058 0058 0007 ds:0010 0001 0019 0009 000D Шаг 4. Уменьшим длину массива на 1 элемент. Т.е. уменьшем значение переменной nx (или ny) на 1. Получим: ds:0000 0004 0008 0045 0003 ds:0008 0005 0058 0058 0006 ds:0010 0001 0019 0009 000D Т.е. раньше мы имели массив 0004 0008 0045 0003 0001 0005 0058, а теперь он содержит 0004 0008 0045 0003 0005 0058. Для большей наглядности просмотрите этот анимированный рисунок: ![]() 2. Моя подпрограмма в принцепе не может перейти в бесконечный цикл. Но из-за оштбки действительно, цикл смещения элементов массива повторяется слишком много раз. Для исправления ошибки добавь после 104 строки строку add cx, [bp+8]. Т.е. у вас должно получиться:
Это сообщение отредактировал(а) iff - 10.10.2010, 20:26 -------------------- DOS... Синей пеленой экран заполнил чистый DOS Мышь... Стала вдруг квадратной, потеряла форму мышь... Я разбил окно, девяностопятое мастдайное окно, И поставил DOS, и тогда увидел: Это счастье, — вот оно. |
|||
|
||||
droha |
|
|||
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 4.10.2009 Репутация: нет Всего: нет |
Все, вроде разобрался! Огромнейшее спасибо за помощь!!!!!
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "Asm для начинающих" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Asm для начинающих | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |