Указания по выполнению Задания 1.




Выведите приглашение на ввод строки. Для ввода строки в буфер используйте функцию 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.','$'

режим MASM
NOCHAR DB 10,13,'Symbol no 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

вывод приглашения на ввод строки
MOV AH,09h

LEA DX,INPSTR

INT 21h

MOV[MSG],80 - помещение максимально допустимой длины строки в первый байт буфера

ввод строки с клавиатуры в буфер  
MOV DX,OFFSET MSG - смещение строки

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 AH,9

MOV DX,OFFSET MSG

INT 21h

MOV AH,9

LEA DX,CHR

ввод с клавиатуры искомого символа в регистр AL
INT 21h

MOV AH,0 - функция 0

INT 16h - прерывание 16h

поиск заданного символа во введённой с клавиатуры строке
CLD - сброс флага DF

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.

Создайте программу преобразования значений температуры. Программа должна выполнять преобразование значений температуры, выраженных в градусах Цельсия, в значения, выраженные в градусах Фаренгейта, и наоборот.



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2016-08-08 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: