Ассемблер. Двумерный массив. Интересно =)

  • Автор темы Guest
  • Дата начала
G

Guest

#1
Задача: дан двумерный массив, переставить максимальный и минимальный элемент в каждом Столбце. Задачка вроде элементарная, и не могу сказать что я дебил, однако уже 5й день бьюсь и все никак. Ввод - вывод работает нормально, проверял.Найдите ошибку пожалуйста, мне нужен свежий взгляд на происходящее)

Код:
Include macro.lib

Data Segment

Mas dw 50 dup (50 dup (?))

N	dw ?
M	dw ?
I	dw ?
J	dw ?
Nmx dw ?
Nmn dw ?
Max dw ?
Min dw ?


pr  db " $"; 
mesl db "‚ўҐ¤ЁвҐ н«Ґ¬Ґ­вл ¬ ббЁў  $"; Просто "Ввод чисел"
inn db "‚ўҐ¤ЁвҐ Ї«§ Є®«ў® бва®Є $"; это в кодировке DOS - введите колво строк
inm db "‚ўҐ¤ЁвҐ Ї«§ Є®«ў® бв®«Ўж®ў $"; введите колво столбцов


Data Ends

Sst Segment Stack
db 128 dup (?)
Sst Ends

Code Segment

Assume DS : Data,CS:Code,SS:Sst;

func_out Proc

mov CX,N	 ;­ з «® жЁЄ«  ўлў®¤ 
mov BX,0

str11:

push CX
mov CX,M

mov DI,0

str22:

mov AX, Mas[BX][DI]
print_number
message pr
add DI,2

loop M333
jmp M44

M333: jmp str22

M44:
crlf

pop CX

add BX,M
add BX,M

loop M55
jmp obhod1
M55: jmp str11
obhod1:
crlf

ret

func_out EndP


Begin:

mov DX,Data
mov DS,DX

cls
crlf

message inn 

crlf
key_$2bin
mov N,AX; строки
crlf

message inm

crlf
key_$2bin
mov M,AX; столбцы
crlf

message mesl

crlf

;------------------------
;ввод - вывод
mov CX,N
mov BX,0

str1:

push CX
mov CX,M

mov DI,0

str2:

key_$2bin
crlf
mov Mas[BX][DI],AX
; message pr
add DI,2

loop M33
jmp M4

M33: jmp str2

M4:
crlf

pop CX

add BX,M
add BX,M

loop M5
jmp obhod
M5: jmp str1
obhod: 	;Ї®б«Ґ жЁЄ« 


crlf

cls

crlf

call func_out

;---------------------------
; Начало цикла перестановки

mov CX,M
mov BX,0

CJ:; внешний цикл - по столбцам

push CX

mov CX,N
mov DI,0

mov AX, Mas [0][0]
mov Max,AX
mov Min,AX

mov Nmx,0
mov Nmn,0


CI:; Внутренний цикл - по строкам

mov AX, Mas [DI][BX]

CMP AX,Max; сравниваем с максимумом

JG M1

jmp M2

M1:

mov AX,Mas [DI][BX]
mov Max, AX

mov Nmx, DI


jmp ex

M2:

mov AX,Mas [DI][BX]

CMP AX,Min; сравниваем с минимумом

JL M3

jmp ex	

M3:

mov AX,Mas [DI][BX]
mov Min, AX

mov Nmn,DI

ex:

add DI,2; инкрементируем счетчик на 2 тк word

loop CI

; Обмен местами

mov SI,Nmx

mov DX,Mas [SI][BX]

mov SI,Nmn
XCHG DX,Mas [SI][BX]

mov SI,Nmx

mov Mas [SI][BX],DX

add BX,2

pop CX

loop CJ


key_$2bin

cls
crlf
crlf

call func_out

key_$2bin


mov AX,4c00h
int 21h

Code ends

end Begin
Добавлено: http://narod.ru/disk/17433829000/Konserv%40tor.rar.html

это то чем я пользовался при компиляции
 
G

Guest

#2
Спасибо всем большое за 70+ просмотров с этой задачей я разобрался)