АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

ASSUME DS:Data,CS:Code,SS:Stack1,ES:Data

Читайте также:
  1. ASSUME DS:Data,CS:Code,SS:Stack1,ES:Data

Start: mov AX,Data

mov DS,AX

;подготовка регистров для обработки строки

;настройка регистровых пар DS:SI и ES:DI и пр.

push ES;сохранения адреса PSP, который в данный момент на регистре ES, в стеке для корректного завершения программы

push DS;помещение в стек значения адреса начала сегмента данных

pop ES;изъятие из стека адреса начала сегмента данных

;и запись его на ES

mov ax,len;помещение в регистр AX значения длины строки

mov dl,5;запись на DL 5,т.е. количества символов,

;после которых должны вставляться пробелы

div dl;AX/5 -> на AL частное, значение которого

;равно количеству вставок пробела

lea SI,str1;загрузка на SI смещения к строке,

;т.е. к строке источнику

lea DI,str1;загрузка на DI смещения к строке,

;т.е. к строке назначения

mov DL,len;загрузка на DL длины строки

xor dh,dh;обнуление DH

add SI,DX;формирование смещения к первому байту за строкой

;на SI (SI + длина строки)

add di,DX;формирование смещения к первому байту за строкой

;на DI (DI + длина строки)

dec SI;на SI формирование смещения к последнему

;в строке символу

std;установка флага направления,

;т.е. организация обработки строки

;от старших к младшим адресам

mov cl,al;на CL количество вставок пробела

xor ch,ch;обнуление CH

mov bl,len;загрузка на BL длины строки

;внешний цикл

m1: mov addr,di;сохранение в ячейке addr значения DI

mov addr+2,si;сохранение в ячейке addr+2 значения SI

sub bl,5;на BL длина строки - 5, т.е. длина

;обрабатываемой части строки

push cx;сохранение в стеке счетчика внешнего цикла

mov cl,bl;загрузка CL значением количества повторений

;команды переноса элементов строки

;(счетчик для повторителя - rep)

;внутренний цикл (из одной команды movsb с повторителем rep)

rep movsb;сдвиг части строки на один символ вправо

mov bh,' ';на BH символ пробела

;вставка символа пробела в строку

mov [di],bh

;подготовка адресов для следующего шага обработки

mov di,addr;восстановление на регистре DI начального адреса строки

mov si,addr+2;восстановление на регистре SI начального адреса строки

inc di;увеличение значения на единицу

;на один элемент строка стала длиннее

inc si

pop cx;восстановление на CX значения счетчика внешнего цикла

loop m1;переход к первой команде внешнего цикла

mov ah,4ch

int 21h

Code ENDS

stack1 segment 'stack'

DB 80 dup (0)

Stack1 ends

End start

Содержание отчета

Отчет по лабораторной работе должен содержать:

 

1) титульный лист;

2) тему и цель работы;

3) листинг программы;

4) дамп памяти после выполнения программы;

5) выводы по работе.


1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 |

Поиск по сайту:



Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.003 сек.)