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

Тема в разделе "Другие задачи", создана пользователем -, 31 янв 2010.

  1. Гость

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

    Код (Text):
    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

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

    Спасибо всем большое за 70+ просмотров с этой задачей я разобрался)
     
Загрузка...
Похожие Темы - Ассемблер Двумерный массив
  1. alalai
    Ответов:
    0
    Просмотров:
    954
  2. Dimkawshm
    Ответов:
    2
    Просмотров:
    1.075
  3. Victoria123
    Ответов:
    0
    Просмотров:
    961
  4. MariyaStarikova
    Ответов:
    0
    Просмотров:
    981
  5. vladden
    Ответов:
    1
    Просмотров:
    1.847

Поделиться этой страницей