Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Asm: Общие вопросы > Процедуры


Автор: KoLiZeI 25.5.2007, 12:36
Помогите пожалуйста с описанием процедуры: нужно описать программу, которая вводит два массива из 100 знаковых чисел-слов в каждом и определяет, составлены ли эти массивы из одних и тех же чисел (без
учета порядка их следования, но с учетом повторяющихся чисел). (Рекоменда-
ция: упорядочить оба массива, а затем сравнить их.). Подскажите пожалуйста как делать  smile  

Автор: KoLiZeI 26.5.2007, 02:05
Хм... попробовал написать сам и вот что получилось, конечно немного коряво, и упорядочивание происходит только для 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  

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)