Помощь - Поиск - Пользователи - Календарь
Полная версия: Массив
Форум «Всё о Паскале» > Delphi, Assembler и другие языки. > Assembler
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
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.