Добавил:
alexa_ak
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:лабы / task4 (1)
.txt .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
.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
Соседние файлы в папке лабы