Форум программистов, компьютерный форум, киберфорум
Assembler для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
0 / 0 / 0
Регистрация: 02.01.2020
Сообщений: 8
TASM

Если среднее арифметическое значение отрицательных элементов вектора больше (-5), то отсортировать вектор по убыванию

02.01.2020, 10:21. Показов 1799. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть задание "Если среднее арифметическое значение отрицательных элементов вектора больше 5, то отсортировать элементы вектора по убыванию".

Составил программу на ассемблере. В теории должна работать. Прохожу отладчиком - вообще не могу получить нормальный результат.

Кликните здесь для просмотра всего текста
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
Dseg segment para public 'data'
mas db -1,3,5,2,-7
n dw 5
sum db ?
Dseg ends
Sseg segment para stack 'stack'
 dw 30 dup(0)
Sseg ends
Cseg segment para public 'code'
osn proc near
 assume cs:cseg,ds:dseg,ss:sseg
 mov ax,dseg
 
 mov ds,ax
 mov cx,n
 mov al,0
 mov di,0
 mov bl, 0
 
start: cmp mas[di], 0 ;найти среднее арифметическое векторов меньше 5
 jge met
 add al, mas[di]
 inc bl
met: inc di
 loop start
 
 cbw
 idiv bl ;нахожу ср. арифметич. 
 mov sum, al
 
 cmp sum, -5 ;сравниваю с -5
  jl met2 ;если меньше -5, прыгаю в конец
 
  ;сортировка по убыванию
  mov cx,n
  Cikl2: push cx
   mov cx, n
   dec cx 
   mov si,0 ;si=j
   cikl1: mov di,si
    inc di ;di=j+1
    mov al, mas[si]
    mov bl, mas[di]
    cmp al,bl
    jge met1
     mov mas[si],bl
     mov mas[di],al
    met1: inc si
   loop cikl1
   pop cx
  loop cikl2 
 
 
  
 
 met2: mov ax, 4c00h
 int 21h 
 osn endp
cseg ends
end osn


Или отсортированный массив лежит где-то в другом месте?

Вот результат отладчика:
Миниатюры
Если среднее арифметическое значение отрицательных элементов вектора больше (-5), то отсортировать вектор по убыванию  
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
02.01.2020, 10:21
Ответы с готовыми решениями:

Отсортировать часть массива в порядке возрастания если среднее арифметическое всех элементов больше нуля
Доброго времени суток уважаемые форумчане. Задача: Необходимо отсортировать первые две трети массива в порядке возрастания если...

Если отрицательных элементов матрицы больше, чем положительных, увеличить элементы на среднее арифметическое
Задание. матрица 5 на 5 Если число отрицательных элементов матрицы превышает число положительных, увеличить каждый её элемент на...

Определить среднее арифметическое положительных и среднее арифметическое отрицательных элементов вектора
В целочисленном векторе vectorn определить среднее арифметическое положительных и отдельно среднее арифметическое отрицательных элементов...

8
Модератор
Эксперт по электронике
 Аватар для ФедосеевПавел
8663 / 4500 / 1670
Регистрация: 01.02.2015
Сообщений: 13,921
Записей в блоге: 13
02.01.2020, 18:15
Да, в другом. Дамп показывает 409Dh:0000h, а сегмент данных у вас ds:0000h (или 2110h:0000h).

Выполните по шагам программу до загрузки сегментного регистра ds адресом сегмента данных. После этого на адресе окна дампа нажмите правой кнопкой мыши - появится всплывающее меню - выбирайте "Goto..." - во всплывшем окне наберите ds:0000. После этого в окне дампа будет сегмент данных.
0
0 / 0 / 0
Регистрация: 02.01.2020
Сообщений: 8
03.01.2020, 16:29  [ТС]
ФедосеевПавел
А по другому никак?
0
Модератор
Эксперт по электронике
 Аватар для ФедосеевПавел
8663 / 4500 / 1670
Регистрация: 01.02.2015
Сообщений: 13,921
Записей в блоге: 13
03.01.2020, 16:48
Можно и по другому. Вариантов - море:
1. покинуть ВУЗ с его нелепыми лабораторками
2. найти исполнителя за оплату
3. найти репетитора за оплату
4. разобраться частично и подойти к преподавателю
5. подойти к однокурснику
....

Это ваша, безразличная мне, жизнь.

Добавлено через 2 минуты
Не пойму, что не устраивает в моём предложении:
- научиться видеть содержимое сегмента данных в окне дампа памяти
0
0 / 0 / 0
Регистрация: 02.01.2020
Сообщений: 8
03.01.2020, 19:42  [ТС]
ФедосеевПавел
Ну ок, спасибо
0
0 / 0 / 0
Регистрация: 02.01.2020
Сообщений: 8
03.01.2020, 19:49  [ТС]
ФедосеевПавел
Мне нужен отсортированный массив выше
Это значит что программа сработала неправильно?
Если да, то не подскажете где может быть ошибка?
Миниатюры
Если среднее арифметическое значение отрицательных элементов вектора больше (-5), то отсортировать вектор по убыванию  
0
Модератор
Эксперт по электронике
 Аватар для ФедосеевПавел
8663 / 4500 / 1670
Регистрация: 01.02.2015
Сообщений: 13,921
Записей в блоге: 13
03.01.2020, 20:58
SIuDeNI, странно задавать вопросы о возможной правильности...

Выполняя программу в отладчике, вы заметили, что получаете не тот результат, что ожидали.
В которой из частей?
1. среднее арифметическое значение отрицательных элементов вектора
2. сравнение (больше 5)
3. отсортировать элементы вектора по убыванию

Странное сравнение - IMHO, среднее арифметическое отрицательных чисел ВСЕГДА МЕНЬШЕ 5. Т.е. сортировку выполнять не потребуется - НИКОГДА.

Добавлено через 40 минут
Если бы я делал программу, то для начала разделил её на участки в виде подпрограмм.
Т.е. этапы создания были такими
1. шаблон программы
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
.model  large
 
.stack  200h
 
.data
        msgResult       db      'Result:', 0Dh, 0Ah, '$'
        msgPressAnyKey  db      0Dh, 0Ah, 'Press any key to exit...', '$'
.code
 
main    proc
        ;инициализация сегментного регистра ds адресом сегмента данных
        mov     ax,     @data
        mov     ds,     ax
 
        ;вывод результата
        mov     ah,     09h
        lea     dx,     [msgResult]
        int     21h
        ;ожидание нажатия любой клавиши
        mov     ah,     09h
        lea     dx,     [msgPressAnyKey]
        int     21h
 
        mov     ah,     00h
        int     16h
 
        ;завершение программы
        mov     ax,     4C00h
        int     21h
main    endp
 
end     main

2. решение программы в общем виде
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
.model  large
 
.stack  200h
 
.data
        Array           dw      -1,3,5,2,-7
        Len             dw      ($-Array) / (TYPE Array)
        msgPressAnyKey  db      0Dh, 0Ah, 'Press any key to exit...', '$'
.code
 
;вычисление среднего арифметического отрицательных чисел массива
;на входе:
;  ds:si - указатель на массив
;  cx    - длина массива
;на выходе:
;  ax    - среднее арифметическое
NegAverage      proc
        ret
NegAverage      endp
 
;сортировка массива чисел по неубыванию
;на входе:
;  ds:si - указатель на массив
;  cx    - длина массива
;на выходе:
;  ax    - среднее арифметическое
Sort    proc
        ret
Sort    endp
 
main    proc
        ;инициализация сегментного регистра ds адресом сегмента данных
        mov     ax,     @data
        mov     ds,     ax
 
        ;обработка массива
        ; - вычисление среднего арифметического отрицательных чисел массива
        lea     si,     [Array]
        mov     cx,     [Len]
        call    NegAverage
        ; - сравнение среднего с числом (-5)
        cmp     ax,     -5
        ; - если больше - то сортировать по невозрастанию, иначе - выйти
        jle     @@Exit
        lea     si,     [Array]
        mov     cx,     [Len]
        call    Sort
@@Exit:
        ;ожидание нажатия любой клавиши
        mov     ah,     09h
        lea     dx,     [msgPressAnyKey]
        int     21h
 
        mov     ah,     00h
        int     16h
 
        ;завершение программы
        mov     ax,     4C00h
        int     21h
main    endp
 
end     main

После этого, я бы заполнял код подпрограмм и отлаживал их последовательно.
0
3410 / 1829 / 489
Регистрация: 28.02.2015
Сообщений: 3,696
05.01.2020, 22:24
Цитата Сообщение от SIuDeNI Посмотреть сообщение
Если среднее арифметическое значение отрицательных элементов вектора больше 5
Они уже отрицательны, и меньше 5, в любом случае.
0
0 / 0 / 0
Регистрация: 02.01.2020
Сообщений: 8
06.01.2020, 15:46  [ТС]
Constantin Cat
Там опечатка - меньше или больше -5. В коде в комментариях есть.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
06.01.2020, 15:46
Помогаю со студенческими работами здесь

Присвоить переменной t значение true, если среднее арифметическое элементов двумерного массива больше произведения элементов
Доброго дня !! Помогите пожалуйста !!Присвоить переменной t значение true, если среднее арифметическое элементов двумерного массива больше...

Присвоить переменной t значение true, если среднее арифметическое элементов двумерного массива больше произведения элементов
Присвоить переменной t значение true, если среднее арифметическое элементов двумерного массива больше произведения элементов, находящихся...

Массив: Найти среднее арифметическое отрицательных элементов вектора...
Дан целочисленный вектор A размерности n. 2. Найти среднее арифметическое отрицательных элементов вектора.

Построить вектор из положительных элементов и найти среднее арифметическое из отрицательных элементов матрицы
Дана матрица размерностью nxm. Построить вектор из положительных элементов матрицы. Найти среднее арифметическое из отрицательных...

Подсчитать среднее арифметическое отрицательных элементов вещественного вектора с помощью рекурсии
Все привет! Подсчитать среднее арифметическое отрицательных элементов вещественного вектора. Выполнить с помощью рекурсии. Заранее...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
1С: Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию группы. . .
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
1С: Программный отбор элементов справочника по значению перечисления
Maks 21.03.2026
Установка программного отбора элементов справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит значение перечислений. / / Событие "НачалоВыбора" реквизита на форме. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru