close

Вход

Забыли?

вход по аккаунту

?

Отчет 7 (2)

код для вставкиСкачать
Поволжский Государственный Университет Телекоммуникаций и Информатики
Архитектура ЭВМ и систем
Отчёт по лабораторной работе №7
Исследование организации переходов в программе
Выполнил студент группы ИТ-71
Горцунов В.В.
Самара 2008
Выполнение работы
Задание
4а) строчные от 'f' до'z' заглавными
б) все заглавные строчными
Создадим файл 72.asm:
TITLE CHANGE - ЗАМЕНА СТРОЧНЫХ ЗАГЛАВНЫМИ ОТ А ДО Z
DATASG SEGMENT PARA ; открыть сегмент данных
MYTEXT DB'hello my world!' ,13,10, '$' ; переменная длиной в 10 байт
DATASGENDS ; закрыть сегмет данных
STACKSG SEGMENT 'Stack' ; открыть сегмент стека
DB12 DUP(?) ; задать стэк 12 байт
STACKSG ENDS ; закрыть сегмент стека
CODESGSEGMENT PARA 'Code' ; открыть сегмент кода
BEGINPROC FAR ; Процедура FAR с названием BEGIN
ASSUME SS:STACKSG, CS:CODESG, DS:DATASG ; Задать соответствия для сегментов
PUSH DS ; поместить в стек данные DS
SUB AX,AX ; AX - AX
PUSH AX ; поместить в стек данные AX
MOV AX, DATASG ; Инициализировать сегментный
MOV DS, AX ; регистр DS
LEA BX, MYTEXT ; Поместить в BX offset переменной
MOV CX, 10H ; CX = 10h ( = размеру переменной)
MT1:MOV AH, [BX] ; Задать метку MT1, AH = адреc BX
CMP AH, 66H ; сравнить (AH) и 66h
JB MT2 ; если (AH) < 66h то перейти к MT2
CMP AH, 7AH ; сравнить (AH) и 7Ah
JA MT2 ; если (AH) > 7Ah то перейти к MT2
CALLCOR ; Вызвать процедуру COR
MT2:INC BX ; BX := BX + 1
LOOP MT1 ; CX := CX - 1, если CX > 0, идти к MT1
LEA DX, MYTEXT ; в DX поместить offset MYTEXT
MOV AH, 09H ; вывести на экран MYTEXT
INT 21H ; с помощью DOS
RET ; Завершить программу, и вернуться в DOS
BEGIN ENDP ; Окончание процедуры BEGIN
CORPROC NEAR ; Процедура NEAR с названием COR
NOP ; нет операции
AND AH, 0DFH ; Сместить старший разряд на D, младш. на F
MOV [BX], AH ; Поместить AH, в содержимое BX
RET ; Вернуться
CORENDP ; Окончание процедуры COR
CODESGENDS ; Окончание сегмента кода
ENDBEGIN ; Выход из метки BEGIN Скомпилируем файл 72.asm с помощью tasm.exe и создадим файл exe с помощью tlink.exe
tasm /z /zi /n 72 72 72
tlink /v 72
Создадим файл 73.asm:
TITLE CHANGE - ЗАМЕНА СТРОЧНЫХ БУКВ ЗАГЛАВНЫМИ
DATASG SEGMENT PARA ; открыть сегмент данных
MYTEXT DB'HELLO MY WORLD!' ,13,10, '$' ; переменная длиной в 10 байт
DATASGENDS ; закрыть сегмет данных
STACKSG SEGMENT 'Stack' ; открыть сегмент стека
DB12 DUP(?) ; задать стэк 12 байт
STACKSG ENDS ; закрыть сегмент стека
CODESGSEGMENT PARA 'Code' ; открыть сегмент кода
BEGINPROC FAR ; Процедура FAR с названием BEGIN
ASSUME SS:STACKSG, CS:CODESG, DS:DATASG ; Задать соответствия для сегментов
PUSH DS ; поместить в стек данные DS
SUB AX,AX ; AX - AX
PUSH AX ; поместить в стек данные AX
MOV AX, DATASG ; Инициализировать сегментный
MOV DS, AX ; регистр DS
LEA BX, MYTEXT ; Поместить в BX offset переменной
MOV CX, 10H ; CX = 10h ( = размеру переменной)
MT1:MOV AH, [BX] ; Задать метку MT1, AH = адреc BX
CMP AH, 41H ; сравнить (AH) и 41h
JB MT2 ; если (AH) < 61h то перейти к MT2
CMP AH, 5AH ; сравнить (AH) и 5Ah
JA MT2 ; если (AH) > 7Ah то перейти к MT2
CALLCOR ; Вызвать процедуру COR
MT2:INC BX ; BX := BX + 1
LOOP MT1 ; CX := CX - 1, если CX > 0, идти к MT1
LEA DX, MYTEXT ; в DX поместить offset MYTEXT
MOV AH, 09H ; вывести на экран MYTEXT
INT 21H ; с помощью DOS
RET ; Завершить программу, и вернуться в DOS
BEGIN ENDP ; Окончание процедуры BEGIN
CORPROC NEAR ; Процедура NEAR с названием COR
NOP ; нет операции
ADD AH, 20H ; Прибавить 20h чтоб получить строчную букву
MOV [BX], AH ; Поместить AH, в содержимое BX
RET ; Вернуться
CORENDP ; Окончание процедуры COR
CODESGENDS ; Окончание сегмента кода
ENDBEGIN ; Выход из метки BEGINСкомпилируем файл 73.asm с помощью tasm.exe и создадим файл exe с помощью tlink.exe
tasm /z /zi /n 73 73 73
tlink /v 73
3
Документ
Категория
Рефераты
Просмотров
13
Размер файла
82 Кб
Теги
отчет
1/--страниц
Пожаловаться на содержимое документа