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

Найти номер максимального числа

14.05.2017, 12:04. Показов 2598. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Максимальное число находит, заношу в регистр BX, а номер пишет 5, хотя должен быть 7 , так как макс число 15 в массиве, в чем ошибка?, Потом нужно номер и максимально число перемножить и поместить в регистр BX



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
;====================================================================
; Main.asm file generated by New Project wizard
;
; Created:   Ср апр 19 2017
; Processor: 8086
; Compiler:  MASM32
;
; Before starting simulation set Internal Memory Size 
; in the 8086 model properties to 0x10000
;====================================================================
    
    CODE    SEGMENT PUBLIC 'CODE'
        ASSUME CS:CODE,DS:DATA
 
START:
mov cx,0
mov AX,DATA 
mov DS,AX
lea SI,X
mov dl,0
mov bl,[si]
 
h:
inc cx
cmp bl,[si+2]
jg Max
mov bl,[si+2]
mov indexMax,dl
mov dl,indexMax
Max:
add si,2
inc dl
cmp cx,len
jne h 
ENDLESS:
    JMP ENDLESS
CODE    ENDS
DATA SEGMENT PUBLIC PARA 'DATA'
X DW 5,6,7,2,3,4,15,1,2,8
indexMax DB ?
len=$-X
DATA ENDS
        END START
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
14.05.2017, 12:04
Ответы с готовыми решениями:

Найти номер максимального элемента массива, содержащем 10 без знаковых чисел
Желательно с комментариями

Найти номер минимального числа
Не могу найти где у меня ошибка(помагите пожалуйст Характеристика последовательности чисел С1,С2,..., Сn Найти номер минемального...

В массиве найти два элемента, стоящих друг за другом, сумма которых больше максимального числа
В массиве D найти, есть ли два элемента, стоящих друг за другом, сумма которых больше максимального числа (максимальное значение массива...

11
Модератор
Эксперт по электронике
 Аватар для ФедосеевПавел
8659 / 4494 / 1669
Регистрация: 01.02.2015
Сообщений: 13,905
Записей в блоге: 12
14.05.2017, 16:05
Лучший ответ Сообщение было отмечено DmitryKud как решение

Решение

Несколько ошибок. Сравните.
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
;====================================================================
; Main.asm file generated by New Project wizard
;
; Created:   Ср апр 19 2017
; Processor: 8086
; Compiler:  MASM32
;
; Before starting simulation set Internal Memory Size
; in the 8086 model properties to 0x10000
;====================================================================
 
CODE    SEGMENT PUBLIC 'CODE'
        ASSUME CS:CODE,DS:DATA
 
START:
        mov AX,DATA
        mov DS,AX
 
        mov cx,len
        lea SI,X
        mov     bx,[si]         ;bx - максимальный элемент
        mov     dl,0            ;индекс текущего элемента
        dec     cx              ;рассматривать будем со 2-го элемента
        add     si,2
        inc     dl
h:
        cmp bx,[si]
        jge Max
        mov bx,[si]
        mov indexMax,dl
Max:
        add si,2
        inc dl
        loop    h
ENDLESS:
        JMP ENDLESS
CODE    ENDS
 
DATA    SEGMENT PUBLIC PARA 'DATA'
X DW 5,6,7,2,3,4,15,1,2,8
len=($-X)/2
indexMax DB ?
DATA    ENDS
 
STACKSEG SEGMENT PARA STACK 'STACK'
        db 100h dup(?)
STACKSEG ENDS
        END START
1
0 / 0 / 0
Регистрация: 14.05.2017
Сообщений: 11
14.05.2017, 20:27  [ТС]
Спасибо, что указали на недостатки,А зачем здесь стек нужен?
0
Модератор
Эксперт по электронике
 Аватар для ФедосеевПавел
8659 / 4494 / 1669
Регистрация: 01.02.2015
Сообщений: 13,905
Записей в блоге: 12
14.05.2017, 20:33
Та ни зачем. Просто при компиляции прочитал предупреждение об отсутствии стека и учёл его.

Но это шутка. На самом деле аппаратная часть постоянно генерирует прерывания, и для их обслуживания требуется немного стека программы пользователя - т.е. обработчики прерываний паразитируют на стеке программы пользователя.
Но они делают это аккуратно, записывая лишь некоторый минимум в стек, а потом изменяют указатель стека (ss:sp) на собственную область. После завершения обработки прерывания всё восстанавливается.
1
Прощай, Мир!
 Аватар для proc3nt
1673 / 831 / 253
Регистрация: 26.05.2012
Сообщений: 3,056
14.05.2017, 20:37
Цитата Сообщение от ФедосеевПавел Посмотреть сообщение
29 mov bl,[si]
bx - максимальный элемент..
Assembler
1
mov bx,[si]
2
0 / 0 / 0
Регистрация: 14.05.2017
Сообщений: 11
15.05.2017, 16:31  [ТС]
а как теперь можно написать эти вычисления используя подпрограмму и стек?
0
0 / 0 / 0
Регистрация: 14.05.2017
Сообщений: 11
15.05.2017, 19:35  [ТС]
Тоесть мы эту саму программу забиваем в подпрограмму, и делаем например 3 разных массива, находим макс числа, и далее.....



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
;====================================================================
; Main.asm file generated by New Project wizard
;
; Created:   Ср апр 19 2017
; Processor: 8086
; Compiler:  MASM32
;
; Before starting simulation set Internal Memory Size 
; in the 8086 model properties to 0x10000
;====================================================================
    
    CODE    SEGMENT PUBLIC 'CODE'
        ASSUME CS:CODE,DS:DATA
 
START:
mov cx,0
mov AX,DATA 
mov DS,AX
lea SI,X
mov bl,[si]
mov dl,1
mov index,dl
lea di, M
mov [di],bl
h:
inc cx
inc dl
cmp bl,[si+2]
jg Max
mov index,dl
mov bl,[si+2]
lea di, M
mov [di],bl
Max:
add si,2
cmp cx,9
jne h
mov dl,index
mov ax,bx
imul dx
mov bx,ax
ENDLESS:
    JMP ENDLESS
CODE    ENDS
DATA SEGMENT PUBLIC PARA 'DATA'
X DW 2,6,2,7,9,8,7,1,2,9
M DB ?
index DB ?
len=$-X
DATA ENDS
        END START
0
Модератор
Эксперт по электронике
 Аватар для ФедосеевПавел
8659 / 4494 / 1669
Регистрация: 01.02.2015
Сообщений: 13,905
Записей в блоге: 12
15.05.2017, 22:37
Цитата Сообщение от DmitryKud Посмотреть сообщение
Тоесть мы эту саму программу забиваем в подпрограмму, и делаем например 3 разных массива, находим макс числа, и далее.....
Да.
1
0 / 0 / 0
Регистрация: 14.05.2017
Сообщений: 11
16.05.2017, 07:49  [ТС]
Цитата Сообщение от ФедосеевПавел Посмотреть сообщение
Да.
а как оперировать со стеком?
0
Модератор
Эксперт по электронике
 Аватар для ФедосеевПавел
8659 / 4494 / 1669
Регистрация: 01.02.2015
Сообщений: 13,905
Записей в блоге: 12
20.05.2017, 00:58
Лучший ответ Сообщение было отмечено DmitryKud как решение

Решение

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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
;====================================================================
; Main.asm file generated by New Project wizard
;
; Created:   Ср апр 19 2017
; Processor: 8086
; Compiler:  MASM32
;
; Before starting simulation set Internal Memory Size
; in the 8086 model properties to 0x10000
;====================================================================
 
    CODE    SEGMENT PUBLIC 'CODE'
        ASSUME CS:CODE,DS:DATA
 
START:
        mov AX,DATA
        mov DS,AX
 
        lea     si,     X
        push    si
        mov     ax,     LenX
        push    ax
        call    MaxIndx
        mov     IndxMaxX,       al
 
        lea     si,     Y
        push    si
        mov     ax,     LenY
        push    ax
        call    MaxIndx
        mov     IndxMaxY,       al
 
        lea     si,     Z
        push    si
        mov     ax,     LenZ
        push    ax
        call    MaxIndx
        mov     IndxMaxZ,       al
 
ENDLESS:
        JMP     ENDLESS
 
MaxIndx proc    Len:word, Array:word
        push    bp
        mov     bp,     sp
        push    bx
        push    cx
        push    dx
        push    si
        push    di
 
        mov     cx,     Len
        mov     si,     Array
        mov     bx,     [si]    ;bx - максимальный элемент
        mov     ax,     0       ;индекс максимального элемента
        mov     dl,     0       ;индекс текущего элемента
        dec     cx              ;рассматривать будем со 2-го элемента
        add     si,     2
        inc     dl
h:
        cmp     bx,     [si]
        jge     Max
        mov     bx,     [si]
        mov     al,     dl
Max:
        add     si,     2
        inc     dl
        loop    h
 
        pop     di
        pop     si
        pop     dx
        pop     cx
        pop     bx
        pop     bp
        ret     4
MaxIndx endp
 
CODE    ENDS
 
DATA SEGMENT PUBLIC PARA 'DATA'
X               DW      2,6,2,7,9,8,7,1,2,9
LenX            equ     ($-X)/2
IndxMaxX        db      ?
Y               dw      9,4,5,6,2,1,5,7,2,0
LenY            equ     ($-Y)/2
IndxMaxY        db      ?
Z               dw      3,2,5,6,2,1,5,7,2,0
LenZ            equ     ($-Z)/2
IndxMaxZ        db      ?
DATA ENDS
 
STACKSEG SEGMENT PARA STACK 'STACK'
        db 100h dup(?)
STACKSEG ENDS
        END START
1
0 / 0 / 0
Регистрация: 14.05.2017
Сообщений: 11
20.05.2017, 05:35  [ТС]
Цитата Сообщение от ФедосеевПавел Посмотреть сообщение
ret 4
возвращаем 4? тоесть?
0
Модератор
Эксперт по электронике
 Аватар для ФедосеевПавел
8659 / 4494 / 1669
Регистрация: 01.02.2015
Сообщений: 13,905
Записей в блоге: 12
20.05.2017, 09:03
Пояснения https://www.cyberforum.ru/post5356782.html
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
20.05.2017, 09:03
Помогаю со студенческими работами здесь

Найти порядковый номер последнего максимального числа.
Написать программу на Паскале. Дана последовательность неотрицательных чисел, последнее из которых равно нулю, причем других равных нулю...

Найти порядковый номер максимального числа последовательности
Вводится числа. Конец ввода - возрастающая последовательность из двух чисел. Найти порядковый номер максимального числа.

Найти номер столбца максимального числа в требуемой строке матрицы
Анализ выполнения и отладка программ обработки массивов Написать программу обработки массива со структурой: Генерация прямоугольного...

Найти номер первого максимального нечетного числа из данного набора
можете написать код для этой программы из раздела "Минимумы и максимумы" minmax13. Дано целое число n и набор из N целых чисел. Найти...

Найти номер первого максимального нечетного числа из заданного набора
помогите пожалуйста разобраться minmax((( дано целое число N и набор из N целых чисел: 1)найти номер первого max-го нечетного числа...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru