Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.08.01;
Скачать: CL | DM;

Вниз

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

 
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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.025 c
14-1089911702
Kalinich
2004-07-15 21:15
2004.08.01
*bat и пробелы


3-1089375927
Sergey_
2004-07-09 16:25
2004.08.01
Время из TimeStamp


3-1089106576
RainKM
2004-07-06 13:36
2004.08.01
Paradox


1-1090311246
SerKom
2004-07-20 12:14
2004.08.01
чтобы активный контрол был по центру ScrollBox а (по вертикали),


4-1087485156
Brenagwynn
2004-06-17 19:12
2004.08.01
Прием ссылок из эксплорера