Главная страница
    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.033 c
1-1090386061
pavel_pavel
2004-07-21 09:01
2004.08.01
Общение с другой прогой


4-1087415381
juiceman
2004-06-16 23:49
2004.08.01
обработка Enter в ListView


14-1089882872
peypivo
2004-07-15 13:14
2004.08.01
просмотр фильмов


4-1087494991
miwa
2004-06-17 21:56
2004.08.01
SHFileOperation - Cannot read from the source file or disk


14-1089646647
fenster
2004-07-12 19:37
2004.08.01
(Delphi) QuickReport и TPrintDialog





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский