Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

лабы / task4 (1)

.txt
Скачиваний:
57
Добавлен:
18.04.2022
Размер:
6.31 Кб
Скачать
.model small - модель памяти exe программы
.stack 100h – сегмент стека размеров в 256 байт
.data – сегмент данных
i dw 0h – индекс минимальной длины
String db ': $' – строка с данными: ‘:$’
Stg db 100h dup(0h)– создание массива для строки
.code – сегмент кода
start: - метка старта
Sort proc – Удалили, так как в ней нет смысла
mov ax,@data - в регистра AX смещение для данных
mov ds,ax - установить регистр DS равный AX то ест теперь там смещение.
mov ah, 00h – очищаем экран
mov al, 2h;
int 10h – используется для инициализации графического и видеорежима (установка видеорежима)
mov ah, 09h
lea dx,string – заносим в dx смещение нашей строки

Рекурсивно вводим слова по символам
Input: - Ввод массива(переход через jmp Input)
int 21h – прерывание (вызов функции DOS)
mov si, 0h
mov bx, 0h
mov cx, si
mov Stg[bx], cl; - Длина слова
cmp al, 32; - Проверка на пробел
jne Skip1 – если проверка прошла, то выполняются данные команды:
mov si, 0h
add bx, 10h - Начало следующего слова
jmp Input – переход на метку Input:

Skip1: - если проверка Skip1 не пройдена, выполняется переход сюда
inc si – увеличение si на 1
mov Stg[bx+si], al - Помещение символа в массив
cmp al, 13 – проверка на Enter
jne Input – если проверка прошла, то выполняются данные команды:
mov Stg[bx+si], 0h - Удаление Enter'а
mov i, bx; - Кол-во слов
mov bx, 0h


Находим индекс слова с минимальной длиной
Sort1:
mov di, bx - Индекс минимальной длины
mov ax, bx
add ax, 10h

Сранвниваем текущее слово со следующим, при успехе записываем и обновляем указатель на слово
Sort2:
mov si, ax
mov cl, Stg[di]
cmp cl, Stg[si] - проверка
jae Skip2
mov di, si - Если меньше

Skip2: - метка Skip2
add ax, 10h
cmp ax, i – сравнение с индексом минимальной длины
jbe Sort2 – если ax меньше или равен i, то выполняются данные команды:
mov si, 0h

Основной код, который записывает слова в нужном порядке и находит индекс минимального элемента
Sort3: - метка Sort3
moV cl, Stg[bx+si] - Смена слов
mov al, Stg[di]
mov Stg[bx+si], al
mov Stg[di], cl
inc si – si+1
inc di – di+1
cmp si, 10h
jb Sort3 - если si меньше 10h, то выполняются данные команды:
add bx, 10h
cmp bx, i
jb Sort1 - если bx меньше i, то выполняются данные команды:
mov ah, 02h - Функция установки позиции курсора:
mov bh, 0h - № Страницы
mov dh, 2h - № строки
mov dl, 0h - № столбца
int 10h
mov bx, 0h
mov si, 0h
mov ah, 2h - Фунция вывода символа
Output: - Вывод массива
inc si
mov dx, word ptr Stg[bx+si]
cmp dx, 0h
jne Skip3 - если dx не равно 0h, то выполняются данные команды:
cmp bx, i
je Exit – если bx равно i, то выполняются данные команды:
mov si, 0h
add bx, 10h - складываем
mov dx, ' '
Skip3: - метка Skip3
int 21h
cmp bx, i
jbe Output - если bx меньше i, то выполняются данные команды:
Exit: - метка Exit
mov ah, 4ch;
int 21h
Sort endp - ???
End Start - конец






КОД



.model small;
.stack 100h;

.const
spaceChar equ 32
carriegeReturnChar equ 13

.data
i dw 0h
inputMsg db 'Enter string: $'
Stg db 100h dup(0h)

.code
Start:
mov ax, @data
mov ds, ax

;; Очистка экрана
mov ah, 00h
mov al, 2h
int 10h

;; Input string
mov ah, 09h
Lea dx, inputMsg
int 21h

mov ah, 1h
mov si, 0h
mov bx, 0h

;; Recursive input
Input:
int 21h
mov cx, si
mov Stg[bx], cl
cmp al, spaceChar
jne Skip1
mov si, 0h
add bx, 10h
jmp Input

;; Prepare word and add to array
Skip1:
inc si
mov Stg[bx+si], al
cmp al, carriegeReturnChar
jne Input
mov Stg[bx+si], 0h
mov i, bx
mov bx, 0h

Sort1:
mov di, bx
mov ax, bx
add ax, 10h

;; Find word with min length
Sort2:
mov si, ax

mov cl, Stg[di]
cmp cl, Stg[si]
jae Skip2
mov di, si

;; Continue iter if needed
Skip2:
add ax, 10h
cmp ax, i
jbe Sort2
mov si, 0h

;; Sort words
Sort3:
moV cl, Stg[bx+si]
mov al, Stg[di]
mov Stg[bx+si], al
mov Stg[di], cl

inc si
inc di

cmp si, 10h
jb Sort3

add bx, 10h

cmp bx, i
jb Sort1

mov ah, 02h
mov bh, 0h
mov dh, 2h
mov dl, 0h
int 10h
mov bx, 0h
mov si, 0h
mov ah, 2h

;; Print result
Output:
inc si
mov dx, word ptr Stg[bx+si]
cmp dx, 0h
jne Skip3
cmp bx, i
je Exit
mov si, 0h
add bx, 10h
mov dx, ' '

Skip3:
int 21h
cmp bx, i
jbe Output

Exit:
mov ah, 4ch;
int 21h


End Start
Соседние файлы в папке лабы
  • #
    18.04.20222.55 Кб55task11_2.asm
  • #
    18.04.20223.23 Кб56task12.asm
  • #
    18.04.20224.17 Кб57task12.txt
  • #
    18.04.2022998 б60task2.asm
  • #
    18.04.2022308 б56task2.obj
  • #
    18.04.20226.31 Кб57task4 (1).txt
  • #
    18.04.20225.45 Кб57task4.txt
  • #
    18.04.20222.06 Кб57v10.asm
  • #
    18.04.2022478 б73zadanie3.asm
  • #
    18.04.2022277 б58zadanie3.obj
  • #
    18.04.20221.15 Кб62zadanie4.asm