Выведите приглашение на ввод строки. Для ввода строки в буфер используйте функцию 0Аh прерывания 21h, требующую объявления буфера для хранения вводимой строки. В первый байт буфера предварительно поместите максимально допустимую длину строки. В нужный регистр введите смещение строки. После выполнения функции во второй байт будет занесено фактически прочитанное количество символов введённой строки, т.е. длина строки, для хранения которой нужно объявить переменную. Для сохранения длины строки в объявленной переменной, вначале сохраните размер введённой строки в нужном регистре. Последним символом строки должен стать признак конца строки "$", поэтому добавьте этот символ в конец строки. Добавьте к строке код "конец строки" и код "возврат каретки". Выведите введённую строку на экран.
Для ввода с клавиатуры искомого символа для поиска используйте функцию 0 прерывания 16h, возвращающую ASCII-код символа в регистр AL и SCAN-код - в регистр AH.
Сбросьте флаг DF. Загрузите в ES:DI смещение первого символа строки. Для префикса повторения укажите длину строки. Поиск символа выполните командой SCAS с префиксом повторения "повторять пока не равно" REPNE, требующей наличия искомого символа в регистре AL. Поиск выполнять до первого совпадения, т.е. до тех пор, пока искомый символ и символ в строке не совпадут (выход при первом совпадении). Если символ найден, то выведите сообщение "символ найден". В противном случае выведите сообщение "символ не найден".
MODEL SMALL
.STACK 128
.DATA
FND DB 10,13,'Symbol found.','$'
|
INPSTR DB 10,13,'input stroku:','$'
CHR DB 10,13,'input symbol for found:','$'
MSG DB 80 DUP(?) - объявление буфера для хранения вводимой строки
LEN DW? - длина строки
.CODE
ASSUME DS:@DATA,ES:@DATA
s: MOV AX,@DATA
MOV DS,AX
MOV ES,AX
|
LEA DX,INPSTR
INT 21h
MOV[MSG],80 - помещение максимально допустимой длины строки в первый байт буфера
|
MOV AH,0Ah - функция 0Аh
INT 21h - прерывание 21h
XOR BH,BH
MOV BL,[MSG+1] - размер введённой строки
MOV LEN,BX - сохранение длины строки
MOV [MSG+BX+2],'$' - занесение в конец строки символа "признак конца строки" - $
MOV [MSG],10 - добавление кода "конец строки"
MOV [MSG+1],13 - добавление кода "возврат каретки"
|

MOV DX,OFFSET MSG
INT 21h
MOV AH,9
LEA DX,CHR
|
MOV AH,0 - функция 0
INT 16h - прерывание 16h
|

LEA DI,[MSG+2] - загрузка в ES:DI смещения первого
символа строки
MOV CX,LEN - указание длины строки для префикса
повторения
REPNE SCASB - команда SCAS с префиксом повторения
REPNE - "повторять пока не равно",
выполняющая поиск в строке до первого
совпадения искомого символа и символа
в строке и осуществляющая выход при
первом совпадении
JE found - символ найден
failed: - символ не найден
MOV AH,09h
LEA DX,NOCHAR - вывод сообщения "символ не найден"
INT 21h
JMP e
found:
MOV AH,09h
LEA DX,FND - вывод сообщения "символ найден"
INT 21h
e: MOV AX,4C00h
INT 21h
END S
Задание 2.
Создайте программу преобразования значений температуры. Программа должна выполнять преобразование значений температуры, выраженных в градусах Цельсия, в значения, выраженные в градусах Фаренгейта, и наоборот.