Хм... попробовал написать сам и вот что получилось, конечно немного коряво, и упорядочивание происходит только для 1 массива, но если кому надо будет для 2х там доделать пару минут, возможно можно сделать и проще ))
| Код | masm .model small
.stack 100h
.data string_x DB 100 DUP('163254$') ;будем упорядочивать только этот массив string_y DB 100 DUP('123456$') s db ' ',0ah,0dh,'$'
exit_ok db 'Alles OK $' exit_f db 'massiv`s sind nicht gleich $' ; --------------------------------------------------- .code assume ds:@data, es:@data main: mov ax,@data mov ds,ax mov es,ax CLD call porjadok_x mov ah,09h lea dx,string_x int 21h lea dx,s ;переносимя на новую строку int 21h call sravnenie mov ah,4Ch int 21h proc porjadok_x ; процедура упорядочивания lea dx,string_x mov si,dx Begin: mov al,[si] ; получаем 2 ближайших элемента в ал и ан mov ah,[si+1] cmp ah,'$' ;сравниваем второй с коцном строки, если нет то продолжаем je @endp cmp al,ah jg @xchg inc si jmp Begin @xchg: ; меняем местами два ближайших элемента mov [si+1],al mov [si],ah mov si,0 jmp Begin
@endp: ret endp proc sravnenie ; сравниваем подряд элементы, если все равны то все нормально lea dx,string_x mov si,dx lea dx,string_y mov di,dx Begin2: mov al,[si] mov ah,[di] cmp al,ah je @next mov ah,09h lea dx,exit_f int 21h jmp @45 @next: inc si inc di mov ah,[si] cmp ah,'$' jne Begin2 mov ah,09h lea dx,exit_ok int 21h @45: ret endp end main
|
|