Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
3-Способы адресации памяти.docx
Скачиваний:
10
Добавлен:
25.11.2019
Размер:
23.42 Кб
Скачать

Ввод строки с помощью функции oAh прерывания 21h

Для ввода строки с помощью функции 0Ah прерывания 21h область ввода должна быть описана специальным образом:

1 байт

1 байт

Буфер для ввода символов

Первый байт содержит число, равное размеру буфера для ввода символов.

Во втором байте сохранится число, равное количеству введенных символов.

Вводимые символы будут сохраняться в буфере, начиная с третьего байта от начала описываемой области.

Итак, описать область для ввода строки из 10 символов можно как

Stroka DB 11, ?, 11 DUP(?)

Длина строки и размер буфера задаются на 1 больше, так как один символ нужен для хранения кода 0Dh – код клавиши ENTER.

Для облегчения доступа к каждой из описанных областей описание можно разбить на 3 части:

MaxLength DB 11

CurrentLehgth DB ? ;знак вопроса означает,

;что начальное значение

Buffer DB 11 DUP(?) ;данной ячейки памяти не определено

Вызов функции 0Ah выглядит так:

mov AH, 0Ah ;номер функции заносим в регистр AH.

;Чтобы процессор мог отличить номер

;функции от названия регистра,

;перед номером функции ставим цифру 0

mov DX, OFFSET Stroka ;в DX заносим адрес начала области

;ввода – 1 вариант,или

;mov dx, offset MaxLength – 2 вариант

Int 21h ;вызов прерывания

Например:

С клавиатуры вводится строка s1. Скопировать из нее в строку s2 первый и последний символы и вывести на экран обе строки.

В сегменте данных определим следующие области:

message DB ‘Enter the string:’, 10, 13, ‘$’ ;приглашение к вводу

maxlength DB 11 ;максимально допустимая длина

;строки, последним введенным

;символом будет символ

;с кодом 13 (код клавиши ENTER)

curlength DB ? ;текущая длина строки – равна количеству

;введенных символов без учета клавиши Enter

s1 DB 11 DUP(?) ;буфер, в который будут помещаться вводимые

;символы

s2 DB 3 DUP(?) ;вторая строка: 2 позиции под буквы и одна

;позиция под символ $ – признак конца строки

;для 9-ой функции

new_line DB 10,13,’$’ ;строка, содержащая код клавиши Enter,

;будет использоваться для перевода курсора

;на новую строку

Программа должна работать по следующему сценарию:

  1. Вывод строки message на экран

  2. Ввод строки s1

  3. Копирование первого символа из s1 в s2 через регистр AL

mov AL, s1

mov s2, AL

  1. Помещаем в BX количество введенных символов

mov BL, curlength

mov BH, 0

  1. Копируем последний символ из s1 в s2 на вторую позицию через регистр AL

mov AL, s1 [BX – 1]

mov s2 + 1,AL

  1. Помещаем символ $ в конец строк s1 и s2

mov s2+2,’$’

mov s1[bx],’$’

  1. Выводим строку s1

  2. Выводим строку new_line

  3. выводим строку s2

  4. выводим строку new_line

  5. завершаем программу с помощью функции 4c прерывания 21h

Задания

  1. Написать программу, соответствующую вашему варианту

  2. Выполнить программу под управлением отладчика TD. Провести пошаговую трассировку программы, распечатывая на каждом шаге содержимое сегмента данных. Изучить изменение командного указателя IP и сегмента данных от шага к шагу выполнения программы.

Варианты задач:

  1. Ввести строку s1 длиной не менее 10 символов. Скопировать в строку s2 2-ой, 4-ый и 6-ой символы из строки s1. Вывести на экран строки s1 и s2.

  1. Ввести строку s1 длиной не менее 10 символов. Скопировать в строку s2 10-ый, 5-ый и 2-ой символы из строки s1. Вывести на экран строки s1 и s2.

  1. Ввести строку s1 длиной не менее 10 символов. Скопировать в строку s2 каждый третий символ из строки s1. Вывести на экран строки s1 и s2.

  1. Ввести строку s1 длиной не менее 10 символов. Скопировать в строку s2 все символы, стоящие на нечетных позициях из строки s1. Вывести на экран строки s1 и s2.

  2. Ввести строку s1 длиной не менее 10 символов. Скопировать в строку s2 все символы, стоящие на четных позициях из строки s1. Вывести на экран строки s1 и s2.

  1. Ввести строку s1 длиной не менее 10 символов. Скопировать в строку s2 три последних символа в прямом порядке из строки s1. Вывести на экран строки s1 и s2.

  1. Ввести строку s1 длиной не менее 10 символов. Скопировать из строки s1 в строку s2 три первых символа. Вывести на экран строки s1 и s2.

  1. Ввести строку s1 длиной не менее 10 символов. Скопировать из строки s1 в строку s2 три первых символа в обратном порядке. Вывести на экран строки s1 и s2.

  1. Ввести строку s1 длиной не менее 10 символов. Скопировать из строки s1 в строку s2 три последних символа в обратном порядке. Вывести на экран строки s1 и s2.

  1. Ввести строку s1 длиной не менее 10 символов. Скопировать из строки s1 в строку s2 последний символ три раза. Вывести на экран строки s1 и s2.

  1. Ввести строку s1 длиной не менее 10 символов. Скопировать из строки s1 в строку s2 предпоследний символ три раза и первый. Вывести на экран строки s1 и s2.

  1. Ввести строку s1 длиной не менее 10 символов. Скопировать из строки s1 в строку s2 пятый символ два раза и три раза второй. Вывести на экран строки s1 и s2.

  1. Ввести строку s1 длиной не менее 10 символов. Скопировать из строки s1 в строку s2 первые 3 символа два раза. Вывести на экран строки s1 и s2.

  1. Ввести строку s1 длиной не менее 10 символов. Скопировать из строки s1 в строку s2 второй и четвертый символы три раза. Вывести на экран строки s1 и s2.

  1. Ввести строку s1 длиной не менее 10 символов. Скопировать из строки s1 в строку s2 девятый символ – три раза, второй – два раза. Вывести на экран строки s1 и s2.

  1. Ввести строку s1 длиной не менее 10 символов. Скопировать из строки s1 в строку s2 последний и предпоследний символы два раза. Вывести на экран строки s1 и s2.

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