Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- TITLE МЗЯ МОДУЛЬ 1 ЛАБОРАТОРНАЯ РАБОТА 2
- SSTACK SEGMENT PARA STACK 'STACK'
- DB 64 DUP('СТЕК____')
- SSTACK ENDS
- DSEG SEGMENT PARA PUBLIC 'DATA'
- X DB 1,2,3,6,5,4
- N DB 6
- DSEG ENDS
- SUBTTL ОСНОВНАЯ ПРОГРАММА
- PAGE
- CSEG SEGMENT PARA PUBLIC 'CODE'
- ASSUME CS:CSEG,DS:DSEG,SS:SSTACK
- START PROC FAR
- MOV AX, DSEG ; Установка регистра сегмента данных
- MOV DS, AX
- VS: DEC N ; Каждый раз сортируемая часть массива в методе пузыря уменьшается на 1
- MOV CL, N
- MOV SI, 0 ; SI будет указывать на первый сравниваемый элемент
- MOV DI, 1 ; DI будет указывать на второй (соседний) сравниваемый элемент
- MOV BL, 0 ; В BL будем считать, сколько раз за проходку по массиву мы делали замену элементов
- ; Если за проходку не было ни одной замены (BL == 0), то значит массив отсортирован
- CMP CL, 0 ; Проверка того, чтоб CL не равнялась 0
- JZ GB
- SC: MOV AH, X[SI] ; Начало внутреннего цикла проходки по массиву
- MOV AL, X[DI] ; Заносим соседние элементы SI DI в первую и вторую половину регистра АХ
- CMP AH, AL ; Производим операцию сравнения
- JLE NS ; Если операция выявила, что первое меньше или равно второму(по установленным флагам,
- ; то перемена не нужна и мы её проскакиваем, переходу к метке NS
- XCHG AH, AL ; Перемена местами значений внутри регистра
- MOV X[SI], AH ; Заночим уже помененные значения в соответсвующие элементы массива
- MOV X[DI], AL
- INC BL ; Увеличиваем счётчик замен
- NS:
- INC SI ; Передвигаемся к следующей паре
- INC DI
- LOOP SC ; Конец внутреннего цикла проходки по парам
- GB: CMP BL, 0 ; Сравнение счётчика с 0
- JG VS ; Если BL > 0, то возвращаемся в к VS и повторяем проходку по массиву
- ; Иначе идём дальше, где прога завершится
- MOV AH,4CH
- MOV AL,0
- INT 21H
- START ENDP
- CSEG ENDS
- END START
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement