· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.HELHEIM —› Помогите новвичку

Посл.отвђт Сообщенiе


Дата: Ноя 15, 2004 23:10:32

Нужно написать программу для процессора 8086, выполняющую поиск минимального и максимального числа в массиве. Массив содержит 16-разрядные числа со знаком. Адрес массива - в DS:SI, число элементов - в CX. Результат работы программы: в AX - минимальное значение, в DX - максимальное.

Я тут набросал кое-что, но она почему-то не работает:

;вход
;
;в cx-число элем массива
; ds:si-адрес массива
;
;выход
; ax-min
; dx-max
;__________________________________

.model tiny
.code

org 100h

start:

;открываем файл

open_file:
mov dx,offset file_name
mov ax,3d00h
int 21h
jc error_file ; переход, если ошибка чтения файла

mov ds:[si],ax ; записываем адрес массива
mov bx,ax
mov dx,offset buffer
mov cx,1024
mov ah,3fh
int 21h ; читаем 1024 из файла
jc close_file ; если ошибка, закрыть файл

mov cx,ax ; число прочитанных байтов в cx
cmp cx,0
je close_file ; если cx=0 - закрываем файл

close_file:
mov ah,3eh
int 21h
jmp metka

error_file:
mov dx, offset mess_error
mov ah,9 ; вывод строки на экран
int 21h

mov ah,0 ;ожидание нажатия любой клавиши
int 16h

metka: ; конец процедуры open_file


call minmax
mov ah,9
pop dx
int 21h ; вывод dx на экран
pop ax
mov dx,ax
mov ah,9
int 21h ; вывод ax на экран
ret

; процедура поиска минимального и макс. значения
minmax proc

mov ax,ds:[si]
mov dx,ds:[si]
dec cx

next:

add si,2
mov bx,ds:[si]
cmp ax,bx
jge lab1
mov ax,bx

lab1:

cmp dx,bx
jle lab2
mov dx,bx

lab2:

loop next

push ax
push dx

minmax endp

file_name db 'proga.txt',0,'!$'
mess_error db 'Error'
buffer equ $

end start


Дата: Ноя 15, 2004 23:11:09

Помогите пожалуйста исправить ошибки...


Дата: Ноя 16, 2004 00:20:16

Вот тебе строки с 95 по 99
mess_error db 'Error$' 
buffer equ $ 
int 20h

end start


По крайней мере не будет зависать...


Дата: Ноя 16, 2004 04:04:43

Lokofan
но она почему-то не работает
Потому что набросал кое-что.
Попробуй заварить чай, насыпав в заварник опавших листьев.


Дата: Ноя 16, 2004 09:00:00

Пробовал, всё равно не помогает...


Дата: Ноя 16, 2004 09:45:20

ipse
По крайней мере не будет зависать...
Прежде чем постить посмотри внимательно на код. Программа пытается завершить свое выполнение при помощи ret - сразу после int 21h ; вывод ax на экран.

Lokofan
Ты хочешь получить готовое решение?


Дата: Ноя 16, 2004 15:44:45

Я не хочу получить готовое решение, я хочу, чтобы исправили мои ошибки, которых, наверное, у меня очень много...
Но сам я их не вижу, т.к. плохо разбираюсь в Ассемблере...


Дата: Ноя 17, 2004 03:47:52

Lokofan
т.к. плохо разбираюсь в Ассемблере
Imho тут дело не в ассемблере. Например, как поведет себя твой код, если исходный файл не будет открыт?

Попробуй для начала нарисовать блок-схему или написать пошаговый алгоритм того, что необходимо сделать.

PS не пытайся никого обмануть.


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.058