Студопедия

Главная страница Случайная страница

Разделы сайта

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






  • Как продвинуть сайт на первые места?
    Вы создали или только планируете создать свой сайт, но не знаете, как продвигать? Продвижение сайта – это не просто процесс, а целый комплекс мероприятий, направленных на увеличение его посещаемости и повышение его позиций в поисковых системах.
    Ускорение продвижения
    Если вам трудно попасть на первые места в поиске самостоятельно, попробуйте технологию Буст, она ускоряет продвижение в десятки раз, а первые результаты появляются уже в течение первых 7 дней. Если ни один запрос у вас не продвинется в Топ10 за месяц, то в SeoHammer за бустер вернут деньги.
    Начать продвижение сайта
  • Rep movsb






    Заметим, что хотя rep и является служебным словом (кодом операции), но его часто пишут на месте метки (в качестве первого поля предложения Ассемблера), так как служебное слово нельзя спутать с именем, заданным пользователем. Пара команд rep movsb является тесно связанной, они вместе выбираются на регистр команд центрального процессора, так что в цикле пересылки массива нет необходимости обращаться в память за командами. Теперь сложность нашего алгоритма снизилась до теоретического минимума в 2*N операций, т.е. это позволило значительно поднять эффективность пересылки массива.[37]

    Разберёмся теперь с назначением флага направления DF. Отметим сначала, что этот флаг позволяет производить пересылку массива в прямом направлении (от первого элемента к последнему) при значении DF=0 и в обратном направлении (от последнего элемента массива к его первому элементу) при DF=1, отсюда и название флага – флаг направления пересылки массива.

    Пересылка массива в обратном направлении – не прихоть программиста, а часто единственный способ правильного присвоения значений массивов. Правда следует сразу сказать, что флаг направления влияет на правильное присваивание одному массиву значения другого массива только в том случае, если эти массивы перекрываются в памяти (т.е. один массив полностью или частично занимает то же место в памяти, что и второй массив). В качестве примера на рис. 9.1 показано два случая перекрытия массивов A и B в памяти. Из этого рисунка видно, что для случая 9.1 а) необходима пересылка в прямом направлении с флагом DF=0, а для случая 9.1 б) правильный результат присваивания массивов получается при обратном направлении пересылки элементов массива с флагом DF=1.

     

          Массив В       Массив А
                 
                 
      Массив А       Массив В    
              ...  
                 
      ...          
                   
                   
                   
       
    а). Должно быть DF=0   б). Должно быть DF=1  
       
      Рис. 9.1. Два случая перекрытия массивов в памяти при пересылке.
                         

    Перекрытие массивов при пересылке часто встречается в практике программирования. Типичным примером является работа текстового редактора, когда при операции вставки и удаления фрагментов текста приходится раздвигать или сжимать редактируемый текст.

    Упражнение. Определите, какие значения должен иметь флаг направления DF при операции встаки и при операции удаления участка редактируемого текста.

    Продолжим изучение строковых команд. Команды сравнения двух операндов cmpsb и cmpsw имеют тот же формат память-память, что и команды movsb и movsw. Команды cmpsb и cmpsw выполняются по схеме:

    cmp < ds, si>, < es, di>; φ (di); φ (si)

    т.е. производится сравнение между собой двух коротких или длинных целых чисел и соответствующим образом устанавливаются флаги (так же, как при выполнении команды сравнения).

    Как мы знаем, команды сравнения необходимы для работы команд условного перехода. С командами сравнения cmpsb и cmpsw удобно использовать команды-префиксы повторения repe/repz и repne/repnz. Эти команды похожи на команду rep, но обеспечивают возможность досрочного выхода из цикла по значению флага ZF=0 (для команд repe/repz) и ZF=1 (для команд repne/repnz).

    В качестве примера рассмотрим следующую задачу. Как мы знаем, строки текста можно сравнивать между собой не только на равенство и неравенство, но и с помощью других операций отношения (больше, меньше и т.д.). При этом строки считаются упорядоченными в так называемом лексикографическом порядке (а по-простому – как в словаре). С помощью строковых команд и префиксов повторения операцию сравнения двух строк можно так реализовать на Ассемблере (правда, здесь строки одинаковой длины, сравнение строк разной длины реализуется более сложно):

     

    N equ 20000

    Data segment

    X db N dup (?)

    Y db N dup (?)

    ...

    Data ends

    Code segment

    assume cs: Code, ds: Data, es: Data, ss: Stack

    ...

    mov cx, N

    Cld

    lea si, X

    lea di, Y






    © 2023 :: MyLektsii.ru :: Мои Лекции
    Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
    Копирование текстов разрешено только с указанием индексируемой ссылки на источник.