![]() |
1. Заголовок или название темы должно быть информативным
2. Все тексты программ должны помещаться в теги [CODE=asm] [/CODE]
3. Прежде чем задавать вопрос, см. "FAQ",если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно, такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Ассемблера. Исключение только с согласия модератора.
5. НЕ используйте форум для личного общения! Все, что не относиться к обсуждению темы - на PM!
6. Проверяйте программы перед тем, как выложить их на форум!!
![]() ![]() |
![]() |
Dub |
![]()
Сообщение
#1
|
Группа: Пользователи Сообщений: 4 Пол: Мужской Реальное имя: Дмитрий Репутация: ![]() ![]() ![]() |
помогите решить задачку
![]() Ввести элементы квадратной матрици 3X3 (байты положительны различны по величине). Найти наименьший элемент среди пренадлежащих главной и побочной диоганалях MIN. Если MIN -элемент главной диагонали и кратин 4 , поменять его местами с первым элементом последней строки, иначе с первым элементом первой строки. Вывести на экран исходную и приобразованную матрицы. Собственная наработка не дает результатов (не сохраняет в цикле данные в di) Явно чтото делаю не правильно, ![]() 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 где нужно поменять местами элементы по условию. |
Dub |
![]()
Сообщение
#2
|
Группа: Пользователи Сообщений: 4 Пол: Мужской Реальное имя: Дмитрий Репутация: ![]() ![]() ![]() |
Если листинга процедуры нехватает, могу выложить файлом листинг всей программы, но не работает у меня только эта процедура. Точнее то что ниже цикла.
![]() |
volvo |
![]()
Сообщение
#3
|
Гость ![]() |
Цитата могу выложить файлом листинг всей программы Выкладывай... Заодно расскажи, с каким ассемблером работаешь. |
Dub |
![]()
Сообщение
#4
|
Группа: Пользователи Сообщений: 4 Пол: Мужской Реальное имя: Дмитрий Репутация: ![]() ![]() ![]() |
Выкладывай... Заодно расскажи, с каким ассемблером работаешь. Работаю с Tasm =)) ![]() ![]() ![]() ![]() Добавлено через 2 мин. ой случайно вставил 4 |
Dub |
![]()
Сообщение
#5
|
Группа: Пользователи Сообщений: 4 Пол: Мужской Реальное имя: Дмитрий Репутация: ![]() ![]() ![]() |
пипец di надо было во внешний цикл запихнуть вот я нуб =(((
но одно радует сам разобрался с проблемой =)) Добавлено через 14 мин. Relative jump out of range by 000Ch bytes - это типо не может прыгнуть так далеко? Добавлено через 14 мин. Если возможно покажите более оптимальный кот на ассемблере, ату какойто он грамосткий получился ![]()
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
|
volvo |
![]()
Сообщение
#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
|
![]() ![]() |
![]() |
Текстовая версия | 17.07.2025 22:10 |