Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
СПО Лабораторные 1-5.docx
Скачиваний:
66
Добавлен:
16.02.2016
Размер:
75 Кб
Скачать
☆

1.Замените в строке string символ & на символ пробела

STRLEN EQIU 15: длина поля STRING

STRING DB ‘THE TIVE & IS NOW’

(вместо STRING используется ввод произвольной строки)

.MASM

MODEL small

STACK 256

.data

strlen equ 18

string db 'To live&is to die$'

.code

assume ds:@data,es:@data

main:

mov ax,@data ;настройка ds и

mov ds,ax ;es на начало

mov es,ax ;сегмента данных

mov ax,0600h ;очистка экрана

mov bh,07h

mov cx,0

mov dx,184fh

int 10h

mov ax,0200h ;установка курсора

mov bh,0h

mov dh,7h

mov dl,20h

int 10h

mov ah,09 ;вывод исходной

lea dx,string ;строки

int 21h

cld ;DF:=0

lea di,string ;в es:di-адрес строки

mov al,26h ;в al-символ &

mov cx,strlen ;в cx-длина строки

repne scas string ;поиск

dec di ;уменьшение по выходе

mov al,20h ;код пробела

stos string ;запись в строку

mov ax,0200h ;установка курсора

mov bh,0h

mov dh,8h

mov dl,20h

int 10h

mov ah,09 ;вывод изменённой

lea dx,string ;строки

int 21h

mov ah,1h ;readkey

int 21h

mov ax,4c00h ;завершение

int 21h ;программы

end main

Имеются следующие определения:

DATASG SEGMENT PARA

CONAME DB 'SPASE EXPLORES INS'

PRLINE DB 20 DUP(")

Используя команды обработки строк, выполнить:

а) пересылку данных из CONAME в PRLINE слева направо;

MASM

MODEL small

STACK 256

.data

coname db 'Space Explores Ins $'

prline db 20 dup (?)

strlen dw 20

.code

assume ds:@data,es:@data

main:

mov ax,@data ;привязка ds и es

mov ds,ax ;к сегменту

mov es,ax ;данных

cld ;DF:=0

lea si,coname ;адрес источника

lea di,prline ;адрес приёмника

mov cx,strlen ;длина строк

rep movsb ;пересылка

lea dx,prline ;вывод полученной

mov ah,09h ;строки

int 21h

mov ax,4c00h ;завершение

int 21h ;программы

end main

б) пересылку данных из CONAME в PRLINE справа налево;

MASM

MODEL small

STACK 256

.data

coname db 'Space Explores Ins $'

prline db 20 dup (?)

strlen dw 20

.code

assume ds:@data,es:@data

main:

mov ax,@data ;привязка ds и es

mov ds,ax ;к сегменту

mov es,ax ;данных

std ;DF:=1

lea si,coname ;в si-адрес

add si,strlen ;конца источника

dec si

lea di,prline ;в di-адрес

add di,strlen ;конца приёмника

dec di

mov cx,strlen ;длина строк

rep movsb ;пересылка

lea dx,prline ;вывод полученной

mov ah,09h ;строки

int 21h

mov ax,4c00h ;завершение

int 21h ;программы

end main

в) загрузку третьего и четвертого байтов области CONAME в регистр АХ;

MASM

MODEL small

STACK 256

.data

coname db 'Space Explores Ins $'

prline db 20 dup (?)

strlen dw 20

outstring dw (?)

.code

assume ds:@data,es:@data

main:

mov ax,@data ;привязка ds и es

mov ds,ax ;к сегменту

mov es,ax ;данных

cld ;DF:=0

lea si,coname ;в si-адрес

add si,2 ;третьего элемента

lodsw ;пересылка слова

mov outstring,ax ;вывод из

lea dx,outstring ;аккумулятора

mov ah,09h

int 21h

mov ax,4c00h ;завершение

int 21h ;программы

end main

г) сохранение содержимого регистра АХ в области по адресу PRLINE +5;

MASM

MODEL small

STACK 256

.data

Coname db 'Space Explores Ins $'

prline db 20 dup (?)

strlen dw 20

outstring dw (?)

.code

assume ds:@data,es:@data

main:

mov ax,@data ;привязка ds и es

mov ds,ax ;к сегменту

mov es,ax ;данных

cld ;DF:=0

lea di,prline ;в di-адрес

add di,5 ;5-го элемента

mov al,'x' ;первый символ

stos prline[5] ;пересылка

mov al,'y' ;второй символ

stos prline[6] ;пересылка

lea dx,prline ;вывод полученной

mov ah,09h ;строки

int 21h

mov ax,4c00h ;завершение

int 21h ;программы

end main

е) сканирование области CONAME и поиск в ней символа " пробел ".

Если   символ будет найден, то переслать его в регистр ВН.

masm

model small

.stack 100h

.data

CONAME db 'SPASE EXPLORES INS','$'

SimvolFound db 'Simvol Found BH=" "',13,10,'$'

SimvolNotFound db 'Simvol Not Found BH=0',13,10,'$'

simvol db ' ' ;сюда заносим символ для поиска

.code

assume ds:@data,es:@data

start:

mov ax,@data ;заносим в регистры

mov ds,ax ; ds и

mov es,ax ; es адрес сегмента данных

mov al,simvol ; в al заносим символ, который будем искать

cld ;сброс флага df

lea di,CONAME ;готовим сегмент(es) и смещение(di) строки для команды scas

mov cx,20 ;длинна строки

repne scas CONAME ;scas ищет символ в строке, а repne повторяет до тех пор, пока символы не совпадут()

je found ;Прыгаем на found если символ найден

mov bh,0 ;если символ не найден в bh заносим 0

jmp vivod1

found: ;если символ найден печатается сообщение Simvol Found

mov bh,simvol ;если символ найден, то заносим его в bh (по условию)

mov ah,9

lea dx,SimvolFound

int 21h

jmp zaderjka

vivod1: ;если символ не найден печатается сообщение Simvol Not Found

mov ah,9

lea dx,SimvolNotFound

int 21h

zaderjka: ;процедура задержки

mov ah,1 ;считываем код нажатой клавиши

int 21h ;считываем код нажатой клавиши

cmp al,27 ;сравниваем код клавиши с кодом клавиши Esc

jne zaderjka ;Если нет то прыгаем на zaderjka

exit:

mov ax,4c00h ; Exit

int 21h ; Exit

end start