Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: komnda REP i REPE i REPNE  (Прочитано 18747 раз)
0 Пользователей и 1 Гость смотрят эту тему.
rapa
Гость
« : 11-07-2004 09:38 » 

Narod esli vy eshe ne ponyali ya student i tol'ko "uchus" ,tak sho sorry
za tupye voprosy

Ya chital v knige prokomandy REP,REPE,REPZE i ne ochen' ponyal dlya chego oni nujny.Naprime o komade REPE est' primer REPE CMPSB
t.e. vo vremya sravneniya,a chto esli REPE idet s drugimi komandani so
stringami(kstati kak "string"-na russkom?)?
V obshem narod esli ne trudno obyasnite,pls
  Zaranee spasibo
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #1 : 11-07-2004 10:53 » 

rapa, нифига страшного Ага - вопросы у тебя вовсе не тупые, прекрати комплексовать

я сам тут такие задавал, что ты бы хохоталься  Отлично

 :arrow:
string  [strIN] (pt, pp strung) n верёвка; (row: of onions) связка; (: of islands) цепь f; (: of cars, people) вереница; (series: of disasters) серия; (: of excuses) поток; (comput) строка, цепочка; (mus: for guitar etc) струна
Ё vt: to ~ together связывать (связать perf); the ~s npl (mus: section of orchestra) струнные инструменты mpl; to ~ out растягивать (растянуть perf); a ~ of beads бусы; to pull ~s (fig) использовать (impf/perf) связи; with no ~s attached (fig) без дополнительных условий.

 :arrow: тут имеется в виду - строка это цепочка элементов, например - байт (8-битные числа), или слов(16-битные числа) или двойных слов (32-битные). Хотя в принципе - можно хоть к чему это применить, но в проце аппаратно на уровне команд поддерживаются эти три типа элементов.

 :arrow: щас открою умную книгу - разберусь и расскажу дальше Улыбаюсь
Записан

Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #2 : 11-07-2004 12:20 » 

книга -
 "Assembler", Виктор Юров, издательство "Питер"
(к ней, кстати, есть ещё две книги -
"Assembler. Специальный справочник" и
"Assembler. Практикум")

 :arrow:
оказалось не так уж всё и сложно, как мне самому вначале показалось, хотя некоторый груз наблюдается Улыбаюсь . Но говорить придётся не только про префиксы повторения rep и иже, а про цепочечные команды.

этих команд семь. Принцип работы одинаков и для работающих с 8-битными числами, и с 16 и 32. Мнемоники этих команд отличаются только символом на конце - "b", "w" или "d".
(например: movsb, movsw, movsd)

вот эти команды:

Код:

1: movs [i(адрес_приёмника,адрес_источника[/i(
2: cpms [i(адрес_приёмника,адрес_источника[/i(
3: scas [i(адрес_приёмника[/i(
4: lods [i(адрес_источника[/i(
5: stos [i(адрес_приёмника[/i(
6: ins [i(адрес_приёмника,номер_порта[/i(
7: outs [i(номер_порта,адрес_источника[/i(


адрес_приёмника - пара es:di
адрес_источника - пара ds:si (не только ds, но сейчас это неважно)

сама по себе цепочечная команда (без префикса) выполняется один раз:
   movsb   ad2,ad1   ;пересылает байт

Если у мнемокоманды добавлен в конце символ "b", "w" или "d", то операнды "адрес_приёмника, адрес_источника" указывать в мнемокоманде не обязательно, так как они используются компилятором лишь для определения типа элементов цепочки.
Это связано с тем, что адреса формирутся в регистрах es:di и ds:si, и перед выполнением цепочечных команд программист должен обеспечить правильную настройку этих регистров на нужные адреса.

поэтому
   movs   ad2,ad1
будет эквивалентно
   movsb
при правильной настройке es:di и ds:si.
_____________________________________________________________
если в поле метки поставить префикс, то цепочечная команда будет повторно выполняться до тех пор, пока не будет достигнуто условие, отслеживаемое префиксом. Пример установки префикса:

rep   movsb   ad2,ad1   ;пересылает строку байт (в общем случае)

Префиксов всего три:

1) rep
2) repz  или  repe
3) repnz  или  repne

1) rep - заставляет цепочечную команду выполняться до тех пор, пока содержимое регистра cx не равно нулю.
алгоритм работы rep следующий:
1. проверяет cx - если cx равен нулю, то прекращает выполнение цикла и переходит к выполнению команды, следующей за цепочечной командой
2. иначе (если cx<>0 ) выполняет один раз цепочечную команду (при этом - сдвигаются адреса источников и приёмников в соответствии с работой самих цеп.команд), затем уменьшает на единицу регистр cx
3. переходит к выполнению шага 1.


2)  repz - заставляет цепочечную команду выполняться до тех пор, пока содержимое регистра cx не равно нулю или флаг нуля zf равен 1 (установлен).
алгоритм работы repz следующий:
1. если cx равен нулю и флаг zf равен нулю (сброшен), то прекращает выполнение цикла и переходит к выполнению команды, следующей за цепочечной командой
2. иначе (если cx<>0 или zf==1) выполняет один раз цепочечную команду (при этом - сдвигаются адреса источников и приёмников в соответствии с работой самих цеп.команд), затем уменьшает на единицу регистр cx
3. переходит к выполнению шага 1.

3)  repnz - заставляет цепочечную команду выполняться до тех пор, пока содержимое регистра cx не равно нулю или флаг нуля zf равен 0 (сброшен).
алгоритм работы repz следующий:
1. если cx равен нулю и флаг zf равен 1 (установлен), то прекращает выполнение цикла и переходит к выполнению команды, следующей за цепочечной командой
2. иначе (если cx<>0 или zf==0) выполняет один раз цепочечную команду (при этом - сдвигаются адреса источников и приёмников в соответствии с работой самих цеп.команд), затем уменьшает на единицу регистр cx
3. переходит к выполнению шага 1.
Записан

rapa
Гость
« Ответ #3 : 11-07-2004 15:27 » 

Алексей1153,
Spasibo "brat"-eyn kamoha(you are the best) Отлично  Отлично  Отлично  Отлично  8)  8)  8)
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #4 : 11-07-2004 16:00 » 

Цитата

"brat"-eyn kamoha


зачем ругаться непонятными словами? Ага
Записан

Anonymous
Гость
« Ответ #5 : 11-07-2004 16:21 » 

Алексей1153,
Izvini u menya nailuchshie pojelaniya,t.d. i t.p nu vobobshejm
"you good you"-
Записан
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #6 : 11-07-2004 16:37 » 

Алексей1153,  Это он хотел сказать, Что нет человека лучше тебя.rapa, пожалуйста, не все понимают язык. Если есть возможность, то пиши только по русски.
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #7 : 11-07-2004 17:26 » 

:oops:

rapa, да я шутю! Ага  Английский-то я понимаю Улыбаюсь

зато я узнал сегодня, что такое префиксы повторения  8)
Записан

KBAC
Постоялец

ru
Offline Offline
Пол: Мужской

« Ответ #8 : 14-05-2012 12:02 » 

На мой взгляд команда LODS именно как цепочечная операция абсолютно бессмысленна.
Цитата
Копирует один байт (LODSB), слово (LODSW) или двойное слово (LODSD) из памяти по адресу DS:ESI (или DS:SI, в зависимости от разрядности адреса) в регистр AL, АХ или ЕАХ соответственно. При использовании формы записи LODS ассемблер сам определяет из типа указанного операнда (принято указывать имя строки, но можно использовать любой операнд подходящего типа), какую из трех форм этой команды (LODSB, LODSW или LODSD) выбрать. Используя LODS с операндом, можно заменить регистр DS на другой с помощью префикса замены сегмента (ES:, GS:, FS:, CS:, SS:). После выполнения команды регистр ESI (SI) увеличивается на 1, 2 или 4 (если считывается байт, слово или двойное слово), если флаг DF = 0, и уменьшается, если DF = 1. При использовании с префиксом REP команда LODS выполнит копирование строки длиной в ЕСХ (или СХ), что приведет к тому, что в аккумуляторе окажется последний элемент строки. На самом деле эту команду используют без префиксов, часто внутри цикла в паре с командой STOS, так что LODS считывает число, другие команды выполняют над ним какие-нибудь действия, а затем STOS записывает измененное число в то же место в памяти.
Записан

У тебя все получится, главное -- верить и делать.
Порадоваться, когда все плохо -- легче, чем ты думаешь.
В действии счастье.
Вовлекая людей важно быть увлеченным чужой жизнью.
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #9 : 14-05-2012 12:26 » new

KBAC, если она за раз делает копирование и инкремент, и это по тактам выходит быстрее, чем соответствующая комбинация более простых операций, то смысл есть.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines