Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Отчет Попова М.С. по курсу Архитектура ЭВМ ВМК...docx
Скачиваний:
4
Добавлен:
01.05.2025
Размер:
88 Кб
Скачать
☆

Требования к программе

1. Вывод исходного текста должен быть выполнен сразу после его записи в память - до его анализа и преобразования. 2. Вывод преобразованного текста должен быть выполнен только после его окончательного формирования. 3. Алгоритмы преобразования текста по правилам 1 и 2 должны быть оформлены в виде процедур. 4. В программе использовать операции ввода-вывода INCH, OUTCH, OUTSTR и операцию останова FINISH, описанные в [1].

  1. Реализация

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

    1. Функции и макросы использованные в программе

В реализованной программе были написаны следующие макросы:

  1. show_mas

  2. show_str

В реализованной программе были написаны следующие процедуры:

  1. is_number

  2. is_letter

  3. smal_to_big_letter

  4. turn

Процедуры 3) и 4) являются обязательными по условию задачи, остальные написаны исходя из алгоритмических соображений.

Далее приведены подробные описания вышеизложенных процедур и макросов:

  1. show_mas

Данный макрос создан с целью упрощения процесса написания команд для вывода массива. Т.к. эта операция несколько раз встречается в теле программы, и кроме того не редко требовалась для отладки.

show_mas macro M

local L

mov si,2; В силу специфики функции 0Аh прерывания 21h фактические ;элементы начинают заполнять буфер (массив) с индекса 2.

mov ch,00h

mov cl,M[1]

newline

L:

outch M[si]

inc si

Loop L

newline

endm

  1. show_str

Данный макрос создан с целью упрощения процесса написания команд для вывода строки. Т.к. эта операция несколько раз встречается в теле программы, и кроме того не редко требовалась для отладки.

show_str macro S

newline

lea dx,S

outstr

newline

endm

  1. is_number

Данная процедура проверяет является ли данный символ цифрой.

;bh-передаваемый параметр bl - результат '1'/'0', '1' – символ ;помещенный в регистр bh является цифрой, '0' – в противном случае

is_number proc

cmp bh,'9'

jbe L3

jmp fin

L3:

cmp bh,'0'

jae L4

jmp fin

L4:

mov bl,'1'

ret

fin:

mov bl,'0'

ret

is_number endp

  1. is_letter

Данная процедура проверяет является ли передаваемый символ маленькой английской буквой.

;bh-передаваемый параметр bl - результат '1'/'0', '1' – символ ;помещенный в регистр bh является маленькой английской буквой, '0' – ;в противном случае

is_letter proc

cmp bh,'z'

jbe L5

jmp fin1

L5:

cmp bh,'a'

jae L6

jmp fin1

L6:

mov bl,'1'

ret

fin1:

mov bl,'0'

ret

is_letter endp

  1. smal_to_big_letter

Данная процедура реализует преобразование указанное в задании (Правило 1)

Т.к. разность между ascii кодами букв отличающихся лишь уровнем регистра одна и та же, то преобразование осуществляется посредством прибавления соответствующей дельты.

smal_to_big_letter proc

mov si,2

mov ch,0h

mov cl,M[1]

L7:

cmp M[si],'.'

jne bypass

jmp q2

bypass:

mov bh,M[si]

call is_letter

cmp bl,'0'

je q1

mov ah,M[si]

mov al,32

sub ah,al

mov M[si],ah

q1:

add si,1

loop L7

q2:

ret

smal_to_big_letter endp

  1. turn

Данная процедура реализует преобразование указанное в задании (Правило 2). Преобразование массива осуществляется путем применения двух указателей на начало и конец соответственно, и их последующего сближения при последовательном обмене элементов на которые они указывают.

turn proc

.186

pusha

mov si,2

add count,2

mov cx,count

L8:

cmp cx,si

jle konec

mov al,M[si]

push si

mov si,cx

mov ah,M[si]

xchg ah,al

pop si

mov M[si],al

push si

mov si,cx

mov M[si],ah

pop si

inc si

loop L8

;-----------

konec:

popa

ret

turn endp