7
.docxФедеральное агентство связи
Федеральное государственное бюджетное образовательное
учреждение высшего образования
Поволжский государственный университет
телекоммуникаций и информатики
Кафедра Информационных систем и технологий
Лабораторная работа №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
вопросы
Назовите три типа команды безусловного перехода.
Короткий, Дальний, Ближний
Какой может быть длина перехода в разных типах команды JMP?
прямой короткий переход (short) - адрес перехода лежит в диапазоне -128 ...+127.
прямой ближний переход (near) - помеченная команда находится в текущем сегменте кода на расстоянии 128 ...216 адресов от команды JMP;
прямой косвенный ближний переход - адрес перехода задается косвенно с помощью ссылки на регистр или ячейку памяти в которых он находится;
прямой дальний переход (far)- помеченная команда находится в другом сегменте кодов. Изменяется содержимое регистров CS:IP (EIP);
прямой косвенный дальний переход - полный адрес перехода CS:IP (EIP) содержится в ячейках памяти.
Содержимое каких регистров модифицируется при выполнении безусловных переходов разных типов?
CS и IP/EIP/RIP для JMP FAR и IP/EIP/RIP для SHORT и NEAR
Какова максимальная длина условного перехода?
Для двухбайтового условного перехода (код 7XXX) от -128 до +127 для 6-байтового (код 0F8X XX XX XX XX) от 2147483647 до -2147483648 байт
Каким образом может быть указан адрес перехода?
Через адрес метки, через содержимое регистра, через содержимое ячейки памяти, через содержимое двух регистров и смещение
Какие флаги могут быть использованы в командах условного перехода после выполнения команды сложения?
CF OF ZF SF AF PF
Приведите возможные команды условных переходов, если после сравнения беззнаковых чисел D1 и D2 оказалось: а) D1=D2, б) D1<D2, в) D1>D2.
П риведите возможные команды условных переходов, если после сравнения чисел со знаками P1 и P2 оказалось: а) Р1^Р2, б) Р1<Р2, в) Р1>Р2.
Какие команды могут использоваться для организации циклов?
команды сравнения и переходов
Какова максимальная длина переходов при организации циклов?
4 вопрос