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

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

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

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

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

Abs62



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Код:
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  
  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          
 
    mov    ax,0
    push    ax
    mov    ax,n-1
    push    ax
 
    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  
        jae while_end1 ;a[i]<x  
        inc @@i  
        jmp while_bg1  
 
    while_end1:  
 
    while_bg2:  
        mov si,@@j  
        cmp al,mas[si]  
        jae 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  
        dec @@j  
         
    m3:  
     
mov ax,@@i  
cmp ax,@@j      
jle rpt  ;i<=j  
 
mov cx,@@L_ind  
cmp cx,@@j  
jge @@m1  
 
push cx  
push @@j  
call quicksort  
 
@@m1:  
mov dx,@@R_ind  
cmp @@i,dx  
jge @@m2  
 
push @@i  
push dx  
call quicksort  
 
@@m2:  
mov sp,bp  
pop bp  
 
ret 4
quicksort endp  
;------------  
 
 COD ENDS  
  END Begin

Всего записей: 6080 | Зарегистр. 22-10-2005 | Отправлено: 23:15 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