Програми копіювання рядка

[ виправити ] текст може містити помилки, будь ласка перевіряйте перш ніж використовувати.

скачати

Міністерство РФ по зв'язку та інформатизації

Поволзька державна академія телекомунікацій

та інформатики

Кафедра «ОБЧИСЛЮВАЛЬНА ТЕХНІКА»

Контрольна робота

З ПРЕДМЕТУ

«Організація ЕОМ та систем»

Самара

2009

Програма копіювання рядка в зворотному порядку

Скласти програму копіювання рядки з 15 символів у поруч розташовану область пам'яті, але в зворотному порядку.

Для цього ми створюємо два рядки. Одна виконує роль джерела даних, а інша - приймач. Потім ми визначаємо адресу джерела і одержувача за допомогою команди Lea, яка є альтернативою оператору асемблера offset. На відміну від offset команда lea допускає індексацію операнда, що дозволяє більш гнучко організувати адресацію операндів. Так як нам потрібно заповнити пам'ять у зворотному порядку, то ми відразу зміщуємо адресу приймача DI на 15 байтів. Організовуємо цикл і за допомогою проміжного регістра AL заносимо наші символи в регістр DI, зменшуючи, з кожним кроком, байти запису. Після того, як лічильник CX зменшиться до 0, програма завершить свою роботу

Лістинг ЗАВДАННЯ «Програмування рядки у зворотному порядку»

Завдання 17

Data Segment; відкрити сегмент даних

text1 DB 'My name Valerij', 13, 10, '$'

text2 DB 25 DUP (?); рядок одержувач

Data ENDS; Закрити сегмент даних

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

STK Segment; відкрити сегмент даних

DB 100 DUP (?); Зарезервувати під стік 100 осередків пам'яті

STK ENDS; закрити сегмент стека

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

ASSUME SS: STK, CS: CODE, DS: DATA; призначити сегментні регістри

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

CODE Segment; відкрити сегмент коду

START: mov AX, DATA; завантаження сегментного регістра DS

mov DS, AX; регістра DS

lea SI, TEXT1; початковий адреса рядка-джерела занести в SI

lea DI, TEXT2; початковий адреса рядка одержувача занести в DI

mov CX, 15; переслати 15 байтів

Metka1: mov AL, [SI]; виконати пересилання

mov [DI + 15], AL; через проміжний регістр AL

INC SI; збільшити адресу джерела на 1

DEC DI; зменшити адресу джерела на 1

LOOP Metka1; (CX) -1, повторити цикл поки CX не дорівнює 0

mov AL, 0; завершити програму через

mov AH, 4Ch; системну функцію повернення

int 21h; в DOS

CODE ENDS; закрити сегмент коду

END START; закрити програму

Програма копіювання рядка на пряму

Скласти програму виробляє копіювання рядки з 15 символів у розташовану поруч область пам'яті.

Завдання, практично ідентична попередньої. За винятком способу пересилки рядка. У даному випадку нам вже не потрібно вести запис у зворотному порядку. Також, створюємо два рядки. Одна виконує роль джерела даних, а інша - приймач. Потім ми визначаємо адресу джерела і одержувача за допомогою команди Lea. Приймач DI на 15 байтів більше не зміщуємо.

Організовуємо цикл і за допомогою проміжного регістра AL заносимо наші символи в регістр DI. При кожному кроці байти будемо збільшувати в регістрі DI на один. Після того, як лічильник CX зменшиться до 0, програма завершить свою роботу.

Лістинг ЗАВДАННЯ «Програма копіювання рядка на пряму»

Задача 1

Data Segment; відкрити сегмент даних

text1 DB 'abcdefghijklmno', 13, 10, '$'

text2 DB 25 DUP (?); рядок одержувач

Data ENDS; Закрити сегмент даних

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

STK Segment; відкрити сегмент даних

DB 100h DUP (?); Зарезервувати під стік 100 осередків пам'яті

STK ENDS; закрити сегмент стека

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

ASSUME SS: STK, CS: CODE, DS: DATA; призначити сегментні регістри

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

CODE Segment; відкрити сегмент коду

START: mov AX, DATA; завантаження сегментного регістра DS

mov DS, AX; регістра DS

lea SI, TEXT1; початковий адреса рядка-джерела занести в SI

lea DI, TEXT2; початковий адреса рядка одержувача занести в DI

mov CX, 15; переслати 15 байтів

Metka1: mov AL, [SI]; виконати пересилання

mov [DI], AL; через проміжний регістр AL

INC SI; збільшити адресу джерела на 1

INC DI; збільшити адресу приймача на 1

LOOP Metka1; (CX) -1 повторити цикл поки CX не дорівнює 0

mov AL, 0; завершити програму через

mov AH, 4Ch; системну функцію повернення

int 21h; в DOS

CODE ENDS; закрити сегмент коду

END START; закрити програму


Додати в блог або на сайт

Цей текст може містити помилки.

Програмування, комп'ютери, інформатика і кібернетика | Контрольна робота
18.6кб. | скачати


Схожі роботи:
Захист програми від нелегального копіювання
Копіювання переміщання та форматування абзаців Опис основних прийомів копіювання переміщання
Резервне копіювання
Копіювання вмісту файлу 1 в інші файли
Робота із текстом Виділення копіювання форматування тексту у редакторі Word
Розгалуження програми циклічні програми з розгалуженням накопичення сум і добутків одновимірн
Порівняльний аналіз програми Занкова і традиційної програми
Програми архіватори антивірусні програми
Програми - архіватори
© Усі права захищені
написати до нас