AX, @ data ​​span> ; завантаження сегментних регістрів
MOV DS, AX ; настройка DS на адресу сегменту даних
MOV ES, AX ; настройка ES на адресу сегменту даних SI, src ; помістити в SI зміщення рядка-джерела src DI, dst ; помістити в DI зміщення рядка-приймача dst CX, 10 ; довжина рядка ; за зростанням адрес MOVS dst, src ; повторити поки CX> 0
Examle 7.1. Фрагмент програми сканування буфера buffer, зі скиданням старшого біта кожного байта і збереженням результату в output. p>
data ​​p>
buffer DB 0C8h, 0FBh, 0F5h, 0Cah, 41h, 32h, 43h. 04h, 87h, 8Ch DB 10 DUP (?)
code
...
MOV SI, OFFSET buffer ; буфер-джерело DI , OFFSET output ; буфер-приймач
MOV CX, 10 ; довжина буфера: buffer ; копіювати DS: SI в AL AL, 7FH ; очистити старший біт output ; зберегти AL в ES: DI L ; повторити поки CX <> 0
Порівняти два рядки S1 і S2 кожна завдовжки N.
...
CLD ; перегляд вперед
LEA SI, S1 ; в DS: SI помістити початок S1
LEA DI, S2 ; в ES: DI помістити початок S2
MOV CX, N ; в CX довжина рядків
L:
CMPSB ; порівняти пару елементів
JNE NOEG ; якщо S1 <> S2, то NOEG
LOOP L ; до наступній парі
EQ:
...; дії, якщо S1 = S2
NOEG:
...; дії, якщо S1 <> S2
У рядку S з 500 символів замінити перше входження символу '*' на точку.
CLD ; перегляд рядка вперед
PUSH DS;
POP ES ; встановити ES на сегмент даних
LEA DI, S ; ES: DI = початок S СХ, 500 ; довжина рядка
MOV AL, '*' ; символ для пошуку
REPNE SCASB ; пошук першого входження '*' в S
JNE FIN ; в рядку S немає входження '*'
MOV BYTE PTR ES: [DI-1], '.' ; заміна `* 'на точку
FIN: ...
Практична частина.
Скласти програму, що реалізовує такі дії (за варіантами).
1. Ввести з клавіатури рядок. Стиснути рядок, тобто видалити прогалини і табуляції. Вивести результати на екран.
2. Ввести з клавіатури рядок. Порахувати кількість слів у рядку. Вивести результати на екран.
. Ввести з клавіатури рядок. Ввести з клавіатури коротеньку рядок - шаблон. Знайти шаблон у введеної рядку. Вивести на екран В«ТАКВ», якщо шаблон є, і В«НІВ», якщо йо...