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

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

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.02.2009, 03:48   #1
Liquor
 
Регистрация: 15.02.2009
Сообщений: 3
По умолчанию Сортировка

Код:
.model small	           ;Указываем модель памяти
.data                      ;Описываем сегмент данных
    text1 db 'Vvedite stroky: $'  ;приглашения к вводу строк
    text2 db 'Otvet: $'
	;kol db 3 dup (?)     ;переменная для хранения количества символов
	buffer1 db 79 dup (?),'$'	;Буффер для ввода строки
	enter_ db 0Dh,0Ah,'$'
.stack 16h                 ;Определяем размер стека в 16 байт
.code                      ;Описание сегмента кода

;-----------------------------------------------------
;---процедура очистки экрана---
clrscr proc near
	mov ax, 03
	int 10h
clrscr endp
;---процедура очистки экрана---
;-----------------------------------------------------

;-----------------------------------------------------
;---процедура установки курсора---
cursor proc near           ;Процедура установки курсора
    push ax             ;Сохранение регистров 
    push bx
    mov bh,0            ;Загрузка номера страницы видеопамяти
    mov ah,2            ;Функция изменения положения курсора 
    int 10h             ;Прерывание BIOS 
    pop bx              ;Восстановление регистров 
    pop ax
    ret                 ;Возврат из процедуры 
cursor endp  
;---процедура установки курсора---
;-----------------------------------------------------

;-----------------------------------------------------
;---процедура вывода сообщений---
Message proc near          ;Процедура для вывода сообщений
        push ax            ;Сохраняем значение регистров AX 
        push cx            ;и CX
        mov ah,09h         ;Вызываем функцию вывода строки,завершающейся знаком $ на экран регистр
                                 ;dx заполняется до вызова процедуры
        int 21h            ;прерывание DOS
        pop cx             ;Восстанавливаем значения регистров CX
        pop ax             ;и AX
        ret                ;Возврат из процедуры
Message endp               ;Конец описания процедуры
;---процедура вывода сообщений---
;-----------------------------------------------------

;-----------------------------------------------------
;---процедура ввода исходной строки---
Input proc near              
Inp: 
	push bx
	mov  ah,0                     ;
	int  16h                      ;считать символ с ожиданием
	pop  bx
    cmp  al,bl
    je   exit_Input
    cmp  al,21h
    jb   Inp                 ;small
    cmp  al,7Eh
    ja   Inp                  ;big
    mov  [di],al
    inc  di
    mov  ah,0Ah                   ;
    mov  bh,0                     ;
    mov  cx,1                     ;
    int  10h                      ;вывести его в текущей позиции
    mov  ah,03h                   ;
    mov  bh,0                     ;
    int  10h                      ;считать положение курсора
    inc  dl                       ;
    mov  ah,02h                   ;
    mov  bh,0                     ;
    int  10h                      ;установить новое положение курсора
    jmp  Inp
exit_Input:	
	ret
Input endp  
;---процедура ввода исходной строки---
;-----------------------------------------------------

;-----------------------------------------------------
;---процедура сортировки (метод пузырковой сортировки)
bubble_sort proc near
	;push
	cld
	jbe sort_exit
	dec dx
sn_loop1: 
	mov cx, dx
	xor bx, bx
	mov si, di

sn_loop2:
	lodsw
	cmp ax, word ptr [si]
	jbe no_swap
	xchg ax, word ptr [si]
	mov word ptr [si-2], ax
	inc bx
no_swap: 
	loop sn_loop2
	cmp bx, 0
	jne sn_loop1
sort_exit:
	;pop
	ret
bubble_sort endp
;---процедура сортировки (метод пузырковой сортировки)
;-----------------------------------------------------

main:
    mov ax,@data	;загрузка адреса
    mov ds,ax ;сегмент данных
    call clrscr	 ;вызов процедуры очистки экрана
    xor dx,dx
    call cursor	;вызов процедуры установки курсора
    lea dx,text1	;сохраняем сообщение для вывода
	call Message	;вызов процедуры вывода сообщения
	
    mov  di,offset buffer1            ;Ввод 1 строки
    inc  di                   
    mov  bl,0Dh                 
    call Input                
	
    mov  dx, offset enter_        ;Перевод строки
    mov  ah,9                    
    int  21h    
	
	call bubble_sort
	
    lea dx,text2
	call Message
    
	mov ah,09h                ;ВЫВоД
    lea dx,text1
    int 21h   
  
	int 16h	;прерывание биоса
	mov ah, 4ch	;фукнкция для выхода в ОС
	int 21h	;прерывание дос
end main
Требуется отсортировать массив (сортирую пузырковым методом).
В переменную buffer1 ввожу строку с клавиатуры. И её требуется отсортировать и вывести на экран. Но не работает. Помогите исправить.
P.S массив строковый

Последний раз редактировалось rpy3uH; 15.02.2009 в 14:01.
Liquor вне форума Ответить с цитированием
Старый 17.02.2009, 12:50   #2
o-user
Новичок
Джуниор
 
Регистрация: 02.02.2009
Сообщений: 2
По умолчанию

Пишите на мой е-mаil для более оперативной связи!
o-user вне форума Ответить с цитированием
Старый 17.02.2009, 15:04   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Могу такой пример подогнать:

Код:
	.386
	.model flat,stdcall
	option casemap:none

.data
n			dw 12,20,5,1,0,49,3
k			dd 6
;_______________
.code
start:
lea esi,n
xor ecx,ecx
xor ebx,ebx
xor eax,eax
mov ecx,[k]
a2:
 push ecx
 mov ecx, [k]
 a1:
  mov ax,word ptr [esi]
  mov bx,word ptr [esi+2]
  cmp ax,bx
  jl nogreat
  mov word ptr [esi+2],ax
  mov word ptr [esi],bx
  nogreat:
  add esi, 2
 loop a1
pop ecx
lea esi,n
loop a2
ret
end start
Хотя кажется мне что была тут уж сортировка...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 19.02.2009, 02:01   #4
Liquor
 
Регистрация: 15.02.2009
Сообщений: 3
По умолчанию

Cпасибо. Тему можно закрывать
Liquor вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сортировка Шелла и Шейкер-сортировка AleksandrMakarov Паскаль, Turbo Pascal, PascalABC.NET 11 11.03.2012 12:18
Сортировка! Nesta1384 Microsoft Office Excel 3 20.11.2008 13:12
Сортировка fedya Помощь студентам 3 26.11.2007 18:24
1. Сортировка Шелла по убыванию 2. Сортировка вставками по убыванию Arkuz Помощь студентам 1 25.09.2007 17:16