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

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

Текст программы:

model SMALL

stack 100h

dataseg

AskCont db 0Ah,0Dh

db 'Завершить работу - Esc, продолжить - ЛЮБАЯ ÊËÀÂÈØÀ'

db '$'

Ask db 0Ah,0Dh,'Введите строку:','$'

COUNT db 10 dup(?); счетчики количества цифр

CIFR db '0123456789ABCDEF'; таблица преобразования

; шестн.цифр для вывода

INPSTR db 80,?, 82 dup(?); буфер ввода

OUTSTR db 0Dh,0Ah,?, ' ',?,?, '$'; буфер вывода

codeseg

startupcode

BEGIN:

;Ввод строки

lea DX, Ask

mov AH, 09h

int 21h

lea DX, INPSTR

mov AH, 0Ah

int 21h

;Обработка

xor AX, AX

lea BX, INPSTR+2;адрес начала введенной строки

xor CX, CX

mov CL, INPSTR+1;кол-во введенных символов строки

BB:

mov AL, [BX];очередной символ строки

cmp AL, '0';код символа меньше, чем код нуля?

jb NC;да, т.е. не цифра

cmp AL, '9';код символа больше, чем код девятки?

ja NC;да, т.е. не цифра

;символ - десятичная цифра

sub AL, '0';получаем дв. значение цифры, т.е.

mov SI, AX; индекс в массиве счетчиков COUNT

inc COUNT[SI];увеличиваем соответств. счетчик

NC: inc BX;получить очередной символ строки

loop BB

;Вывод результатов

lea DX, OUTSTR

xor SI, SI;Счетчик цифр

OO: xor AX, AX

mov AL, '0'

add AX, SI;ASCII-код очередной цифры в SI

mov OUTSTR+2, AL; в буфер вывода

mov AL, COUNT[SI];AL<-значение счетчика

; очередной цифры

mov CL, 4;получаем

shr AL, CL; в DI

mov DI, AX; значение старшей шестн. цифры

mov AL, CIFR[DI]; счетчика преобразуем в ASCII-код

mov OUTSTR+4, AL;пересылаем в буфер вывода

mov AL, COUNT[SI];AL<-знач. счетчика очередн. цифры

and AL, 0Fh;Получаем в DI значение

mov DI, AX; младшей шестн. цифры счетчика

mov AL, CIFR[DI]; преобразуем ASCII-код

mov OUTSTR+5, AL; пересылаем в буфер вывода

mov AH, 09h;Вывод сформированной в буфере

int 21h; строки

inc SI;Счетчик очередной цифры

cmp SI, 10

jl OO

;Запрос на продолжение работы

lea DX, AskCont

mov AH, 09h

int 21h

mov AH, 08h

int 21h

cmp AL, 27

je QUIT

jmp BEGIN

;Конец работы

QUIT: exitcode 0

end

ВАРИАНТЫ ЗАДАНИЙ

1. Ввести с клавиатуры строку. Сжать строку, т.е. удалить про­белы и табуляции. Вывести результаты на экран.

2. Ввести с клавиатуры строку. Преобразовать все малые буквы в большие. Вывести результаты на экран.

3. Ввести с клавиатуры строку. Посчитать количество слов в строке. Подумать, что является разделителем слов. Вывести ре­зультаты на экран.

4. Ввести с клавиатуры строку. Ввести с клавиатуры коротенькую строку – шаблон. Найти шаблон во введенной строке. Вывести на экран "ДА", если шаблон есть, и "НЕТ", если его нет.

5. Ввести с клавиатуры две строки. Сравнить их. Вывести на эк­ран номер позиции, в которой строки различаются.

6. Ввести с клавиатуры строку. Если она длиннее некоторой величины, то обрезать, если короче – растянуть, вставив нужное число пробелов между словами. Вывести результаты на экран.

7. Ввести с клавиатуры строку, состоящую из нескольких слов. Вывести каждое слово на экран в отдельной строке, т.е. выдать слова в столбик.

8. Ввести с клавиатуры строку. Переставить в ней символы, поменяв местами первый с последним, второй с предпоследним и т.д. Вывести результаты на экран.

КОНТРОЛЬНЫЕ ВОПРОСЫ

1. Что такое программное прерывание?

2. Какие возможности работы с клавиатурой имеются у программиста?

3. Чем отличаются друг от друга различные функции DOS, выполняющие ввод с клавиатуры?

4. Что такое расширенный код клавиатуры?

5. Можно ли выдать на экран текст «$1.00 = 25.00 rub.», используя функцию DOS 09h?

6. Какие режимы адресации удобно использовать при работе с одномерными массивами?

7. Что означают выражения в поле операндов в строках примера:
lea BX, INSTR+2
mov OUTSTR+3, AL?

8. Как выделить младшую тетраду байта?

9. Как выделить старшую тетраду байта?

10. В чем отличие команд
lea BX, STR
mov BX, offset STR?


Лабораторная работа

ÄÅÑßÒÈ×ÍÀß ÀÐÈÔÌÅÒÈÊÀ


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: