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

лабы / zadanie_2

.docx
Скачиваний:
62
Добавлен:
18.04.2022
Размер:
18.19 Кб
Скачать

.model small - модель памяти exe программы

.data – сегмент данных

string db 250,?, 256 dup ('$') - строка (ожидаемая длина строки или иначе максимальная длина строки (с учётом нажатия ентер), фактическая длина строки (неизвестно из-за ?), строка, заканчивающаяся ASCII-кодом клавиши ENTER)

.code – сегмент кода

start: - метка старта

mov ax,@data - в регистра AX смещение для данных

mov ds,ax - установить регистр DS равный AX то ест теперь там смещение. (Есть правило, нельзя непосредственно изменять содержимое регистров CS, DS, SS)

mov ax,0b800h - загружаем в 16-битный регистр данных (0b800h соответствует сегменту дисплея в тестовом режиме)

mov es,ax - т.к. загрузка числа напрямую в сегментный регистр запрещена (16 бит)

mov ax,3 - установите режим видео на TextMode символов 80x25 и 16 цветов. (номер видеорежима)

int 10h - используется для инициализации графического и видеорежима (установка видеорежима)

mov ah,10 – буферизированный ввод строки (вроде)

lea dx,string – заносим в dx смещение нашей строки

int 21h – прерывание (вызов функции DOS)

lea si,string+1 – заносим в si смещение нашей строки+1

mov si,320 – Указывает на ячейку памяти

xor cx,cx – обнуление счётчика

mov cl,byte ptr [di] – cl длина строки +1

add di,cx - складываем длину строки и счётчик

inc cx – увеличить счётчик +1

mov dx, cx - установить регистр DX равный счётчику .

mov al,' ' – заносим пустой знау(пробел) в регистр AL.

deg: push ds pop es std – устанавливаем флаг направления.

repnz – Повторить следующую строковую операцию, если не нуль.

Scasb – Сравнить строку байтов.

push di – Поместить di в стек.

xchg dx,cx – Обмен между dx и счётчиком.

sub cx,dx Вычитаем из cx и dx.

add di,2 – прибавить к di 2.

dec cx – Уменьшает счётчик на один.

mov ax,0b800h – загружаем в 16-битный регистр данных (0b800h соответствует сегменту дисплея в тестовом режиме)

mov es,ax – т.к. загрузка числа напрямую в сегментный регистр запрещена (16 бит)

cld – Очистить флаг направления

mov ah,12 – буферизированный ввод строки

xchg si,di – Обмен между si и di.

begs: lodsb – Загружаем строковый операнд.

stosw – Сохраняем элемент строки.

loop begs – Запуск цикла сегмента кода begs.

mov al,' ' – заносим пустой знак(пробел) в регистр AL.

stosw – Сохраняем элемент строки.

mov si,di – заносим в si смещение di

pop di – извлекаем di из стека

mov cx,dx – установить счётчик равный регистру DX

or cx,cx – Побитовое сложение счетсчика

jnz deg – условный переход к deg

mov ah,10h – буферизированный ввод строки

int 16h – запуск сервиса ввода с клавиатуры

mov ah,4ch – буферизированный ввод строки

int 21h – прерывание (вызов функции DOS)

КОД

.model small

.data

string db 250,?, 256 dup ('$')

.code

start:

mov ax,@data

mov ds,ax

mov ax,0b800h

mov es,ax

mov ax,3

int 10h

mov ah,10

lea dx,string

int 21h

;по словам (разделитель - пробел)

lea di,string+1

mov si,320

xor cx,cx

mov cl,byte ptr [di]

add di,cx

inc cx

mov dx,cx

mov al,' '

deg: push ds

pop es

std

repnz scasb

push di

xchg dx,cx

sub cx,dx

add di,2

dec cx

mov ax,0b800h

mov es,ax

cld

mov ah,12

xchg si,di

begs: lodsb

stosw

loop begs

mov al,' '

stosw

mov si,di

pop di

mov cx,dx

or cx,cx

jnz deg

mov ah,10h

int 16h

mov ah,4ch

int 21h

end start

Соседние файлы в папке лабы
  • #
    18.04.20222.06 Кб44v10.asm
  • #
    18.04.2022478 б58zadanie3.asm
  • #
    18.04.2022277 б45zadanie3.obj
  • #
    18.04.20221.15 Кб47zadanie4.asm
  • #
    18.04.2022516 б46zadanie4.obj
  • #
    18.04.202218.19 Кб62zadanie_2.docx
  • #
    18.04.20222.59 Кб50zadanie_6.asm