Помощь - Поиск - Пользователи - Календарь
Полная версия: Массив
Форум «Всё о Паскале» > Современный Паскаль и другие языки > Ассемблер
Client
sseg segment	
db 128 dup(?)
sseg ends
dseg segment
A db 1,2,3,4,5
B db 5,6,7,8,9
s db 1 dup(?)
max db 1 dup(?)
dseg ends
cseg segment
assumme ss:sseg,cs:cseg,ds:dseg
start:
mov ax,dseg
mov ds,ax
mov al,a[0]
mov max,al
mov si,0
mov cx,5
m1:
mov al,A[si] ;элемент массива в регистр
cmp al,max ;сравнение
inc si ; увеличим индекс
jg m2 ; если больше, то переход на м2, а если нет, то куда?
m2:
mov max,al
loop m1
mov al,max
mov s,al
mov al,b[0]
mov max,al
mov cx,5
mov si,0
m3:
mov al,b[si]
cmp al,max
inc si
jg m4
m4:
mov max,al
loop m3
mov AL,max
add s,al
mov ah,2h
mov dl,s
int 21h

mov ah,4ch
int 21h
cseg ends
end start
По заданию надо сложить 2 макс элемента в 2 массивах.
volvo
Ну, поменяй чуть-чуть логику:
m1:
mov al, A[si] ; элемент массива в регистр
cmp al, max ; сравнение
jle m2 ; если не больше, идем дальше, иначе - меняем максимум
mov max, al
m2:
inc si ; увеличим индекс
loop m1
Client
так просто smile.gif
А так бы след выполнились команды после м2?
volvo
А так как было у тебя - пришлось бы после JG добавлять безусловный переход на другую метку, которую надо было добавить непосредственно перед LOOP-ом. Оно тебе надо? Лишние метки, лишние переходы...
Client
Вот еще вопрос: как сделать двойное условие? например надо вывести элементы больше 0 и меньше 10. Как тут быть?
volvo
Что значит "как"? Двойное условие (в смысле, 2 условия подряд), сам же сказал:

m1:
mov al, A[si] ; элемент массива в регистр
cmp al, 0 ; сравнение
jle m2 ; если меньше - идем к следующему элементу
cmp al, 10
jge m2
; Вывод содержимого AL
m2:
inc si ; увеличим индекс
loop m1
Client
Опять выручил
Спасиб! good.gif
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.