- 1
- 2
xor eax, eax
mov al, 0
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+225
xor eax, eax
mov al, 0
mov al,0 нужен, чтобы переместить ноль в al, то есть чтобы освободить память, где раньше находился этот ноль.
То есть этот ГК обнуляет регистр и освобождает один байт памяти.
Есть варианты, как это сделать за меньшее число команд?
Где раньше находился 0
А где он собственно находился??? Вы что курите?
И собственно да, это скорее для выранивания сделано каким-нить компилятором.
Ваш кжп.
ps: посмотри сериал "повторная загрузка (reboot)" там и вирусы-рак и нули и прочая компьютерная хуйня
ззы: сюжет начинается со второго сезона.
а что, идея, заменить интернет-быдло компактным и экономичным микрокодом
Какой, на х*й, ноль? А там, где был ноль, станет пусто! Вообще ничего там не будет! Ахахах хДДД 3,14здец как-то.
Mov пишет куда-то что-то, а не безвозвратно перемещает откуда-то. А учитывая, что уже лет сто как принято, что пустая ячейка - это ячейка с "0" внутри, то здесь идет просто обнуление регистра al.
Программист, ёп твою мать.
от чего освободить? О.о
Объясните пожалуйста, что же будет там находится после того, как мы освободим его от информации?
Похоже, нет. Не говоря уже о том, что MOV - это не перемещение, а копирование :)
Abort? Retry? Ignore?
Всё, уходи. Поговорим после, когда получишь необходимые знания.
А про освобождение памяти я тебе уже всё сказал, просто до тебя не дошло. Жаль.
*плюясь, удаляется*
Нет, вы серьезно уверены? А на Кнуте поклясться можете?
Вот из-за таких, как ты, программы глючат и текут.
откуда им про память знать...
Вы ведь все равно не поверите, что я знаю что такое регистры, стек, очередь команд итд, а не только что их прочитал в педивикии.
А хотя стоп, есть способ.
Среда: чистый x86 DOS (хотя это не важно). Сколько байт занимает самая короткая программа? И почему?
как я это получил?
наличные, чек или перевод?
го обратно в педивикию, о результатах доложите
Сказать вам нечего, а троллить окружающих хочется.
Продолжим, когда Вы хотя бы попытаетесь ответить на мой вопрос. Пока что вижу дитё, упоённо троллящее всех вокруг.
Число я привёл, а поскольку "экзаменовать" меня не всякому унтерменшу позволено - обоснование за вами.
Зная это, в 99% случаев отвечают: "2 байта" - "int 20h"
Но и этот ответ неверен.
Не пытайтесь пожалуйста переложить ответственность за свои ошибки на меня.
SP при старте указывает на 0FFFFh.
По адресу CS:0FFFFh лежат нули.
По адресу CS:0000h лежит int 20h.
:-D :-D :-D
Для DOS минимальный размер программы смещение 100h для PSP + sizeof(команда ассемблера RETF). В стеке всегда, но только для COM-программ, лежит адрес возврата в систему.
Да, копирование нуля абсолютно бесполезно, и может быть тупняком компилятора, но если в дальнейшем коде в al помещаются другие величины, а используется весь eax, то смысл есть. Ну и само собой, выравнивание, о котором судить из данных двух строк невозможно.
Поэтому - контекст где???
Ничего себе я отстал...
Кстати, не знакорасширения, а 0-расширения, я написал неаккуратно.
Речь идет о внутренней оптимизации архитектуры, которая при обнулении регистра командой sub или xor заставляет процессор считать операции, меняющие младшие 8 битов регитра, меняющими весь регистр. В противном же случае это не так, и микрооперация, читающая из 32-битного регистра, будет ждать прохождения микрооперации записи в младший байт почти через весь конвейер. Вот такое вот объяснение "на пальцах".
без этой оптимизации xor eax,eax + mov al,[ebx] + add edx,eax была бы по прежнему эквивалентна movzx eax, BYTE PTR [ebx] + add edx, eax , но тормозила бы значительно больше. Если обнулить регистр eax более экзотическим способом, появятся лишние вполне заметные тормоза на подверженных этой проблеме процессорах.
Операции inc/dec (писал в комментариях к другому посту) вызывает(вызывала?) сходную проблему из за того, что не меняет CF, но меняет остальные арифметические флаги.
>ассемблер под х86 - это уже хитрожопый ЯП с нюансами
не знаю, как у тебя в дельфи, а вот в нормальных языках высокого уровня делают так, что-бы без нюансов.
делают так, что-бы не задумываться об архитектуре и прочих мелочах, а просто записывать алгоритм.
"с нюансами" - это обычно как раз признак ассемблера или недоЯП
Функциональная илита пришла? Здравствуйте, садитесь.
или эта
>Здравствуйте, садитесь
а ты постоишь
Можно поподробнее? Что это такое?
>partial register stall
Почему это возникает? И что это?
Спасибо!