, . , , . - , .
. . , . , . , .
. , . . . . , . . .
:
;
out_elem proc far; AX , ..
pusha;
div ten; AL, AH
mov dx,ax;
mov ah,0Eh
mov bh,00h;
mov al,dl; AL
add al,'0'; ASCII
int 10h; ,
mov al,dh
add al,'0'
int 10h;
popa
ret
out_ elem endp
;
xor si,si;
mov cx,n; n
out_massiv:
xor ax,ax
mov AL,Z[si]; Z
call out_elem;
inc si
loop massiv
.
bubble_sort
;
; : DS:DI =
; DX = ( )
bubble_sort proc near
pusha
cld
cmp dx,1
jbe sort_exit; ,
dec dx
sb_loop1:
mov cx,dx;
xor bx,bx; BX
mov si,di; SI
;
sn_loop2:
lodsw;
cmp ax,word ptr [si]
jbe no_swap;
; ,
xchg ax,word ptr [si];
mov word ptr [si-2],ax
|
|
inc bx; 1,
no_swap:
loop on_loop2
cmp bx,0; ,
jne sn_loop1;
sort_exit:
popa
ret
bubble_sort endp
, . , , . , . : , . - . . N N2 , - 2n*log2n .
:
; quick_sort
;
; : DS:BX =
; DX =
quicksort proc near
cmp dx,1; 1 0,
jle qsort_done;
xor di,di; (DI = 0)
mov si,dx; (SI = DX)
dec si; SI = DX-1, ,
shl si,1; 2,
mov ax,word ptr [bx]; AX = X1,
step_2:; ,
; , 1
cmp word ptr [bx][si],ax; XDI 1
jle step_3; XSI ,
sub si,2;
jmp short step_2;
step_3:; ,
; 1
;
cmp si,di; ,
je step_5; 5,
add di,2; :
; ,
cmp word ptr [bx][di],ax; 1,
jl step_3; 3
ste_4:
; DI ,
; , SI ,
; .
mov cx,word ptr [bx][di]; CX = XDI
xchg cx,word ptr [bx][si]; CX = XSI, XSI = XDI
mov word ptr [bx][di],cx; XDI = CX
jmp short step_2
step_5:; .
; X1,
; - 1
; 1 :
xchg ,word ptr [bx][di]; = XDI, XDI = X1
mov word ptr [bx],ax; X1 = AX
;
push dx
push di
push bx
mov dx,di; X1...XDI-1
shr dx,1; DX
call quick_sort;
pop bx
pop di
pop dx
add bx,di; XDI+1...XN
add bx,2; BX
shr di,1; XDI+1...XN
inc di
sub dx,di; DX
call quicksort;
qsort_done: ret
quicksort endp
, - , , . , , , . , , n*log2n , , ; . , , , , , - .
|
|
:
;1) Max .
.model small;
.stack 200h; 512
.data;
; 10 5 ( 2
; )
A dw 5 dup (5,2,8,3,1)
Max dw?; 2
MaxStr dw?; Max
db $;
.code;
Begin:
mov ax, @Data;
mov ds, ax
mov ax, A
mov Max, ax
; si
; (..
; 2 , 2 ,
; - 4 ..)
mov si, 2
; loop ,
;
mov cx, 4
for_cycle: mov ax, A[si]; - for_cycle
cmp ax, Max
jle do_else
mov Max, ax
do_else: add si, 2
loop for_cycle
; Max (
;Max , )
add ax, 48; Max
mov MaxStr, ax
mov dx, offset MaxStr
mov ax, 09h
int 21h
mov ax, 4C00h;
int 21h
end Begin
;2) A[N] Byte ( 8- ).
; .
;
; . .
; IndMax, ; IndMin.
;
; Mean.
.model small
.386
.stack 100h
.data
N dw 10; .
A db 3, 120, 2, 6, 11, 5, 4, 34, 15, 10
IndMax dw?; A.
IndMin dw?; A.
Mean db?; .
.code
;
cls_all proc;
pusha
mov ax,0003h; 03h (8025)
int 10h;
popa
ret
cls_all endp
Start:
mov ax, @data
mov ds, ax
mov si, 0; .
mov ch, -128; .
mov cl, 127; .
M1: mov al, A[si]
cmp al, ch; .
jle M2
mov ch, al; .
mov IndMax, si; .
inc IndMax; , .. si=i-1.
M2: cmp al, cl; .
jge M3
mov cl, al; .
mov IndMin, si; .
inc IndMin; , .. si=i-1.
M3: inc si; .
cmp si, N
jb M1
; (CL) (CH).
mov al, cl; AL = Min
add al, ch; AL = Min+Max
shr al, 1; AL = AL / 2 .
mov Mean, al; .
mov ax, 4c00h
int 21h
end Start