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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 29.05.2010, 23:19   #1
Xanex
Пользователь
 
Регистрация: 08.12.2008
Сообщений: 22
По умолчанию Вывод двумерного массива(asm)

Наверное тупой вопрос, но сломал себе голову, не могу понять почему не хочет выводить (((. Суть задачи такова, нужно ввести с клавиатуры "двумерный массив", найти минимальный элемент в массиве, ну и попутно вывести этот введенный массив в виде матрицы, т.е, к примеру, массив 2 на 2 должен выглядеть.
(1, 2)
(3, 4)
Ввод происходит корректно, поиск минимального элемента тоже, но вот вывод работает не правильно (. В столбце смещается вправо не на 1 элемент, а на 2 (

Код:
;----------------Input procedure
Input proc

      push BX
      push CX
      push DX
      xor AX, AX
      xor BX, BX
      xor CX, CX
      xor DX, DX

      mov AH, 1h
      int 21h
      
      cmp AL, 2Dh ; = 40 = '-'
      jne isFrom0To9
      mov CL, 2Dh

CharInput:
      mov AH, 1h
      int 21h

isFrom0To9:
     cmp AL, 0Dh ; is it equal to CR** = 13?
     je endOfInput
     cmp AL, 39h ; is it greater than '9' = 57?
     jg charInput
     cmp AL, 30h ; is it less than '0' = 48?
     jl charInput

mark:
     sub AL, 30h ; = '0'
     mov BL, AL
     mov AX, DX
     mov DX, 10
     mul DX
     add AX, BX
     mov DX, AX
     jmp charInput

endOfInput:
     mov AX, DX

     call newLine
              
     cmp CL, 2Dh 
     jne mark2
     neg AX
    
mark2:
     pop DX
     pop CX
     pop BX

RET
Input endp

;---------------End of input procedure


;---------------Output procedure

Output proc

     push BX
     push CX
     push DX

     push AX
     xor DX, DX
     xor CX, CX
     mov BX, 10

     test AX, 1000000000000000b
     jz numberOfDigits
     mov AH, 2h
     mov DL, 2Dh
     int 21h

     pop AX
     push AX
     
     neg AX
    
numberOfDigits:
     xor DX, DX
     div BX
     push DX
     inc CL
     cmp AX, 0
     jne numberOfDigits

successiveOutput:      
     pop DX
     add DL, 30h 
     
     mov AH, 2h
     int 21h
     loop successiveOutput

     pop AX
     pop DX
     pop CX
     pop BX

RET
Output endp

;---------------End of output procedure

.model small
.stack 100h
.data
n dw ?
m dw ?
array dw 100 dup(0)

intputMes db "Set array: $"
inputNMes db "Set n: $"
inputMMes db "Set m: $"
outputMinMes db "Min:$"

.code



;=====================================================
Initialize proc
           lea Dx,  inputNMes
           mov Ah,  9h
           int 21h
           call NewLine

           call Input
           mov n, Ax

           call NewLine
           lea Dx,  inputMMes
           mov Ah,  9h
           int 21h
           call NewLine

           call Input
           mov m,  Ax
           call NewLine
           
           xor Dx, Dx
           xor Bx,  Bx
           mov si,  0
           mov Cx,  n
           
           rowsInit:
                push Cx
                mov Cx,  m
                mov si,  0

          columnsInit:
                call Input
                mov array[bx][si],  Ax
                add si, 2
                      
                loop columnsInit
                 
     
          nextInit:
    
               add bx,  2
               inc dx
               cmp dx,  n
               jb rowsInit
               
               call NewLine
               jmp program
           

RET
initialize endp
;=====================================================


main:

jmp start

include io.asm

start:
mov AX,@DATA
mov DS,AX

xor Ax,  Ax
xor Bx,  Bx
xor Cx,  Cx
xor Dx,  Dx

mov si,  0
mov bx,  0

call Initialize


program:
xor Ax,  Ax
xor Bx,  Bx
xor Cx,  Cx
xor Dx,  Dx
mov si, 0

mov Ax, array[bx][si]

rows:
     push Cx
     mov Cx,  m
     mov si,  0

columns:
      add si, 1
      mov Dx,  array[bx][si]
      
      cmp Ax, Dx
      ja less
      
      loop columns
      
      jmp next   

less:
     mov Ax, Dx
     loop columns
     
next:
    
     add bx,  2
     inc di
     cmp di,  n
     jb rows
     
     
     
     
exit:    
     lea Dx, outputMinMes
     mov Bx, Ax
     mov Ah, 9h
     int 21h

     mov Dx, Bx
     mov Ah,  02h
     add Dl,  30h

     int 21h

     xor si, si
     xor bx, bx
     xor Ax, Ax
     mov Cx, Cx

     rowsOut:
                push Cx
                mov Cx,  m
                mov si,  0
                call NewLine

          columnsOut:
                mov Ax,  array[bx][si]
                call Output

                mov Dl, 20h
                mov Ah, 02h
                int 21h

                add si, 2                   
                loop columnsOut
                 
     
          nextOut:
               pop Cx
               add bx,  2
               inc Cx
               cmp Cx,  n
               jb rowsOut
               
                         

     mov AH,4ch
     int 21h
end main

компилятор TASM
Xanex вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вывод двумерного массива Kocapb Общие вопросы C/C++ 4 11.10.2012 11:05
[ASM] вывод параметра zall Помощь студентам 0 20.05.2010 14:45
Функции в си. Вывод двумерного массива из функции. Evgen51 Общие вопросы C/C++ 9 13.05.2010 03:59
Сортировка двумерного массива Dwaight$ Помощь студентам 1 27.05.2009 03:14
Вывод двумерного массива pancho Общие вопросы Delphi 10 25.01.2009 23:31