Ввод чисел и сортировка по возрастанию

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by RadugaStudio, 24 May 2012.

  1. RadugaStudio

    RadugaStudio New Member

    Joined:
    22 Nov 2011
    Messages:
    1
    Likes Received:
    0
    Reputations:
    0
    Пользователь вводит их в строку, например 54321, а программа выводит 12345. Поиск не помог, сам тоже пока не могу разобраться как это сделать т.к. только начал изучать. Сейчас программа выводит какой-то мусор и не выдает результат сортировки...

    data segment para public

    PRINT MACRO STR ; макроподстановка для печати сообщений
    lea DX, STR
    mov AH, 9h ; 09h - функция вывода на экран
    int 21h
    ENDM

    message db 'Введите строку из чисел: $'
    message2 db 'По возрастанию: $'

    Max db 5
    len db 0
    massiv db 6 dup (?)
    data ends


    stck segment para stack
    dw 32 dup(?)
    stck ends

    code segment para public
    assume cs:code, ds:data, ss:stck

    start:

    PRINT message

    mov ax, data
    mov ds, ax

    mov dx, offset max
    mov ah, 10
    int 21h
    mov bl, len
    xor bh, bh
    mov byte ptr massiv, '$'


    C:
    mov cx, data
    dec cx
    lea bx, max
    xor si, si
    B:
    mov ax, [bx + si]
    mov di, si
    A:
    add di, 2
    mov dx, [bx + di]

    cmp ax, dx
    jl davaytuda
    mov [bx+di], ax
    mov [bx+si], dx
    davaytuda:

    mov dx, data
    shl dx, 1
    cmp di, dx
    jnl A
    add si, 2
    loop B
    xor si, si
    xor di, di
    dec bp
    cmp bp,0
    jne c
    mov ah,1
    int 21h
    mov ax, 4c00h
    int 21h

    PRINT message2

    code ends

    end start
     
  2. Gar|k

    Gar|k Moderator

    Joined:
    20 Mar 2009
    Messages:
    1,166
    Likes Received:
    266
    Reputations:
    82
    В чем собственно проблема? Не знаешь, как реализовать цикл или сам алгоритм?

    Алгоритм ведь простой:
    1. Есть массив байт mas
    2. Есть (переменная, регистр, стек) счетчик
    3. Сначала она считает количество введенных символов например (регистр cx)
    4. Далее просто делаешь условие пока не ноль cx, dec cx - и выводишь из памяти mas[cx] в теле цикла.

    Чтобы было с циклами проще по первой загоняй регистры в стек, перед циклом.
     
    _________________________