Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Ассемблер _ Массив

Автор: Client 19.04.2009 21:18

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 19.04.2009 21:28

Ну, поменяй чуть-чуть логику:

m1:
mov al, A[si] ; элемент массива в регистр
cmp al, max ; сравнение
jle m2 ; если не больше, идем дальше, иначе - меняем максимум
mov max, al
m2:
inc si ; увеличим индекс
loop m1

Автор: Client 19.04.2009 21:36

так просто smile.gif
А так бы след выполнились команды после м2?

Автор: volvo 19.04.2009 23:13

А так как было у тебя - пришлось бы после JG добавлять безусловный переход на другую метку, которую надо было добавить непосредственно перед LOOP-ом. Оно тебе надо? Лишние метки, лишние переходы...

Автор: Client 20.04.2009 21:32

Вот еще вопрос: как сделать двойное условие? например надо вывести элементы больше 0 и меньше 10. Как тут быть?

Автор: volvo 20.04.2009 22:02

Что значит "как"? Двойное условие (в смысле, 2 условия подряд), сам же сказал:

m1:
mov al, A[si] ; элемент массива в регистр
cmp al, 0 ; сравнение
jle m2 ; если меньше - идем к следующему элементу
cmp al, 10
jge m2
; Вывод содержимого AL
m2:
inc si ; увеличим индекс
loop m1

Автор: Client 20.04.2009 23:14

Опять выручил
Спасиб! good.gif