Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

7

.docx
Скачиваний:
20
Добавлен:
03.08.2021
Размер:
198.73 Кб
Скачать

Федеральное агентство связи

Федеральное государственное бюджетное образовательное

учреждение высшего образования

Поволжский государственный университет

телекоммуникаций и информатики

Кафедра Информационных систем и технологий

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

По дисциплине «Архитектура информационной системы»

Тема: «Исследование организации переходов и циклов»

Вариант 5 и 11

Выполнили: студенты группы ИСТ-74У

Гусева Полина и Смолева Вера

Руководитель :

__________________ Куляс О.Л.

Самара 2018

1. Проанализировать приведенную ниже программу CHANGE. Создать и отладить исполняемый модуль программы CHANGE, выполнив этапы ассемблирования и компоновки. Добавить в исходный модуль программы недостающие комментарии.

TITLE CHANGE

;Программа заменяет строчные буквы заглавными в символьной строке и выводит на экран преобразованную строку на экран

;Входные параметры:

;текстовая переменная MYTEXT

.MODEL SMALL

.STACK 256

.DATA

MYTEXT DB 'Our NativeTown', 13, 10, '$' ; объявляем текстовую переменную

.CODE

;---------------------- процедура коррекции кода символа --------------------

COR PROC NEAR

NOP ;задержка системы - ничего не делать

AND AH, 0DFh

MOV [BX], AH

RET ;возврат из ближней процедуры

COR ENDP

;-----------------------------основная программа----------------------------------

Start:

MOV AX, @DATA

MOV DS, AX

XOR AX, AX ;очистить регистр

LEA BX, MYTEXT ;переслать начальный адрес

MOV CX, 15 ;загрузить счетчик циклов

;---------------------------------начало тела цикла---------------------------------

MT1: MOV AH, [BX]

CMP AH, 61h ;сравнить содержимое AH с 61h

JB MT2 ; без знака - если меньше то перейти на метку MT2

CMP AH, 7Ah ;сравнить содержимое AH с 7Ah

JA MT2 ;если вышк перейти на метку MT2

CALL COR ;вызов процедуры COR

MT2: INC BX ;BX+1

;------------------------конец тела цикла-------------------------------------------

LOOP MT1 ;повторить цикл, если (CX) ≠0

LEA DX, MYTEXT ;вывести переменную

MOV AH, 09h ;MYTEXT

INT 21h ;на экран

NOP ;холостая команда

MOV AX, 4C00h ;завершить

INT 21h ;программу

END Start

2. Загрузите созданную программу в отладчик. В окне Watches введите имя символьной переменной MYTEXT. Произведите пошаговое выполнение, используя клавиши F7 и F8. Обратите внимание, что использование F7 позволяет пошагово выполнять команды внутри цикла, в то время как F8 инициирует однократное выполнение цикла полностью. Наблюдайте и анализируйте результаты выполнения команд и изменения, происходящие с переменной в окне Watches.

3.Заново загрузите программу в отладчик. Клавишей F2 установите ловушку (точку останова) на команде NOP, следующей после команд вывода символьной строки на экран. Запустите выполнение программы клавишей F9. Программа должна выполниться до указанной точки останова.

4. Перейдите в окно WINDOW отладчика и пронаблюдайте результат выполнения программы, выбрав режим USER SCREEN. Повторным нажатием F9 продолжите выполнение программы до ее окончания

5. Внесите изменения в программу добавив автоматическое вычисление длины строки и загрузку вычисленным значением счетчика циклов CX.

TITLE CHANGE

; Программа заменяет строчные буквы заглавными в символьной

;строке и выводит на экран преобразованную строку на экран

;Входные параметры:

;текстовая переменная MYTEXT

.MODEL SMALL

.STACK 256

.DATA

MYTEXT DB 'Our NativeTown', 13, 10, '$' ; объявляем текстовую

ln = ($ - MYTEXT)-3 ;создание константы счетчика

;весь текс - сам текст - минус доп 3 символа

.CODE

;---------------------- процедура коррекции кода символа --------------

COR PROC NEAR

NOP

AND AH, 0DFh

MOV [BX], AH

RET

COR ENDP

;-----------------------------основная программа----------------------------

Start:

MOV AX, @DATA

MOV DS, AX

XOR AX, AX

LEA BX, MYTEXT

MOV CX, ln ;загрузить счетчик циклов

;---------------------------------начало тела цикла---------------------------

MT1: MOV AH, [BX]

CMP AH, 61h

JB MT2

CMP AH, 7Ah

JA MT2

CALL COR

MT2: INC BX

;------------------------конец тела цикла---------------------------------------

LOOP MT1 ;повторить цикл, если (CX) ≠0

LEA DX, MYTEXT ;вывести переменную

MOV AH, 09h ;MYTEXT

INT 21h ;на экран

NOP ;холостая команда

MOV AX, 4C00h ;завершить

INT 21h ;программу

END Start

Проверка

6.Проверьте работу модифицированной программы CHANGE для другой символьной строки, содержащей не менее 20 строчных и за главных букв английского алфавита.

MYTEXT DB 'Hi my name is Dard Waider', 13, 10, '$' ; объявляем текстовую

7. Создайте и отладьте программу CHANGE_1, чтобы она обеспечивала выполнение задания в соответствии с вариантом из таблицы 7.2. Предусмотрите вывод на экран исходных и модифицированных строк текста.

TITLE CHANGE (вариант-1)

; Программа заменяет строчные буквы заглавными в символьной

; строке и выводит на экран преобразованную строку на экран

; Входные параметры:

; текстовая переменная MYTEXT

.MODEL SMALL

.STACK 256

.DATA

MYTEXT DB 'Oud NativeDown', 13, 10, '$' ;объявляем текстовую

MYTEXT1 DB 'Oud NativeDown', 13, 10, '$' ;объявляем текстовую

MYTEXT2 DB 'Oud NativeDown', 13, 10, '$' ;объявляем текстовую

;переменную

ln = ($ - MYTEXT)-3

.CODE

;-------“D” на “J”---------------------

COR3 PROC NEAR

MOV SI, OFFSET MYTEXT2 ;в регистр SI (ИНДЕКС ПРИЕМНИКА) заносим первый адрес символа

MOV CX, AX ;в регистр заносим количество символов

DJ:

MOV BL, [SI] ;в BL заносим cтроку

CMP BL, 68 ;сравниваем 68d-это буква D в ASCII

JE zm ;если равно то замена

jmp nn ;переход на метку nn

MOV [SI], BL

zm: ;метка замены

MOV BL,74 ;поместить 74d=J в BL

MOV [SI], BL ;замена символа

nn: ;если не равно то

INC SI ;переход на следующий символ

LOOP DJ ;цикл DJ

MOV BL, BYTE PTR '$'

MOV [SI], BL ;заканчивает строку символом '$'

RET ;возврат на ближнюю процедуру

COR3 ENDP

;------------“d” на “j”----------------------

COR4 PROC NEAR

MOV SI, OFFSET MYTEXT2 ;в регистр SI (ИНДЕКС ПРИЕМНИКА) заносим первый адрес символа

MOV CX, AX ;в регистр заносим количество символов

pl:

MOV BL, [SI] ;в BL заносим cтроку

CMP BL, 100 ;сравниваем 100d-это буква d в ASCII

JE zam ;если равно то замена

jmp vt ;переход на метку vt

MOV [SI], BL

zam: ;метка замены

MOV BL,106 ;поместить 106d=j в BL

MOV [SI], BL ;замена символа

vt: ;если не равно то

INC SI ;переход на следующий символ

LOOP pl ;цикл pl

MOV BL, BYTE PTR '$'

MOV [SI], BL ;заканчивает строку символом '$'

RET ;возврат на ближнюю процедуру

COR4 ENDP

;---Заглавные в строчные--- процедура коррекции кода символа ---

COR1 PROC NEAR

MOV SI, OFFSET MYTEXT1 ;в регистр SI (ИНДЕКС ПРИЕМНИКА) заносим первый адрес символа

MOV CX, AX ;в регистр заносим количество символов

cikl:

MOV BL, [SI] ;в BL заносим cтроку

CMP BL, 64 ;сравниваем с 64 65=A

JBE foll ;если меньше либо равно переход на foll

CMP BL, 90 ;сравниваем с 90 90=Z

JA strk ;если больше проверим на строчность

ADD BL, 32 ;если заглавная латинская сделать строчной

MOV [SI], BL ;перемещаем BL

JMP foll ;конец

strk:

CMP BL, 97 ;сравнение с 97=a

JB foll ;если меньше то конец

CMP BL, 122 ;сравнение с 122=z

JA foll ;если больше конец

MOV [SI], BL ;перемещаем BL

foll:

INC SI ;переход на след символ

LOOP cikl ;цикл

MOV BL, BYTE PTR '$'

MOV [SI], BL ;заканчивает строку символом '$'

RET ;возврат на ближнюю процедуру

COR1 ENDP

;-----------------------------основная программа-----------------------------

Start:

MOV AX, @DATA

MOV DS, AX

XOR AX, AX

LEA DX, MYTEXT ;вывести переменную

MOV AH, 09h ;MYTEXT

INT 21h ;на экран

LEA BX, MYTEXT

MOV CX, ln ;загрузить счетчик циклов

;---------------------------------начало тела цикла---------------------------

MT1: MOV AH, [BX]

CMP AH, 61h

JB MT2

CMP AH, 7Ah

JA MT2

MT2: INC BX

;------------------------конец тела цикла---------------------------------------

call COR3 ;сначало вывод строки с заменой символов

call COR4

LEA DX, MYTEXT2 ;вывести переменную

MOV AH, 09h ;MYTEXT

INT 21h ;на экран

call COR1 ;вывод начальной строки только со строчными

LEA DX, MYTEXT1 ;вывести переменную

MOV AH, 09h ;MYTEXT

INT 21h ;на экран

MOV AX, 4C00h ;завершить

INT 21h ;программу

END Start

вопросы

  1. Назовите три типа команды безусловного перехода.

Короткий, Дальний, Ближний

  1. Какой может быть длина перехода в разных типах команды JMP?

  • прямой короткий переход (short) - адрес перехода лежит в диапазоне -128 ...+127.

  • прямой ближний переход (near) - помеченная команда на­ходится в текущем сегменте кода на расстоянии 128 ...216 адресов от команды JMP;

  • прямой косвенный ближний переход - адрес перехода за­дается косвенно с помощью ссылки на регистр или ячейку памяти в которых он находится;

  • прямой дальний переход (far)- помеченная команда нахо­дится в другом сегменте кодов. Изменяется содержимое ре­гистров CS:IP (EIP);

  • прямой косвенный дальний переход - полный адрес пере­хода CS:IP (EIP) содержится в ячейках памяти.

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

CS и IP/EIP/RIP для JMP FAR и IP/EIP/RIP для SHORT и NEAR

  1. Какова максимальная длина условного перехода?

Для двухбайтового условного перехода (код 7XXX) от -128 до +127 для 6-байтового (код 0F8X XX XX XX XX) от 2147483647 до -2147483648 байт

  1. Каким образом может быть указан адрес перехода?

Через адрес метки, через содержимое регистра, через содержимое ячейки памяти, через содержимое двух регистров и смещение

  1. Какие флаги могут быть использованы в командах условного пере­хода после выполнения команды сложения?

CF OF ZF SF AF PF 

  1. Приведите возможные команды условных переходов, если после сравнения беззнаковых чисел D1 и D2 оказалось: а) D1=D2, б) D1<D2, в) D1>D2.

  2. П риведите возможные команды условных переходов, если после сравнения чисел со знаками P1 и P2 оказалось: а) Р1^Р2, б) Р1<Р2, в) Р1>Р2.

  1. Какие команды могут использоваться для организации циклов?

команды сравнения и переходов

  1. Какова максимальная длина переходов при организации циклов?

4 вопрос

Соседние файлы в предмете Архитектура информационных систем