Проверить повторяется ли максимальный элемент в массиве

Низкоуровневое программирование портов, микроконтроллеров и т.д.

Модератор: Andy

Ответить
moko
Сообщения: 2
Зарегистрирован: 04 май 2009, 17:51

Сам массив задан в самой программе(вводить не нужно!).могли бы помочь чем-нибудь, пожалуйста? у меня есть образец решения задачи.

Код: Выделить всё

; Двоичный поиск в массиве Arr значения Y 
           .model tiny          ; модель памяти, используемая для COM        
        
           .code                ; начало сегмента кода

            org 100h          ; начальное значение счетчика - 100h
start:
            lea di,Arr          ; в di адрес начала массива
            Mov Bx, Y         ; в Bx искомое значение
            Xor Cx,Cx         ;  Cx=0 -- не нашли 
            Cmp Bx,[di]      ; Y <=Arr[1] ?
            Ja  Chk_last     ; нет, сравнить с последним
            Je Eq_1            ; равно первому?        
            jmp Output       ; нет в массиве -- вывод результата
Eq_1:     
            inc Cx                ; Cx=1 --нашли
            jmp Output        ;         

Chk_last: 
            Mov Si,n          ; в Si количество элементов массива
            dec Si              
            Shl Si,1           ; в Si длина массива в байтах
            Add Si,di         ; в Si адрес последнего элемента  
            Cmp bx,[si]     ; Arr[n]>=Y?
            Jb search       ; нет, искать в середине 
            Je Eq_n          ;  равно последнему    
           
            jmp Output     ; нет в массиве, больше последнего

Eq_n:      
             inc Cx            ; нашли = последнему    
            jmp Output;

        ;поиск внутри массива
search:
           Mov Si, n          ; в si смещение на половину массива
Iven_inx: 
           Test Si,1          ; проверка на четность
           Jz Add_inx       ; 
           Inc Si               ; сделать четным

Add_inx: 
           Add di,si          ; в di адрес очередного элемента
Compare:
           Cmp Bx,[di]        ; Arr[i] = Y?
           Je All_done        ; нашли
           Ja Higer           ; выбрать отрезок для продолжения поиска
       ; искать в левой части
           Cmp Si,2           ; не закончились элементы?         
           Jne inx_ok         ;          
           
no_match:     
           jmp Output         ;не нашли

inx_ok: 
           Shr Si,1           ; разделить индекс на 2
           Test Si,1         ; проверить на четность Si 
           Jz Sub_inx           
           Inc Si               ; сделать четным
Sub_inx: 
           Sub di,si          ; в di  адрес очередного элемента
           Jmp Compare        
       
       ; искать в правой части
           
Higer:
          Cmp Si,2          ; не закончились элементы?         
          je no_match     ; да - выход         
          Shr Si,1            ; разделить индекс на 2
          Jmp  Iven_inx      
      
          
All_done :
           inc Cx             ;   нашли

      ; вывод результата         
Output: 
            mov ah,9           ;
           Test Cx,1          ;
           Jz Send_no         ; 
Send_yes:
           mov dx,offset Res_yes  ;
           Jmp Print
Send_no: 
           mov dx,offset Res_no  ;
Print:
           int 21h            ;
           ret                ;

Arr         dw 1,12,33,41,55
Y           dw 33
n           dw 5
Res_yes     db 'Value exist'
            db 0Dh,0Ah,'$'
Res_no      db 'Value not found'
            db 0Dh,0Ah,'$'

           end start
очень нужно помогите кто чем может,плииз
airyashov
Сообщения: 441
Зарегистрирован: 02 ноя 2007, 10:31

если это образец, то какое отношение он имеет к Вашей задачи, это поиск элемента, а не определение максимального
moko
Сообщения: 2
Зарегистрирован: 04 май 2009, 17:51

я понимаю, просто думал, что это вам поможет помочь вам мне
Ответить