Про случаи значимости длины кода дискутировать пока лень. Код (ASM): 000048B9 8D 3D 00000000 R LEA eDi,[_UpCode] 000048BF BF 00000000 R Mov eDi,of_[_UpCode] Если у вас всегда вперед - это не факт, что он не нужен другим, тем более предусмотрен. У меня в обоих направлениях используется. В W95 API нормально, а для XP даже пришлось макро. Код (ASM): invokeXP Macro Parm:VARARG; ClD ;;здесь написано нехорошее слово по поводу разработчиков XP;; invoke Parm EndM P.S. Это есть в описании WinAPI, но что не фиксируя ошибки может выдаваться дурь - это даже не "нансенс"...
Ну, то что ты его используешь в обоих направлениях, так ты сам виноват, что не возвращаешь его на место и все потом падает. В винде флаг всегда должен быть сброшен, на это рассчитывают все api и самостоятельно его не чекают и не сбрасывают: https://learn.microsoft.com/en-us/cpp/c-runtime-library/direction-flag?view=msvc-170
"Всегда" - это как "ваше политическое кредо?".))) Есть ли ссылки на оф. документы до 2000г.? "Говорю ж ... а" вы "все засахарилось, засахарилось."))) Т.Е. W98 не "винда", а что тогда? В нем-то не замечалось вышеуказанного. "и все потом падает." Не падало, а кривость сразу обнаруживалась, что еще хуже. Мне удобнее не контролировать DF, а устанавливать в ноль с помощью макро invokeXP, так же использую ClD и StD в инициализации цепочного цикла у себя. А вот можно ли DF=1 завалить саму Win из UM не занимался. Код (ASM): ; Mov eCx, 256/8 000048C4 B9 00000100 Mov eCx, 256 ; Подумал может дополните меня 4 вместо 5-и: 000048C9 33 C9 xOr eCx, eCx ; Mov Cl, 256/8 ; при StosQ 000048CB B5 01 Mov Ch, 256/256 ; так для ясности 256 при StosB ; но нет.
Вон выше ссылка на официальное заявление от мс, как устроен их ABI, и каких правил должен придерживаться программист, пишущий под винду. Ни в одной системной библиотеке нет инструкции cld или std, зато повсеместно используется rep stos и rep movs вместо memset и strcpy.
Mikl___, Код (ASM): ; Без цепочек ; если только через eAx, то xOr eAx, eAx poll: Mov B_[mass + eAx],0D3h Inc Al JNZ poll ; иначе xOr eCx, eCx Mov Ch, 256/256 ; так для ясности 256 poll: Mov B_[mass - 1 + eCx],0D3h LoopD poll
они нигде не нумеруются по сути, в ЯП "нумеровка" - синтаксический сахар, все остальное - смещение от начала файла, массива, структуры