Форум программистов, компьютерный форум, киберфорум
Наши страницы
Assembler для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/9: Рейтинг темы: голосов - 9, средняя оценка - 4.67
CheGuevara
0 / 0 / 0
Регистрация: 20.02.2011
Сообщений: 34
1

Найти максимальный элемент массива и записать его в Rg BH (формат элементов массива - байт).

08.06.2011, 16:08. Просмотров 1689. Ответов 4
Метки нет (Все метки)

Помогите пожалуйста написать программу на ассемблере. Буду очень сильно благодарен.

Найти максимальный элемент массива и записать его в Rg BH (формат элементов массива - байт).
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.06.2011, 16:08
Ответы с готовыми решениями:

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

Найти сумму элементов массива и максимальный элемент
нада найти суму елементов массива и максимальний елемент. вот текс програми. тут ещет только...

Найти максимальный элемент массива и посчитать сумму элементов стоящих после него
Дано задание: найти максимальный элемент массива и посчитать сумму элементов стоящих после него....

Найти максимальный элемент массива, вывести его индекс. Найти среднее арифметическое элементов массива
Найти максимальный элемент массива, вывести его индекс. Найти среднее арифметическое элементов...

Найти максимальный элемент массива среди элементов с n-го по k-й и его индекс
Задан одномерный массив A. Найти максимальный элемент среди элементов с n-го по k-й и его индекс ...

4
Thread
programmer
1871 / 343 / 27
Регистрация: 01.06.2011
Сообщений: 3,117
Записей в блоге: 1
08.06.2011, 20:38 2
Assembler
1
2
3
4
5
6
7
8
9
10
xor si,si
xor cx,cx
mov bh,byte ptr[mass+si]
 
@@:
inc si
mov al,byte ptr[mass+si]
cmp bh,al
ja @b
xchg
В цикл сам возьмёшь на длину строки
0
CheGuevara
0 / 0 / 0
Регистрация: 20.02.2011
Сообщений: 34
11.06.2011, 00:39  [ТС] 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
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
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
; Найти минимальный элемент массива и записать его в BH
; формат элементов массива - байт
 
; Подпрограммы:
; main - главная подпрограмма
; min - поиск минимального элемента в массиве
; zero - обнуление регистров
; input - подтверждение продолжения выполнения программы
; input_num - ввод чисел
; output - вывод результата на экран
;---------------------------------------------------------
 
 
.MODEL small                    
 
Sseg SEGMENT STACK 'stack'          
    dw 256 DUP (?)              
Sseg ENDS                   
 
Dseg SEGMENT 'data'             
    mas db 10 dup (?)
    caret db 0Ah,0Dh,'$'
    error db 'Symbol not correct!$'
    hello db 'Hello! This program looks for the minimum element of an array of 10 elements, given random.$'
    next db 'To continue, press enter...$'
    intermas db 'Enter the array elements$'
    result db 'Mimimym: $'
Dseg ENDS
 
Cseg SEGMENT 'code'                     
    ASSUME CS:Cseg,DS:Dseg,SS:Sseg          
 
    main PROC FAR               
        start:
        config:
        PUSH DS
        MOV AX,0
        PUSH AX
        MOV AX,Dseg
        MOV DS,AX
        MOV DX,OFFSET hello
        MOV AH,09h
        INT 21h
        MOV DX,OFFSET caret
        INT 21h
        CALL input      
        index:
        CALL zero
        CALL input_num
        CALL min
        CALL output
        CALL input
        RET
    main ENDP
 
    zero PROC NEAR
        MOV AX,0
        MOV BX,0
        MOV CX,0
        MOV DX,0
            RET 
    zero ENDP
    
    min PROC NEAR
        MOV SI,0
        MOV CX,10
        MOV AL,255
        cycle1:
        MOV AH,mas[SI]
        CMP AH,AL
        JA no
        MOV AL,AH
        no:
        INC SI
        LOOP cycle1
        MOV BH,AL
        RET
    min ENDP
    
    input PROC NEAR
        MOV DX,OFFSET next
        INT 21h
        MOV AH,09h
        MOV DX,OFFSET caret
        INT 21h
        nextsimbol:
        MOV AH,08h
        INT 21h
        CMP AL,2Fh
        JL exit
        MOV DX,OFFSET next
        MOV AH,09h
        INT 21h
        MOV DX,OFFSET caret
        MOV AH,09h
        INT 21h
        JMP nextsimbol
        exit:
        RET
    input ENDP
    
    input_num PROC NEAR 
        MOV DX,OFFSET intermas
        MOV AH,09h
        INT 21h
        MOV DX,OFFSET caret
        INT 21h 
    mov cx,10
    mov si,00
    cycle2:
    m_next:
    mov ah,01h
    int 21h
    cmp al,2fh
    jl m_out
    cmp al,30h
    jl m_next
    cmp al,39h
    ja m_next
    SUB AL,30h
    XOR AH,AH
    XCHG AX,BX
    MOV DX,0Ah  
    MUL DX                              
    ADD BX,AX
    jmp m_next
    m_err:
    MOV DX,OFFSET caret             
    MOV AH,9                    
    INT 21h                 
    MOV DX,OFFSET error             
    MOV AH,9                
    INT 21h                 
    MOV DX,OFFSET caret         
    MOV AH,9                    
    INT 21h                 
    JMP m_next
    m_out:
    MOV mas[SI],bl
    inc si
    MOV AH,09h
    MOV DX,OFFSET caret
    INT 21h
    mov ax,0
    mov bx,0
    loop cycle2
    ret             
    input_num ENDP
    
    output PROC NEAR                                
        MOV DX,OFFSET caret                     
        MOV AH,9                                
        INT 21h                                 
        MOV DX,OFFSET result                    
        MOV AH,9                                
        INT 21h                                 
        MOV AX,0                                
        MOV AL,BH                           
        PUSH -1                                 
        MOV CX,10                           
        l:
        MOV DX,0                            
        DIV CX                              
        PUSH DX                                 
        CMP AX,0                                
        JNE l                               
        MOV AH,2h
        l2:
        POP DX                              
        CMP DX,-1                               
        JE  ex                                  
        ADD DL,'0'                              
        INT 21h                                 
        JMP l2                                  
        ex:
        MOV DX,OFFSET caret                     
        MOV AH,9                                
        INT 21h                                 
        MOV AH,9                                
        INT 21h                                                         
        RET                                         
    output ENDP
Cseg ENDS
END main
0
Thread
programmer
1871 / 343 / 27
Регистрация: 01.06.2011
Сообщений: 3,117
Записей в блоге: 1
11.06.2011, 01:35 4
Попробуй в 71 ja на jb заменить.Хотя не факт,я мельком глянул.
0
CheGuevara
0 / 0 / 0
Регистрация: 20.02.2011
Сообщений: 34
11.06.2011, 12:35  [ТС] 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
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
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
; Подпрограммы:
; main - главная подпрограмма
; min - поиск максимального элемента в массиве
; zero - обнуление регистров
; input - подтверждение продолжения выполнения программы
; input_num - ввод чисел
; output - вывод результата на экран
 
 
.MODEL small                    
 
Sseg SEGMENT STACK 'stack'          
    dw 256 DUP (?)              
Sseg ENDS                   
 
Dseg SEGMENT 'data'             
    mas db 10 dup (?)
    caret db 0Ah,0Dh,'$'
    error db 'Symbol not correct!$'
    hello db 'Hello! This program looks for the maximum element of an array of 10 elements, given random.$'
    next db 'To continue, press enter...$'
    intermas db 'Enter the array elements$'
    result db 'maximum: $'
Dseg ENDS
 
Cseg SEGMENT 'code'                     
    ASSUME CS:Cseg,DS:Dseg,SS:Sseg          
 
    main PROC FAR               
        start:
        config:
        PUSH DS
        MOV AX,0
        PUSH AX
        MOV AX,Dseg
        MOV DS,AX
        MOV DX,OFFSET hello
        MOV AH,09h
        INT 21h
        MOV DX,OFFSET caret
        INT 21h
        CALL input      
        index:
        CALL zero
        CALL input_num
        CALL min
        CALL output
        CALL input
        RET
    main ENDP
 
    zero PROC NEAR
        MOV AX,0
        MOV BX,0
        MOV CX,0
        MOV DX,0
            RET 
    zero ENDP
    
    min PROC NEAR
        MOV SI,0
        MOV CX,10
        MOV AL,0
        cycle1:
        MOV AH,mas[SI]
        CMP AL,AH
        JA no
        MOV AL,AH
        no:
        INC SI
        LOOP cycle1
        MOV BH,AL
        RET
    min ENDP
    
    input PROC NEAR
        MOV DX,OFFSET next
        INT 21h
        MOV AH,09h
        MOV DX,OFFSET caret
        INT 21h
        nextsimbol:
        MOV AH,08h
        INT 21h
        CMP AL,2Fh
        JL exit
        MOV DX,OFFSET next
        MOV AH,09h
        INT 21h
        MOV DX,OFFSET caret
        MOV AH,09h
        INT 21h
        JMP nextsimbol
        exit:
        RET
    input ENDP
    
    input_num PROC NEAR 
        MOV DX,OFFSET intermas
        MOV AH,09h
        INT 21h
        MOV DX,OFFSET caret
        INT 21h 
    mov cx,10
    mov si,00
    cycle2:
    m_next:
    mov ah,01h
    int 21h
    cmp al,2fh
    jl m_out
    cmp al,30h
    jl m_next
    cmp al,39h
    ja m_next
    SUB AL,30h
    XOR AH,AH
    XCHG AX,BX
    MOV DX,0Ah  
    MUL DX                              
    ADD BX,AX
    jmp m_next
    m_err:
    MOV DX,OFFSET caret             
    MOV AH,9                    
    INT 21h                 
    MOV DX,OFFSET error             
    MOV AH,9                
    INT 21h                 
    MOV DX,OFFSET caret         
    MOV AH,9                    
    INT 21h                 
    JMP m_next
    m_out:
    MOV mas[SI],bl
    inc si
    MOV AH,09h
    MOV DX,OFFSET caret
    INT 21h
    mov ax,0
    mov bx,0
    loop cycle2
    ret             
    input_num ENDP
    
    output PROC NEAR                                
        MOV DX,OFFSET caret                     
        MOV AH,9                                
        INT 21h                                 
        MOV DX,OFFSET result                    
        MOV AH,9                                
        INT 21h                                 
        MOV AX,0                                
        MOV AL,BH                           
        PUSH -1                                 
        MOV CX,10                           
        l:
        MOV DX,0                            
        DIV CX                              
        PUSH DX                                 
        CMP AX,0                                
        JNE l                               
        MOV AH,2h
        l2:
        POP DX                              
        CMP DX,-1                               
        JE  ex                                  
        ADD DL,'0'                              
        INT 21h                                 
        JMP l2                                  
        ex:
        MOV DX,OFFSET caret                     
        MOV AH,9                                
        INT 21h                                 
        MOV AH,9                                
        INT 21h                                                         
        RET                                         
    output ENDP
Cseg ENDS
END main
Добавлено через 10 часов 55 минут
Thread, спасибо за помощь тебе. всё сделал правда по-своему, но всёже спасибо.
Я со всем справился, борльше помощь тут ненужна.
0
11.06.2011, 12:35
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.06.2011, 12:35

Найти максимальный элемент массива из его элементов с нечетными номерами
пожалуйста дан массив A размера N. Найти максимальный элемент из его элементов с нечетными...

Найти максимальный элемент массива из его элементов с нечетными номерами
Скоро экзамен , кто чем может ) Помоги ближнему , ибо смех продлевает жизнь...) 15. Дан...

Среди элементов массива найти максимальный элемент и его номер
Координаты n векторов заданные матрицей А(n,m) (m<=5, n<=6). Посчитать длину этих векторов,...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru