Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.06.2010, 15:43   #1
СветланаRerum
Пользователь
 
Регистрация: 07.12.2009
Сообщений: 10
По умолчанию Ошибка в нахождении минимального элемента

Здравствуйте,скажите,пожалуйста,поч ему,если,к примеру, сделать замену последнего элемента на 1- минимальный остаётся все равно 2?
я уже и так и так исправляла..меняла.. Посмотрите,пожалуйста..ассемблер тяжко идёт.
что ж там такое не то в цикле,что упускается этот случай..

Код:
model small
.data
array db 5, 2, 3, 3, 2, 9, 7, 3, 7, 5, 5, 4, 3, 5, 4, 2, 4, 7, 6, 4, 8, 5, 6, 3, 6, 2, 5, 1, 3, 6

size_elem = 1 ;размер элемента 
;(константа)
min1 db ?
max1 db ?
smin db 0ah, 0dh, 'minimal element = ', '$'
smax db 0ah, 0dh, 'maximalniy element = ', '$'
.stack 256h
.code
main proc
mov ax, @data 
mov ds, ax 

mov si, 0 ;столбцы
mov bx, 0 ;строки
mov cx, 5 ;для цикла по строкам
mov max1,0
mov min1, 9
external: ;внешний цикл по строкам
push cx 
mov cx, 6 ;для цикла по столбцам
mov si, 0
iternal: ;внутренний цикл по строкам
mov al,array[bx][si] ;в ах первый (очередной) ;элемент матрицы
add si,size_elem ;передвижение на следующий ;элемент в строке 
;сравниваем содержимое 
;текущего элемента в ах 
;с искомым элементом
cmp al, max1
;если текущий совпал с искомым, то переход на него ;для обработки, 
;иначе - цикл продолжения поиска
jb m1 
mov max1, al
m1: inc si
cmp al, min1
jae m2
mov min1, al
m2: inc si
loop iternal
move_next: ;продвижение в матрице
pop cx ;восстанавливаем СХ из 
;стека (5)
add bx, size_elem*2 ;передвигаемся на следующую ;строку
loop external ;цикл (внешний)
mov ah, 09h
mov dx, offset smax
int 21h
mov ah, 02h ;вывод chisla на экран
mov dl, max1
add dl, 30h 
int 21h
mov ax, 4c00h

;есть совпавшие элементы
mov ah, 09h ;вывод сообщений на экран
mov dl, offset smin
int 21h
mov ah, 2h
mov dl, min1
add dl, 30h
int 21h
mov ax,4c00h ;стандартное завершение
;программы
int 21h
main endp
end main ;конец программы

Последний раз редактировалось Stilet; 03.06.2010 в 17:09.
СветланаRerum вне форума Ответить с цитированием
Старый 03.06.2010, 16:00   #2
Doholyan
Форумчанин
 
Регистрация: 26.04.2009
Сообщений: 270
По умолчанию

помоему..этот код вообще не должен работать)!
Doholyan вне форума Ответить с цитированием
Старый 03.06.2010, 20:36   #3
СветланаRerum
Пользователь
 
Регистрация: 07.12.2009
Сообщений: 10
По умолчанию

Да нет) всё вроде работало..мож я ,конечн, там чего-то наисправляла ещё,но вроде нет..))
почему вы так решили??
СветланаRerum вне форума Ответить с цитированием
Старый 03.06.2010, 21:40   #4
Doholyan
Форумчанин
 
Регистрация: 26.04.2009
Сообщений: 270
По умолчанию

у тебя нет, сегментов данных , кода....ну...и стека, хотя он сам может пормироваться с конца сигмента

Последний раз редактировалось Doholyan; 03.06.2010 в 21:44.
Doholyan вне форума Ответить с цитированием
Старый 03.06.2010, 21:46   #5
Ulex
Непрофессионал
Участник клуба
 
Аватар для Ulex
 
Регистрация: 01.01.2008
Сообщений: 1,405
По умолчанию

Да не, нормально всё, это называется упрощённая сегментация (вроде как то так).
Теперь по поводу кода. Я бы сделал так, по крайней мере вроде работает:

Код:
model small
size_elem equ 1 ;размер элемента (константа)

.data
array db  3, 3, 3, 3, 4, 8,   4, 3, 8, 5, 5, 4,   3, 5, 4, 2, 4, 7,   6, 4, 8, 5, 4, 8,   6, 1, 5, 2, 9, 6
min1 db ?
max1 db ?
smin db 0ah, 0dh, 'minimal element = ', '$'
smax db 0ah, 0dh, 'maximalniy element = ', '$'
.stack 256h
.code
main proc
mov ax, @data 
mov ds, ax 

mov si, 0 ;столбцы
mov bx, 0 ;строки
mov cx, 5 ;для цикла по строкам
mov max1,0
mov min1, 9

external: ;внешний цикл по строкам
push cx 
mov cx, 6 ;для цикла по столбцам
mov si, 0
iternal: ;внутренний цикл по строкам
mov al,array[bx][si] ;в ах первый (очередной) ;элемент матрицы
add si,size_elem ;передвижение на следующий ;элемент в строке 
;сравниваем содержимое 
;текущего элемента в ах 
;с искомым элементом
cmp al, max1
;если текущий совпал с искомым, то переход на него ;для обработки, 
;иначе - цикл продолжения поиска
jb m1 
mov max1, al
m1: 		;inc si
cmp al, min1
jae m2
mov min1, al
m2: 		;inc si
loop iternal
move_next: ;продвижение в матрице
pop cx ;восстанавливаем СХ из 
;стека (5)
add bx, size_elem*6 ;передвигаемся на следующую ;строку
loop external ;цикл (внешний)

mov ah, 09h
mov dx, offset smax
int 21h
mov ah, 02h ;вывод chisla на экран
mov dl, max1
add dl, 30h 
int 21h
mov ax, 4c00h

;есть совпавшие элементы
mov ah, 09h ;вывод сообщений на экран
mov dl, offset smin
int 21h
mov ah, 2h
mov dl, min1
add dl, 30h
int 21h
mov ax,4c00h ;стандартное завершение
;программы
int 21h
main endp
end main ;конец программы
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------
Страничка с моими программками http://ulex-masm.ru
Ulex вне форума Ответить с цитированием
Старый 04.06.2010, 13:39   #6
СветланаRerum
Пользователь
 
Регистрация: 07.12.2009
Сообщений: 10
По умолчанию

ух ты ж..точно. :\ cпасибо огромное!!..
СветланаRerum вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поиск минимального элемента в матрице F1eCSo Помощь студентам 0 04.02.2010 17:20
Поиск минимального и максимального элемента в двухмерном массиве. Dem6 Общие вопросы Delphi 10 30.11.2009 20:22
Нахождение минимального элемента в массиве [Паскаль] pionerka Помощь студентам 4 03.11.2009 16:02
Поиск минимального (максимального) элемента массива Radamant Помощь студентам 10 24.12.2008 17:44
Ошибка в нахождении максимума yulia SQL, базы данных 7 26.07.2008 23:54