Нахождение максимального значения в массиве 10 двухбайтных чисел, страница 5

            MOV DL,AL                         ;пересылка содежмого AL в DL

            ADD SI,1H                            ;индекс SI увеличивается на 1

            MOV AL,[SI]                        ;пересылка в регистр AL SI-го элемента массива

            CMP AL,40H                        ;сравнение вида AL<40H и если условие верно...

            JB M7                                    ;... переход к метке М7

            SUB AL,37H                         ; уменьшение AL на 30Н

            JMP M8                                 ;безусловный переход на метку M6

M7:     SUB AL,30H                         ; уменьшение AL на 30Н   

M8:     ADD DL,AL                          ;сложение содержимого DL и AL

            ADD SI,1H                            ;индекс SI увеличивается на 1

            MOV [DI],DX                       ;пересылка из DX в DI

            ADD DI,2H                           ;индекс DI увеличивается на 2

            LOOP M0                              ;повторить цикл с М0        

            mov     ax,@data                    ;инициализация сегмента данных

            mov     ds,ax

            mov     si,2                             ;цикл по si начиная со второго элемента

            mov     cx,n-1                         ;от 2 до 2*n-2 шаг 2 (т.к. 1число=2байта)

            mov     ax,mas2                      ;1ый элемент в ax и в bx

            mov     bx,ax                         ;с ними будем сравнивать

cycl:    cmp     ax,mas2[si]                ;начало цикла, сравниваем с максимальным

            ja         nmore                         ;если больше

            mov     ax,mas2[si]                 ;запоминаем значение текущего max элемента

nmore:    

            cmp     bx,mas2[si]                ;сравниваем с минимальным

            jb         nless                          ;если меньше

            mov     bx,mas2[si]                ;запоминаем значение текущего min элемента

nless:        add si,2

            loop     cycl                            ;конец цикла

            mov     dx,ax                          ;находим разность между

            sub      dx,bx                          ;максимальным и минимальным

             LEA SI,MAS3                      ;загрузка эффективного адреса MAS3 в SI              

M20:   MOV AL,DH                         ;пересылка в регистр AX содержимого DH

            SHR AL,4H                           ;логический сдвиг вправо на 4 бита

            CMP AL,0AH                       ;сравнение вида AL<0АН и если условие верно...

            JB M21                                  ;... переход к метке М21

            ADD AL,37H                        ;увеличение AL на 37Н

            JMP M22                               ;безусловный переход на метку M22

M21:   ADD AL,30H                        ;увеличение AL на 30Н

M22:   MOV [SI],AL                        ;пересылка из AL в SI

            ADD SI,1H                            ;индекс SI увеличивается на 1

            MOV AL,DH                          ;пересылка в регистр AL содержимого DH

            SHL AL,4H                             ;логический сдвиг влево на 4 бита

            SHR AL,4H                             ;логический сдвиг вправо на 4 бита

            CMP AL,0AH                         ;сравнение вида AL<0АН и если условие верно...

            JB M23                                    ;... переход к метке М23

            ADD AL,37H                          ;увеличение AL на 37Н

            JMP M24                                ;безусловный переход на метку M24

M23:   ADD AL,30H                          ;увеличение AL на 30Н

M24:   MOV [SI],AL                          ;пересылка из AL в SI

            ADD SI,1H                               ;индекс SI увеличивается на 1                            

M25:   MOV AL,DL                           ;пересылка в регистр AL содержимого DL

            SHR AL,4H                             ;логический сдвиг вправо на 4 бита

            CMP AL,0AH                          ;сравнение вида AL<0АН и если условие верно...

            JB M26                                    ;... переход к метке М26

            ADD AL,37H                          ;увеличение AL на 37Н

            JMP M27                                 ;безусловный переход на метку M27

M26:   ADD AL,30H                          ;увеличение AL на 30Н

M27:   MOV [SI],AL                          ;пересылка из AL в SI

            ADD SI,1H                              ;индекс SI увеличивается на 1

            MOV AL,DL                           ;пересылка в регистр AL содержимого DL

            SHL AL,4H                             ;логический сдвиг влево на 4 бита

            SHR AL,4H                             ;логический сдвиг вправо на 4 бита

            CMP AL,0AH                          ;сравнение вида AL<0АН и если условие верно...                    

            JB M28                                     ;... переход к метке М28

            ADD AL,37H                           ;увеличение AL на 37Н

            JMP M29                                  ;безусловный переход на метку M29

M28:   ADD AL,30H                           ;увеличение AL на 30Н

M29:   MOV [SI],AL                           ;пересылка из AL в SI

            MOV AH,3CH                        ;открытие файла для записи

            LEA DX,FOUT                       ;загрузка эффективного адреса файла  FOUT в DX    

            MOV AL,01H                         ;режим открытия"только для записи"

            INT 21H                                  ; формирование прерывания типа 21h

            MOV BX,AX                          ;запись в файл

            MOV AH,40H

            MOV CX,4H                           ;число записываемых байт

            LEA DX,MAS3                      ;загрузка эффективного адреса MAS3 в DX

            INT 21H                                  ; формирование прерывания типа 21h

            MOV AH,3EH                        ;закрытие файла для записи

            INT 21H                                  ; формирование прерывания типа 21h

            MOV AX,4C00H                    ; формирование функции стандартного выхода

            INT 21H                                  ; формирование прерывания типа 21h и стандартный выход

main    endp                                         ; конец процедуры main

end      main                                         ; конец программы с точкой входа main