IPB
ЛогинПароль:

> ПРАВИЛА РАЗДЕЛА!!!

1. Заголовок или название темы должно быть информативным
2. Все тексты программ должны помещаться в теги [CODE=asm] [/CODE]
3. Прежде чем задавать вопрос, см. "FAQ",если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно, такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Ассемблера. Исключение только с согласия модератора.
5. НЕ используйте форум для личного общения! Все, что не относиться к обсуждению темы - на PM!
6. Проверяйте программы перед тем, как выложить их на форум!!

 
 Ответить  Открыть новую тему 
> Поменять местами элементы в матрице, По заданному условию
сообщение
Сообщение #1





Группа: Пользователи
Сообщений: 4
Пол: Мужской
Реальное имя: Дмитрий

Репутация: -  0  +


помогите решить задачку smile.gif

Ввести элементы квадратной матрици 3X3 (байты положительны различны по величине).

Найти наименьший элемент среди пренадлежащих главной и побочной диоганалях MIN. Если MIN -элемент главной диагонали и
кратин 4 , поменять его местами с первым элементом последней строки, иначе с первым элементом первой строки.
Вывести на экран исходную и приобразованную матрицы.


Собственная наработка не дает результатов (не сохраняет в цикле данные в di)
Явно чтото делаю не правильно, unsure.gif тока сам не магу найти ошибку а точнее не вижу как это сделать

poisk_min proc
   push dx
   xor dx,dx
	mov cx, 2
	mov bx, 0
	mov dl,array_2[bx][si]
cikl_min1:
	mov si, 0
	mov di, 0
	push cx
	mov cx, 3
cikl_min2:
        cmp dl,array_2[bx][si]
		jna n
		mov dl,array_2[bx][si]
		mov ax,bx
                mov di,si  
        n:		
	inc si		
loop cikl_min2
        pop cx
	add bx,3
loop cikl_min1
      ; outint di
	   cmp ax,0
	   jne ne_0
	   test dl,11b
	   jnz ne_kr

    cmp di,0
    jne s_1
    mov cl,array[0][0]
    mov array[0][0],dl
    mov array[0][0],cl
    jmp es_1
s_1:
    cmp di,1
    jne s_2
    mov cl,array[0][0]
    mov array[0][0],dl
    mov array[8][0],cl
    jmp es_1
s_2:
    cmp di,2
    jne kon
    mov cl,array[0][0]
    mov array[0][0],dl
    mov array[8][0],cl
es_1:
    lea dx,str_minGK
    mov ah,9h
    int 21h	
jmp kon	   
ne_kr:
    mov cl, array[6][0]
    mov array[6][0],dl
    mov array[bx][si],cl
	lea dx,str_minGnK
    mov ah,9h
    int 21h	
jmp kon
ne_0:

    mov cl, array[0][6]
    mov array[0][6],dl
    mov array[bx][si],cl

	lea dx,str_minP
    mov ah,9h
    int 21h	
kon:	
    pop dx	
ret
poisk_min endp


В данной программе использую для поиска матрицу 2 на 2 побочные и главные диагонали и 3 на 3 где нужно поменять местами элементы по условию.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2





Группа: Пользователи
Сообщений: 4
Пол: Мужской
Реальное имя: Дмитрий

Репутация: -  0  +


Если листинга процедуры нехватает, могу выложить файлом листинг всей программы, но не работает у меня только эта процедура. Точнее то что ниже цикла. smile.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Гость






Цитата
могу выложить файлом листинг всей программы
Выкладывай... Заодно расскажи, с каким ассемблером работаешь.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4





Группа: Пользователи
Сообщений: 4
Пол: Мужской
Реальное имя: Дмитрий

Репутация: -  0  +


Цитата(volvo @ 25.04.2010 17:49) *

Выкладывай... Заодно расскажи, с каким ассемблером работаешь.



Работаю с Tasm =))
Прикрепленный файл  Daleev1.txt ( 5.83 килобайт ) Кол-во скачиваний: 1167
Прикрепленный файл  Daleev1.txt ( 5.83 килобайт ) Кол-во скачиваний: 1167
Прикрепленный файл  Daleev1.txt ( 5.83 килобайт ) Кол-во скачиваний: 1167
Прикрепленный файл  Daleev1.txt ( 5.83 килобайт ) Кол-во скачиваний: 1167


Добавлено через 2 мин.
ой случайно вставил 4
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5





Группа: Пользователи
Сообщений: 4
Пол: Мужской
Реальное имя: Дмитрий

Репутация: -  0  +


пипец di надо было во внешний цикл запихнуть вот я нуб =(((

но одно радует сам разобрался с проблемой =))

Добавлено через 14 мин.
Relative jump out of range by 000Ch bytes - это типо не может прыгнуть так далеко?

Добавлено через 14 мин.
Если возможно покажите более оптимальный кот на ассемблере, ату какойто он грамосткий получился wacko.gif

 
poisk_min proc
   push dx
   xor dx,dx
   mov di, 0
	mov cx, 2
	mov bx, 0
	mov dl,array_2[bx][si]
cikl_min1:
	mov si, 0
	push cx
	mov cx, 3
cikl_min2:
        cmp dl,array_2[bx][si]
		jna n
		mov dl,array_2[bx][si]
                        mov di,si
		mov ax,bx
                        
                        
        n:		
	inc si		
loop cikl_min2
    pop cx
	add bx,3
loop cikl_min1

	   cmp ax,0
	   jne ne_0
	   test dl,11b
	   jnz ne_kr
    mov cl,array[0][0]
    mov array[0][0],dl
 cmp di,0
    jne s_1
    mov array[0][0],cl
    jmp es_1
s_1:
    cmp di,1
    jne s_2
   mov array[4][0],cl
    jmp es_1
s_2:
    cmp di,2
    jne kon
    mov array[8][0],cl
es_1:
    lea dx,str_minGK
    mov ah,9h
    int 21h	
jmp kon	   
ne_kr:
    mov cl,array[6][0]
    mov array[6][0],dl
    cmp di,0
    jne s_11
    mov array[0][0],cl
    jmp es_11
s_11:
    cmp di,1
    jne s_22
   mov array[4][0],cl
    jmp es_11
s_22:
    cmp di,2
    jne kon
    mov array[8][0],cl
es_11:
    lea dx,str_minGnK
    mov ah,9h
    int 21h	
jmp kon
ne_0:
    mov cl,array[6][0]
    mov array[6][0],dl
    cmp di,0
    jne s_21
    mov array[6][0],cl
    jmp es_21
s_21:
    cmp di,1
    jne s_32
   mov array[4][0],cl
    jmp es_21
s_32:
    cmp di,2
    jne kon
    mov array[2][0],cl
es_21:
	lea dx,str_minP
    mov ah,9h
    int 21h	
kon:	
    pop dx	
ret
poisk_min endp

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Гость






Что-то ты перемудрил тут... Все проще делается, насколько я это вижу:

process_matrix proc

	; тут сохранишь все, что надо

	mov bx, 0	; элемент (0, 0)
	mov ax, bx

	mov DL, array[bx]
	xor DH, DH	; Ноль - если минимум будет на главной диагонали
			; иначе - единица
	
	; ищем минимум среди элементов главной диагонали
	mov cx, 2
cycle_main:
	add bx, 3
	cmp DL, array[bx]
	jna no_1
	mov DL, array[bx]
	mov ax, bx	; сохраняем индекс минимума
no_1:
	loop cycle_main
	
	mov bx, 0
	; а теперь - проходим по дополнительной диагонали
	mov cx, 3
cycle_alt:
	add bx, 2
	cmp DL, array[bx]
	jna no_2
	mov DL, array[bx]
	mov DH, 1	; Признак того, что минимум - на побочной диагонали
	mov ax, bx	; сохраняем индекс минимума
no_2:
	loop cycle_alt
	
	; Ну, дальше все понятно, если DH = 0 - то проверить 
	; array[ax] на кратность 4, и поменять с элементом array[6],
	; иначе - array[ax] меняется с array[0]
	
	; восстанавливаешь все сохраненные регистры
	
	ret
process_matrix endp
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Гость






Levitra Generico Vendita
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Гость






Levitra Dauerstander
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 7.04.2025 6:10
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name