Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
asm.doc
Скачиваний:
6
Добавлен:
09.11.2019
Размер:
913.41 Кб
Скачать

Розв’язування задач за тематикою заняття

Задача 1. Задано символьний рядок. Знайти перше найбільше за довжиною слово.

Розв’язування.

Data Segment para 'Data'

max = 100

string db ' Input string ? ','$'

st1 db ' First lagerst word ','$'

inputs label byte

maxs db max

nums db ?

strs db max dup(' ')

Data Ends

Code Segment para 'code'

Assume cs:Code,ds:Data,es:Data

include in&out.asm

Main Proc far

push DS

sub AX,AX

push AX

mov AX,Data

mov DS,AX

lea DX,string ; Завантаження відносної адреси повідомлення

call outstr ; Виведення на екран повідомлення.

call newline ; Переведення курсору на новий рядок.

lea DX,inputs ; Завантажити відносну адресу для введення рядка.

call inpstr ; Введення рядка.

lea SI,strs ; Завантаження відносної адреси введеного рядка.

mov DH,' ' ; Символ ‘ ‘ (пробіл) – у регістр DH.

mov AX,0 ; Довжина найбільшого слова.

sub BX,BX ; Довжина поточного слова.

sub CH,CH ; Очистити регістр CH.

mov CL,nums ; Кількість введених символів у регістр CL.

cmp CX,0 ; Перевірка : чи були введені символи.

jne m0 ; Перехід, якщо були введені символи.

ret ; Введених символів немає. Вихід з програми.

m0: cmp AX,BX ; Порівняння поточного виділеного слова з

jge m1 ; найдовшим. Якщо поточне слова довше, то

mov AX,BX ; його рахуємо найдовшим і зберігаємо його

mov DI,SI ; довжину у регістрі AX, а відносну адресу

sub DI,BX ; слова у регістрі DI.

m1: sub BX,BX ; Шукаємо наступне слово пропускаючи

cmp [SI],DH ; символи “пробіли”.

jne m3

inc SI

loop m1

cmp AX,0 ; Перевіряємо чи були слова.

jne m4 ; Слова були.

ret ; Слів не було. Вихід з програми.

m3: cmp [SI],DH ; Шукаємо довжину слова.

je m0

inc SI

inc BX ; В регістрі BX довжина слова.

loop m3

cmp AX,BX ; Останнє слово не найдовше?

jge m4

mov AX,BX

mov DI,SI

sub DI,BX

m4: mov CX,AX

call newline ; Перевід курсору на новий рядок.

m5: mov DL,[DI] ; Друк найдовшого слова.

call outchar

inc DI

loop m5

retf

Main Endp

Code Ends

End Main

Процедури з файлу in&out.asm

inchar proc near

mov ah,1

int 21h

ret ; inchar by al

inchar endp

outchar proc near ; outchar dl

mov ah,2

int 21h

ret

outchar endp

newline proc near

push ax

mov dl,0dh

call outchar

mov dl,0ah

call outchar

pop ax

ret

newline endp

outstr proc near ; outchar dx

mov ah,09h

int 21h

ret

outstr endp

inpstr proc near ; outchar dx

mov ah,0Ah

int 21h

ret

inpstr endp

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]