Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 2004.08.01;
Скачать: [xml.tar.bz2];

Вниз

Блочное копирование данных   Найти похожие ветки 

 
SergP ©   (2004-07-11 17:17) [0]

Сегодня разглядывая один исходник, натолкнулся на такой кусок кода:

asm
...
@Loop:
   Mov   AL, [ESI]
   Inc   ESI
   mov   [EDI], AL
   Inc   EDI
   Dec   ECX
   Jnz   @Loop
...
end;
Причем подобные решения мне еще встречались в нескольких местах.

Мне пока еще не приходилось интересоваться асмом, поэтому его я не знаю, но меня заинтересовала такая вещь: Неужели у процессора нет команд для блочного копирования данных?
Просто помню что даже у Z80 (если кто помнит Спектрум) они были: (LDIR, LDDR) и они естественно работали быстрее чем тот кусок кода который они могли заменять.
Неужели у камней семейства 8086 (имеется ввиду от 8086 до Пентиума) нет подобных команд?


 
cyborg ©   (2004-07-11 17:55) [1]

Меня тоже эта мысль мучала, интересно бы узнать.


 
DiamondShark ©   (2004-07-11 18:14) [2]

rep movsb

Полный эквивалент приведённого цикла.

А ещё лучше копировать не побайтно, а двойными словами.


 
SergP ©   (2004-07-11 18:19) [3]


>  [2] DiamondShark ©   (11.07.04 18:14)


Значит все-таки есть . А почему же тогда ее никто не использует?


> А ещё лучше копировать не побайтно, а двойными словами.


А насчет двойных слов - хз... А вдруг кол-во байтов не кратно 4 ?


 
SammIk ©   (2004-07-11 18:34) [4]

Она работает медленно, быстрее в цикле копироватся будет.
Есле не кратно, то копируешь пока кратно, потом доляпываешь сколько осталось.
И получается как не странно, быстрее.
В мануалах написано что команды с префиксом реп, ваполняются на пару(или десятком, чето не помню точно) тактов дольше.


 
SammIk ©   (2004-07-11 18:39) [5]

Instruction       Operands            Clock cycles   Pairability

NOP                                     1              uv
MOV                 r/m, r/m/i          1              uv
MOV                 r/m, sr             1              np
MOV                 sr , r/m            >= 2 b)        np
MOV                 m , accum           1              uv h)
XCHG                (E)AX, r            2              np
XCHG                r , r               3              np
XCHG                r , m               >15            np

XLAT                                    4              np
PUSH                r/i                 1              uv
POP                 r                   1              uv
PUSH                m                   2              np
POP                 m                   3              np
PUSH                sr                  1 b)           np
POP                 sr                  >= 3 b)        np
PUSHF                                   3-5            np

POPF                                    4-6            np
PUSHA POPA                              5-9 i)         np
PUSHAD POPAD                            5              np
LAHF SAHF                               2              np
MOVSX MOVZX         r , r/m             3 a)           np
LEA                 r , m               1              uv
LDS LES LFS LGS LSS m                   4 c)           np
ADD SUB AND OR XOR  r , r/i             1              uv

ADD SUB AND OR XOR  r , m               2              uv
ADD SUB AND OR XOR  m , r/i             3              uv
ADC SBB             r , r/i             1              u
ADC SBB             r , m               2              u
ADC SBB             m , r/i             3              u
CMP                 r , r/i             1              uv
CMP                 m , r/i             2              uv
TEST                r , r               1              uv

TEST                m , r               2              uv
TEST                r , i               1              f)
TEST                m , i               2              np
INC DEC             r                   1              uv
INC DEC             m                   3              uv
NEG NOT             r/m                 1/3            np
MUL IMUL            r8/r16/m8/m16       11             np
MUL IMUL            all other versions  9 d)           np

DIV                 r8/m8               17             np
DIV                 r16/m16             25             np
DIV                 r32/m32             41             np
IDIV                r8/m8               22             np
IDIV                r16/m16             30             np
IDIV                r32/m32             46             np
CBW CWDE                                3              np
CWD CDQ                                 2              np

SHR SHL SAR SAL     r , i               1              u
SHR SHL SAR SAL     m , i               3              u
SHR SHL SAR SAL     r/m, CL             4/5            np
ROR ROL RCR RCL     r/m, 1              1/3            u
ROR ROL             r/m, i(><1)         1/3            np
ROR ROL             r/m, CL             4/5            np
RCR RCL             r/m, i(><1)         8/10           np
RCR RCL             r/m, CL             7/9            np

SHLD SHRD           r, i/CL             4 a)           np
SHLD SHRD           m, i/CL             5 a)           np
BT                  r, r/i              4 a)           np
BT                  m, i                4 a)           np
BT                  m, i                9 a)           np
BTR BTS BTC         r, r/i              7 a)           np
BTR BTS BTC         m, i                8 a)           np
BTR BTS BTC         m, r                14 a)          np

BSF BSR             r , r/m             7-73 a)        np
SETcc               r/m                 1/2 a)         np
JMP CALL            short/near          1 e)           v
JMP CALL            far                 >= 3 e)        np
conditional jump    short/near          1/4/5/6 e)     v
CALL JMP            r/m                 2/5 e          np
RETN                                    2/5 e          np
RETN                i                   3/6 e)         np

RETF                                    4/7 e)         np
RETF                i                   5/8 e)         np
J(E)CXZ             short               4-11 e)        np
LOOP                short               5-10 e)        np
BOUND               r , m               8              np
CLC STC CMC CLD STD                     2              np
CLI STI                                 6-9            np
LODS                                    2              np

REP LODS                                7+3*n g)       np
STOS                                    3              np
REP STOS                                10+n g)        np
MOVS                                    4              np
REP MOVS                                12+n g)        np
SCAS                                    4              np
REP(N)E SCAS                            9+4*n g)       np
CMPS                                    5              np

REP(N)E CMPS                            8+4*n g)       np
BSWAP                                   1 a)           np
CPUID                                   13-16 a)       np
RDTSC                                   6-13 a) j)     np


 
jack128 ©   (2004-07-11 19:02) [6]


> А вдруг кол-во байтов не кратно 4 ?
всё что можно копируем двойными словами, а оставшиийся хвост побайтно..


 
DiamondShark ©   (2004-07-11 22:53) [7]


> В мануалах написано что команды с префиксом реп, ваполняются
> на пару(или десятком, чето не помню точно) тактов дольше.

Дольше чем что?


 
SergP ©   (2004-07-12 01:59) [8]


>  [7] DiamondShark ©   (11.07.04 22:53)
>
> > В мануалах написано что команды с префиксом реп, ваполняются
>
> > на пару(или десятком, чето не помню точно) тактов дольше.
>
> Дольше чем что?


Может он имел ввиду сабжевый код?
Хотя я сомневаюсь. В таком случае зачем Intel вообще тогда сделал эти команды в процессоре?



Страницы: 1 вся ветка

Форум: "Потрепаться";
Текущий архив: 2004.08.01;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.51 MB
Время: 0.028 c
3-1089185451
onics
2004-07-07 11:30
2004.08.01
Запись в поле numeric 15.3


11-1077998244
hermit
2004-02-28 22:57
2004.08.01
Вопрос по KOL Memo


14-1089887417
vecna
2004-07-15 14:30
2004.08.01
Расшифровка протеста


3-1089140159
Zhekson
2004-07-06 22:55
2004.08.01
Фильтрация по полю второстепенной таблицы.


1-1090194730
drTr0jan
2004-07-19 03:52
2004.08.01
Не могу создать массив





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский