Во-первых, респекты авторам сего труда. Вот вопрос... почему так: Код (Text): ---------------------------- MAIN proc xor AL,AL mov BH,10h mov CH,5 mov CL,10h mov DH,10h mov DL,3Eh mov AH,6 int 10h call WINDOW call WINDOW call WINDOW call WINDOW int 20h MAIN endp WINDOW proc ADD BH,10h ADD CH,1 ADD CL,1 SUB DH,1 SUB DL,1 INT 10h RET WINDOW endp -------------------------- почему не пишут так... (ведь.. вроде байт экономиться %) MAIN proc mov AX,0600h mov BH,10h mov CX,0510h mov DX,103Eh int 10h call WINDOW call WINDOW call WINDOW call WINDOW int 20h MAIN endp WINDOW proc ADD BH,10h ADD CX,0101h SUB DX,0101h INT 10h RET WINDOW endp -------------------------- Не понятно зачем писать XOR если понятней MOV??? И почему CH,CL а не сразу CX... и AX..., и DX...???? Я интуитивно чувствую что для читабельности XOR дань традиции, но требуется мнение Мастера ДЗЭН)))) Без этого вся медитация ломается после сокрушения пустоты))))) Заранее спасибо
Если ты имеешь ввиду почему Код (Text): xor reg,reg вместо Код (Text): mov reg,0 то взгляни на машинный код и ты все поймешь А на счёт Думаю это для того чтобы понятно было.
Он и так всё понял =) В общем ты прав, ни по размеру кода ни по скорости первый пример не лучше, даже хуже, зато читать проще. =)
Я тупой.... поэтому не понял...)))) Приношу свои извинения за въе*ливость XOR это же логическая операция сравнения.... или/или... которая даёт 0 если операнды равны??? Нихрена не понял, извините.... Зачем вообще включать в незатейливую программульку логическую операцию??? Про СX,AX,DX эт понятно... но вот XOR выедает мне мозг)))) посмотрел код, нихрен на понял... т.е. трассировка всеравно начинается с MOV BH,10h или я не туда смотрел...
Это может только новичкам не понятно, а вообще то это стандартный способ очистки регистра. В общем случае XOR это исключающее ИЛИ, поэтому xor r,r обнуляет регистр r. А в современных суперскалярных компах операции xor r,r и sub r,r к тому же имеют специальную аппаратную поддержку (признак очистки регистра и независимость от его пред.состояния), поэтому mov r,0 практически никто и не использует, тем более в 32-битном коде
Ужас. Да таких заумных слов типа люди не понимают. Я, например, воспринимаю это, как попытку запудрить мозги. Нельзя ли сказать проще: xor ax, ax - два байта mov ax, 0 - три байта. (ну и, соответственно, тактов во втором варианте тоже больше будет) Вот и все.
l_inc За исключением отдельных специфических случаев число тактов будет одинаково. А вот inc\dec наоборот короче add\sub, но их "почему-то" рекомендуют избегать, а в 64-битном режиме AMD64\EM64T (о, ужас !) их и восве "отменили". Еще пимер test r,r и or r,r имеют одинаковый размер, но для проверки регистра на ноль test предпочтительнее - к чему бы это Объяснять не буду, т.к. "таких заумных слов" отдельные "люди не понимают" )
Просто уметь объяснять, а не уметь показать свои знания, нужно. И причем здесь вообще эта информация? Надо понимать, чтобы повыпендриваться. К тому же не понятно зачем сравнивать test и or. Если не считать, что or кроме флагов меняет еще и значения аргументов (для проверки на ноль действительно считать не надо), то test работает по алгоритму and (хотя приведение сравнения and и test было бы тоже не оправдано, так как вопроса на эту тему не было). P.S. Признаю свою ошибку. Тактов действительно одинаково (по одному, как написано в справочнике).
Я так и думал... не более чем условность и привычка автора. Я не против как человек привык так пусть и кодит... )))
l_inc Для начала тебе стоило бы заглянуть в правила форума, усвоить правила хрошего тона и научиться отвечать по существу, а не давать психоаналитические оценки другим участникам - здесь не институт психиатрии и не суд присяжных заседателей Если тебя тошнит от слова "суперскалярный", то извини - могу сказать "современный" (хотя что считать современным не понятно, а суперскалярными являются все х86, начиная с Pentium Pro). Ну так почему же для очистки регистра рекомедуется использовать xor, а не mov. Ну ес-но потому, что xor в 16\32-битном варианте короче, чем mov (как говориться это и козе понятно . Но теперь допустим "мы все учились понемногу..." и где-то что-то слышали о суперскалярности современных компов, о том что они могут выполнять несколько независимых операций параллельно и "аггрессивно" переупорядочивать инструкции так, что последующие независимые операции могут выполняться раньше предыдущих. В этом случае вроде получается, что mov предпочтительнее xor, т.к. mov ни от чего не зависит, а xor в общем случае "вроде как" зависит от установки значения в регистре и "вроде как" не может выполняться одновременно или раньше операций, изменяющих этот регистр. Но добрые дяди из Intel и AMD предусмотрели эту ситуацию и ввели спецподдержку операций xor r,r и sub r,r - процессор считает их независимыми от пред.значения регистра и может выполнять в любой подходяшщий момент, как и mov. Поэтому на современных компах xor r,r возведена в ранг спецоперации для очистки регистра - благодаря малому размеру + спецподдержки со стороны процессора и это кстати подчеркивается во всех мануалах по оптимизации. Можно было бы еще припомнить проблему partial register stall (о, ужас !) в первых компах семейства P6, где xor и sub имеют еще бОльшее значение, т.к. они в отличие от mov r,0 помечают регистр свободным и устраняют большие задержки при чтении AX\EAX после записи в AL\AH. Но все эти "выпендривания" я привожу только ради того, чтобы уточнить - дело не только в размере инструкций, а в том, что в "современных" компах инструкция xor r,r является не просто "логической операцией", а официально узаконенным и рекомедуемым всеми мануалами способом очистки регистра PS: Если соберешься ответить, то просьба - поменьше психоаналитики и побольше конструктива "Блистать знаниями" тут не не возбраняется и лишь приветствуется, а за флуд и навешивание ярлыков можно и в персона-нон-грата угодить MayBe Если ты об использовании xor, то я уже ответил - это общепринятый метод очистки регистра. Не веришь - загляни в мануалы по оптимизации от Intel и AMD Если же о раздельной установке AL\AH вместо записи в AX, то да - это причуда автора
Что... это... о... кажется я знаю это чувство.... Господа... НИРВАНА.... Исчерпывающий ответ!!! От души благодарен! Можно считать что тема закрыта.