Архитектура микропроцессорной системы. Состав машинных команд и основы программирования микропроцессорной системы на ассемблере. Булатов В.Н. - 60 стр.

UptoLike

Составители: 

б) DI:= <DI> ± 2, SI:= <SI> ± 2, если переслали
слово.
Примечания
а) инкремент («+») происходит в том случае, если флаг DF был
сброшен (DF = 0нормальное направление) ;
б) декремент («-») происходит в том случае, если флаг DF был
установлен (DF = 1обратное направление; D — DOWNвниз).
Установка флага DF производится с помощью специальных команд:
а) установка флага (DF = 1) производится командой STD, КОП
= FD ;
б) сброс флага (DF = 0) производится командой CLD, КОП = FС.
Примернеобходимо переслать 5 байт, начиная с адреса 015ЗС,
на место, начиная с адреса 35000.
Выделяем, с учетом команды типа MOVS, по своему усмотрению
значения сегментов и адреса в сегментах источника и приемника.
Адрес источника (src): 015ЗС = 0000:15ЗС;
Адрес приемника (dst): 35000 = 3000:5000.
Составляем программу:
CLD ; Сбросить DF (инкремент адресов dst и src);
MOV AX, 0000 ; загрузить в
MOV DS, AX ; DS значение сегмента источника;
MOV AX, 3000 ; загрузить в
MOV ES, AX ; ES значение сегмента приемника;
MOV SI, 15ЗС ; загрузить адрес источника;
MOV DI, 5000 ; загрузить адрес приемника;
MOVSW ; переслать два байта;
MOVSW ; переслать два байта;
MOVSB ; переслать байт.
Команда очень удобная для перемещения массивов в памяти. Но если
число цепочки не 5 байтов, и 5000? Очевидно, что нужно организовать цикл.
Как это делается, уже рассматривалось в главе 9. Но фирма Intel усилила
цепочные команды встроенным циклом, который запускается префиксом
повторения. Команда префикса:
а) ассемблер: REP (REPEAT — повторение);
б) КОП = F2 или F3 (любой).
Префикс повторения ставится перед цепочной командой и по умолчанию
использует счетчик в CX; прекращает повторение при CX = 0. Применим в
рассмотренном выше примере префикс повторения:
CLD ; Сбросить DF (инкремент адресов dst и src);
MOV AX, 0000 ; загрузить в
MOV DS, AX ; DS значение сегмента источника;
MOV AX, 3000 ; загрузить в
60
           б) DI:=  ± 2, SI:=  ± 2, если переслали
     слово.
     Примечания
     а) инкремент («+») происходит в том случае, если флаг DF был
сброшен (DF = 0 — нормальное направление) ;
     б) декремент («-») происходит в том случае, если флаг DF был
установлен (DF = 1 — обратное направление; D — DOWN — вниз).
     Установка флага DF производится с помощью специальных команд:
     а) установка флага (DF = 1) производится командой STD, КОП
= FD ;
     б) сброс флага (DF = 0) производится командой CLD, КОП = FС.
     Пример – необходимо переслать 5 байт, начиная с адреса 015ЗС,
на место, начиная с адреса 35000.
     Выделяем, с учетом команды типа MOVS, по своему усмотрению
значения сегментов и адреса в сегментах источника и приемника.
     Адрес источника (src): 015ЗС = 0000:15ЗС;
     Адрес приемника (dst): 35000 = 3000:5000.
 Составляем программу:
     CLD              ; Сбросить DF (инкремент адресов dst и src);
     MOV AX, 0000         ; загрузить в
     MOV DS, AX      ; DS значение сегмента источника;
     MOV AX, 3000         ; загрузить в
     MOV ES, AX          ; ES значение сегмента приемника;
     MOV SI, 15ЗС        ; загрузить адрес источника;
     MOV DI, 5000        ; загрузить адрес приемника;
     MOVSW               ; переслать два байта;
     MOVSW               ; переслать два байта;
     MOVSB               ; переслать байт.

     Команда очень удобная для перемещения массивов в памяти. Но если
число цепочки не 5 байтов, и 5000? Очевидно, что нужно организовать цикл.
Как это делается, уже рассматривалось в главе 9. Но фирма Intel усилила
цепочные команды встроенным циклом, который запускается префиксом
повторения. Команда префикса:
     а) ассемблер: REP (REPEAT — повторение);
     б) КОП = F2 или F3 (любой).
Префикс повторения ставится перед цепочной командой и по умолчанию
использует счетчик в CX; прекращает повторение при CX = 0. Применим в
рассмотренном выше примере префикс повторения:
     CLD           ; Сбросить DF (инкремент адресов dst и src);
     MOV AX, 0000        ; загрузить в
     MOV DS, AX       ; DS значение сегмента источника;
     MOV AX, 3000        ; загрузить в

60