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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.12.2009, 10:54   #1
gwarthy
Новичок
Джуниор
 
Регистрация: 05.12.2009
Сообщений: 1
По умолчанию Поиск минимума/максимума в массиве

Нужно реализовать ввод массива с клавиатуры, в нем могут содержаться двузначные и более числа. Поиск минимума и максимума и вывод их. Обработку ошибок не надо, считаем, что массив всегда задается корректно. Процедуру очистки экрана тоже не надо, зато было бы здорово иметь приглашения к вводу массива и тп.
Увы, я не программист (даже по специальности), поэтому ищу помощи во фрилансе.. Желательно, чтоб в программе были подробные комментарии. Я в состоянии понять алгоритм))).


Если интересует, могу решать высшую математику, дифуры, матан, линейку и тп.
gwarthy вне форума Ответить с цитированием
Старый 06.12.2009, 11:11   #2
alexcoder
Форумчанин
 
Регистрация: 31.05.2009
Сообщений: 786
По умолчанию

Обращайтесь, сделаю быстро, качественно и с комментариями.
Помощь с программами:
vk.com/alexcoder1
e-mail: informatik101@mail.ru
alexcoder вне форума Ответить с цитированием
Старый 28.01.2010, 18:49   #3
SickUSP
Новичок
Джуниор
 
Регистрация: 28.01.2010
Сообщений: 10
По умолчанию

Цитата:
Сообщение от alexcoder Посмотреть сообщение
Обращайтесь, сделаю быстро, качественно и с комментариями.
Это звучит грубо но можно хотябы с нахождением максимальнго числа в массиве (размер не важен) коментариии не важно мне бы код плиз...
SickUSP вне форума Ответить с цитированием
Старый 28.01.2010, 19:01   #4
Sparky
Участник клуба
 
Аватар для Sparky
 
Регистрация: 15.05.2009
Сообщений: 1,222
По умолчанию

нахождение макс
Код:
main:
	xor ax,ax
	xor si,si
	mov bx,offset arr	
	mov ax,word ptr [bx]	;занесли первый элеменент, на регистр, ax=min
	mov cx,4	;так как первый элемент уже обработан количество повторений=n-1

cyc:
	add si,2	;переходим на следующий эелемент
	cmp ax,word ptr[bx+si]	;сравниваем текущее значение с max, word ptr используется так как нам нужен не 1 байт а 2
	jnl no	;если max>текущего переходим на no
	mov ax,[bx+si]

no:
	loop cyc
Процедура ввода, на ax значение введеное
Код:
input proc near
	xor ax,ax
	xor dx,dx
	xor bx,bx
	xor di,di
	push cx
	push si
	mov ah,0ah
	mov dx,offset buff ; адрес буфера
	int 21h 
	
;перевести строку
	mov dl,0ah
	mov ah,02;
	int 21h 
	
; обрабатываем содержимое буфера
	mov si,offset buff+2 ;адрес начала строки
start:
	cmp byte ptr[si]," "
	je _prop
	cmp byte ptr [si],"-" ; если первый символ минус
	jnz _poloz	;в противном случае перейти на обработку положительных
	mov di,1  ; устанавливаем флаг
_prop:
	inc si    ; переходим на следующее
	jmp start
	
_poloz:
	xor ax,ax
	mov bx,10  ; основание системы счисления
_perevod:
	mov cl,[si] ; берем символ из буфера
	cmp cl,0dh  ; проверям равен ли символ переводу строки
	jz _endin	;перейти на конец обработки
	
; если символ не последний, то проверяем его на правильность
	cmp cl,30h  ; если введен неверный символ <0
    	jl _err	
    	cmp cl,39h  ; если введен неверный символ >9
    	ja _err

	sub cl,30h ; делаем из символа число 
	mul bx     ; умножаем на 10
	jc _err
	add ax,cx  ; прибавляем к остальным
	jc _err
	inc si     ; переходим на следующее число

	cmp di,1
	je srav_32768
	cmp ax,32767
	ja _err
	jmp _perevod	; повторяем
srav_32768:
	cmp ax,32768
	ja _err	
	
	jmp _perevod	; повторяем


; если была ошибка, то выводим сообщение об этом и выходим
_err:
	mov dx, offset error
	mov ah,09
	int 21h
	int 20h

; все символы из буфера обработаны число находится в ax
_endin:
	
	cmp di,1 ; если установлен флаг, то
	jnz _endp
	neg ax   ; делаем число отрицательным
	
_endp:
;возвращаем значения регистров
	pop si
	pop	cx	
	ret
endp input
Процедура вывода
Код:
output proc near
	push cx
;; Проверяем число на знак.
        test    ax, ax
        jns     @oi1

;; Если оно отрицательное, выведем минус и оставим его модуль.
	  push ax
        mov     ah, 02h
        mov     dl, '-'
        int     21h
        pop ax
        neg ax
        
;; Количество цифр будем держать в CX.
@oi1:  
        xor     cx, cx
        mov     bx, 10
@oi2:   
       ;cwd
       xor dx,dx
       div bx
; Делим число на десять. В остатке получается последняя цифра.
; Сразу выводить её нельзя, поэтому сохраним её в стэке.
        push    dx
        inc     cx
; А с частным повторяем то же самое, отделяя от него очередную
; цифру справа, пока не останется ноль, что значит, что дальше
; слева только нули.
        test    ax, ax
        jnz     @oi2
; Теперь приступим к выводу.
        mov     ah, 02h
@oi3:   pop     dx
; Извлекаем очередную цифру, переводим её в символ и выводим.
        add     dl, 30h
        int     21h
; Повторим ровно столько раз, сколько цифр насчитали.
        loop    @oi3
     	pop cx
	mov dx," "
	mov ah,02h
	int 21h
	ret
endp output
А что вас удивляет, и почему грубо? Вполне нормально. Вот вам наброски объедините сами
Единственное, что ограничивает полет мысли программиста-компилятор
Sparky вне форума Ответить с цитированием
Старый 28.01.2010, 21:22   #5
SickUSP
Новичок
Джуниор
 
Регистрация: 28.01.2010
Сообщений: 10
По умолчанию

У меня ошибку выдаёт на строке с буфером
mov dx,offset buff ; адрес буфера
Это нужно вроде создать буфер?
SickUSP вне форума Ответить с цитированием
Старый 28.01.2010, 21:55   #6
SickUSP
Новичок
Джуниор
 
Регистрация: 28.01.2010
Сообщений: 10
По умолчанию

лана с буфером разобрался теперь он выдаёт ошибку
Cannot generate COM file: data below initial CS: IP defined
хотя в start стоит /t/x для создания файли типа com если убираю то эту ошибку не выдаёт сразу Warning: No stack а дальше выдаёт ошибку(( что делать в этом случае?
SickUSP вне форума Ответить с цитированием
Старый 28.01.2010, 22:27   #7
airyashov
Форумчанин
 
Регистрация: 02.04.2008
Сообщений: 358
По умолчанию

без кода трудно что-то сказать
неплохо пишу на ассемблере для 80х86
icq: 3(один)7748666
mail: airyashov(а)inbox.ru
airyashov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поиск Максимума в двумерном массиве NSvirus Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 3 20.09.2009 18:04
Поиск минимума в массиве. Sparky Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 10 17.09.2009 19:39
КАК мне поменять 2 минимума и 2 максимума Wi1D Помощь студентам 1 09.12.2008 23:58
выделение жирным шрифтом минимума и максимума из диапазона Bazzer Microsoft Office Excel 11 28.06.2008 18:50
Нахождение минимума и максимума в трехмерном массиве 1234 Помощь студентам 11 26.05.2008 16:23