Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.06.2010, 21:54   #1
Irenka
Пользователь
 
Аватар для Irenka
 
Регистрация: 17.05.2010
Сообщений: 39
Восклицание массив в ассемблере О_о

ТРАБЛ! ТРАБЛ! ТРАБЛ!
НУЖНА СРОЧНО ПОМОЩЬ!!!

Дело в том, что программка не правильно работает. Помогите исправить ошибки, если найдете, чтобы она правильно работала.

Задание
Определить сумму 5 наименьших значений элементов массива целых чисел А[35].

Код
Код:
	DOSSEG
	.MODEL SMALL
	.STACK 100h
	.DATA
mas     DW  5,3,-2,1,8,6     ;объявляем массив чисел
	.CODE
	    MOV AX,@DATA
        MOV DS,AX
	    mov ax,30            ;заносим значение минимума 
        mov sp,6             ;заносим длину массива
        xor bp,bp            ;применяем смещение для рассматривания массива не с 1го элемента 
        mov cx,sp            ;замещаем значение cx значением sp
        mov si,bp            ;замещаем значение si значением bp
met1:   mov bx,[mas+si]      
        cmp bx,ax            ;сравниваем элементы масива с минимумом
        jg  met2             ;если сравниваемый элемент мин-ма, то переходим к следующему
        mov ax,bx            ;если сравниваемый элемент мин-ма, то мин-м = эл-ту
        mov di,si            ;запоминаем номер элемента
met2:   add si,2             ;увеличиваем индекс следующего эл-та на 2
        dec cx               ;уменьшаем на 1 количество шагов
        jnz met1             ;пока не 0 повторяем
        mov  bx,[mas+bp]     ;перестановка
        mov [mas+di],bx      ;          найденного минимума
        mov [mas+bp],ax      ;и 1го (2го, 3го...) элемента
        add dx,ax            ;суммируем найденные минимумы
        dec sp               ;уменьшаем на 1 количество эл-тов массива
        mov cx,sp            
        add bp,2             ;смещение для рассматривания не с 1го (2го, 3го...) элемента
        mov si,bp            
        cmp bp,10            ;выход после найденной суммы 5ти минимумов
        jnz met1 
        MOV AH,4Ch
	INT 21h
	END
Irenka вне форума Ответить с цитированием
Старый 08.06.2010, 00:51   #2
Ulex
Непрофессионал
Участник клуба
 
Аватар для Ulex
 
Регистрация: 01.01.2008
Сообщений: 1,405
По умолчанию

Вы бы хоть вывод какой прикрутили на экран. У меня отладчика сейчас нет, сложно смотреть.
Вот что в глаза бросилось:
-После поиска первого минимума ax так и останется минимальным?

ч.з. n минут дописал:
А вообще задание какое-то странное. Либо я уже туплю.
Например, если массив будет таким 4 3 2 1 4 4 - какая сумма пяти минимальных будет?
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------
Страничка с моими программками http://ulex-masm.ru

Последний раз редактировалось Ulex; 08.06.2010 в 01:03.
Ulex вне форума Ответить с цитированием
Старый 08.06.2010, 01:04   #3
Irenka
Пользователь
 
Аватар для Irenka
 
Регистрация: 17.05.2010
Сообщений: 39
По умолчанию

Да нет. После нахождения минимума он становится на первое место, а второй минимум - на второе и т.д.
Irenka вне форума Ответить с цитированием
Старый 08.06.2010, 01:11   #4
Ulex
Непрофессионал
Участник клуба
 
Аватар для Ulex
 
Регистрация: 01.01.2008
Сообщений: 1,405
По умолчанию

Да это понятно что вы в массиве их тусуете местами.
А вот значение регистра ax?
-перед поиском первого минимума оно ==30 (кстати, почему 30?).
-после того как найден первый минимум, оно==-2
-на поиск следующего минимума (метка met1 вы уходите с ax ==-2
-т.е. второй мнимальный никогда не найдётся, наверное.
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------
Страничка с моими программками http://ulex-masm.ru
Ulex вне форума Ответить с цитированием
Старый 08.06.2010, 01:32   #5
Irenka
Пользователь
 
Аватар для Irenka
 
Регистрация: 17.05.2010
Сообщений: 39
По умолчанию

Минимум равен 30 взят просто так. А на счет второго минимума Вы правы - там ересь всякая начинается.
Irenka вне форума Ответить с цитированием
Старый 08.06.2010, 02:38   #6
Ulex
Непрофессионал
Участник клуба
 
Аватар для Ulex
 
Регистрация: 01.01.2008
Сообщений: 1,405
По умолчанию

это не работает:
Цитата:
mov [mas+bp],ax
Вот чего я на стеке накрутил:

Код:
.MODEL SMALL
.STACK 100h
.DATA
mas     DW  5,-2,0,1,4,2,0     ;объявляем массив чисел
.CODE
	MOV AX,@DATA
	MOV DS,AX
	mov ax,30
	mov cx,6
	push cx
	xor dx, dx
	push dx
	xor si,si
	xor di,di
met1:   mov dx,mas[si]      
	cmp dx,ax            ;сравниваем элементы масива с минимумом
	jg  met2             ;если сравниваемый элемент мин-ма, то переходим к следующему
	mov ax,dx            ;если сравниваемый элемент мин-ма, то мин-м = эл-ту
	mov bx,si
met2:   add si,2             ;увеличиваем индекс следующего эл-та на 2
	loop met1             ;пока не 0 повторяем

	mov dx,mas[di]     ;перестановка
	mov mas[bx],dx      ;          найденного минимума
	mov mas[di],ax      ;и 1го (2го, 3го...) элемента

	pop dx
	add dx,ax
	pop cx
	dec cx
	jz met3
	push cx
	push dx
	mov ax, 30
	add di,2             ;смещение для рассматривания не с 1го (2го, 3го...) элемента
	mov si,di            
	jmp met1
met3:

	xor si, si
	mov cx, 6
nextstV:
	add mas[si], 0030h
	add si, 2
	loop nextstV
	mov mas[si], "$$"

	mov ah,09h
	lea dx, mas
	int 21h

        MOV AH,4Ch
	INT 21h
END
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------
Страничка с моими программками http://ulex-masm.ru
Ulex вне форума Ответить с цитированием
Старый 08.06.2010, 22:31   #7
Irenka
Пользователь
 
Аватар для Irenka
 
Регистрация: 17.05.2010
Сообщений: 39
По умолчанию

Цитата:
nextstV:
add mas[si], 0030h
add si, 2
loop nextstV
mov mas[si], "$$"

mov ah,09h
lea dx, mas
int 21h
^
|
Что ЭТО?
Irenka вне форума Ответить с цитированием
Старый 08.06.2010, 22:38   #8
Ulex
Непрофессионал
Участник клуба
 
Аватар для Ulex
 
Регистрация: 01.01.2008
Сообщений: 1,405
По умолчанию

Ну это я хотел результат сортировки на экранчике посмотреть.
Типа перевёл циферки в символы. Будет работать только на положительных цифрах (0-9). На остальных значениях массива на экран будет всякая чушь выводиться. Это исключительно для проверки, можете закоментривать.
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------
Страничка с моими программками http://ulex-masm.ru
Ulex вне форума Ответить с цитированием
Старый 08.06.2010, 23:54   #9
Irenka
Пользователь
 
Аватар для Irenka
 
Регистрация: 17.05.2010
Сообщений: 39
По умолчанию

Что-то не получается ехе-шник сделать. =(
Не могли бы скинуть, плиз, без той части с переводом в символы?
Irenka вне форума Ответить с цитированием
Старый 09.06.2010, 01:52   #10
Ulex
Непрофессионал
Участник клуба
 
Аватар для Ulex
 
Регистрация: 01.01.2008
Сообщений: 1,405
По умолчанию

Ага, закоментил.
Правда теперь ничё не видно.
Вложения
Тип файла: rar proga46.rar (1.1 Кб, 7 просмотров)
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------
Страничка с моими программками http://ulex-masm.ru
Ulex вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
массив в ассемблере igor17 Помощь студентам 0 02.06.2010 19:07
Массив на ассемблере dron-k Помощь студентам 5 28.07.2009 09:36
рисование в паскале о_О Sarumjan Помощь студентам 8 03.12.2008 23:43