Хоть баян, но интересно, никогда реально не сталкивался. Сначала не понял почему код криво работает, оказывается нужно было выровнить в памяти строку. Описан баг в спецификации(24919969.pdf) как: Записал скрин: http://openfile.ru/162919/
Table 1.Latency of Repeated String Instructions Код (Text): Instruction ECX=0 (cycles) DF = 0 (cycles) DF = 1 (cycles) REP MOVS 11 15 + (4/3*c) 25 + (4/3*c) REP STOS 11 14 + (1*c) 24 + (1*c) REP LODS 11 15 + (2*c) 15 + (2*c) REP SCAS 11 15 + (5/2*c) 15 + (5/2*c) REP CMPS 11 16 + (10/3*c) 16 + (10/3*c) Note: c = value of ECX, (ECX > 0) Интересно, что латентность movs и stos на 10 тактов больше при установленом флаге направления.
SII официально да, но AMD одно время его рекомендавала использовать так: rep ret, что и делают некоторые программисты и по сей день (давеча был разговор)
asmfan Это как? То есть Код (Text): call a a: call b b: call c c: mov ecx,3 rep ret при выполнении rep ret произойдёт переход на a:
rep к ret ничего более, чем хинт АМДшному процессору к правильному предсказанию в нек-рых случаях. уже не рекомендуют использовать это. раньше было.