Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по программированию на Assembler

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
На первую страницук этому сообщениюк последнему сообщению

Открыть новую тему     Написать ответ в эту тему

Van_der_Vlaad



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
SST SEGMENT STACK "STACK"
  dw 1000 dup (?)
SST ENDS
 
DAT SEGMENT
  msg_ish_mas db "Ishodnii massiv: ", "$"
  msg_otsrt_mas db 0ah,0dh,"Otsortirovannie elementi massiva: ", "$"
 
  mas db 3,7,8,5,2,0,1,6,4 ;9 kol-vo elem
  n = $-mas  
  i dw 0
  j dw 0
  z db 0
   
DAT ENDS
 
COD SEGMENT
   
  assume SS:SST, DS:DAT, CS:COD
   
LOCALS @@
   
Begin:  
 
mov ax, DAT          
mov ds, ax    
 
mov ax, 03   ; Очистка экрана
int 10h        
 
push 0             ; возможная ошибка - неправильные границы. (n-1 ?)
push n-1         ; n / n-1
 
call quicksort
 
    mov ah,9
    lea dx, msg_otsrt_mas                        ; Выводим сообщение message2
    int 21h
 
    mov cx, n                                ; В цикле выводим элементы отсортированного массива
    mov si,0
    mov    ah,02h
      
    m9:        
       mov dl, mas[si]
       add dl,30H          
       int 21H      
 
       mov dx, " "
       int 21H                 
                        
       add si,1
    loop m9
 
mov ah,4ch                             ; Корректное завершение нашей программы
int 21h     
 
;-----------
quicksort proc near  
@@L_ind EQU WORD PTR [BP+6]    
@@R_ind EQU WORD PTR [BP+4]  
 
@@i EQU WORD PTR [BP-2]  
@@j EQU WORD PTR [BP-4]  
 
push bp                 ; "Пролог"
mov bp,sp  
sub sp,4 ; выделение места под локальные переменные @@i, @@j  
 
;mov si,4
mov bx, @@R_ind          ; N   правая граница    (ah)bx         ;mov j,..
;add si,2
mov ax, @@L_ind         ; 1    левая граница (al)ax           ; mov i,....
 
 
mov @@i, ax
mov @@j, bx
 
 
add ax,bx  ; ax = l+r
mov bl,2 ;delitel
div bl
mov ah,0
mov si, ax
mov al, mas[si]   ; ax:=a[(l+r) div 2]
 
rpt:
 
    while_bg1:  
        mov si,@@i
        cmp mas[si],al
        jnae while_end1 ;a[i]<x
        inc @@i
        jmp while_bg1
 
    while_end1:
 
    while_bg2:  
        mov si,@@j
        cmp al,mas[si]
        jnae while_end2 ;x<a[j]
        dec @@j
        jmp while_bg2
    while_end2:
 
    mov ax,@@i
    mov bx,@@j
    cmp ax,bx
    jnbe m3;i>j
        push cx
            mov si,ax
            mov cl, mas[si]
            mov z,cl
            mov si,bx            
            mov cl, mas[si]
            mov si,ax            
            mov mas[si], cl  
            mov cl,z
            mov si,bx
            mov mas[si], cl  
        pop cx            
        inc @@i
        inc @@j
        
    m3:
    
mov ax,@@i
cmp ax,@@j    
jna rpt  ;i>j
 
mov cx,@@L_ind
mov dx,@@R_ind
 
cmp cx,@@j
jnae m1
 
cmp @@i,dx
jnae m2
 
jmp end_proc
 
 
m1:
push cx
push @@j
call quicksort
 
m2:
push @@i
push dx
call quicksort
 
end_proc:
mov sp,bp
pop bp
 
ret
quicksort endp
;------------
 
 COD ENDS
  END Begin                  

Всего записей: 24 | Зарегистр. 23-08-2009 | Отправлено: 21:04 22-12-2010
Открыть новую тему     Написать ответ в эту тему

На первую страницук этому сообщениюк последнему сообщению

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по программированию на Assembler


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru