|
|||||||
АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
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) выводы по работе. Поиск по сайту: |
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.003 сек.) |