Вот столкнулся с проблемой, win32 приложение вызывая ASM функцию выдаёт ошибку! Может нужно ещё какой то регистер спрятать в стэк? без возвращения значения ошибки нет...
Я понял что ругается не на АСМ код, ошибка происходит на закоментированных строках. Ошибка типа: "попытка чтения по какому то там адресу..." neg 2 раза для того чтобы найти чётный ASKII символ(не изменяя его), ну а потом взвести в нём старший неиспользуемый бит(and al,0x80)...
Не, ошибка не в закоментированных участках. В этих участках происходит обращение по левому адресу, но это другое дело. Ошибка в формировании этого самого адреса - либо строки buf, либо индекса i. Т.е. либо индекс выходит за границы строки, причём довольно далеко, т.к. добирается до нераспределённых участков памяти, либо адрес buf сразу кривой. Запускаешь под отладчиком и убеждаешься... А про neg я так и не понял. У меня на машине neg al меняет в al биты 1 на 0, а 0 на 1. И всё. Т.е. два neg-а подряд просто вернут в al то, что там было. Как ты при этом умудряешься "найти символы с четным количеством битов" я не понял. В твоём асмовом коде нет ни одного условного перехода, так что не ясно, где именно символы с чётным количеством битов отделются от символов с нечётным количеством битов. Кроме того, and al, 0x80 это не совсем установка старшего разряда. Установкой будет or al, 0x80.
Правильно, это инверсия разрядов регистра al! Но ещё эта команда устанавливает Parity Flag (флаг чётности) в регистре флагов, в зависимости от результата выполнения. полный код:
Tohey Правильно, но еще флаг PF устанавливает куча других операций, не изменяющих регистр AL, в частности test al,al и cmp al,0
Спасибо, теперь буду знать и перепишу на test. А вообще я за скоростью не гоняюсь и просто впихнул первую попавшуюся из списка команду которая меняет PF...
я дико извеняюсь перед всеми за невыполнимую и грубую ошибку : Раздел вроде для новичков, а ракритиковали по полной.
дело в том, что, хотя между новичком и полным тупицей знака равенства нет, такое чувство, что большинство авторов топиков в BEGINNERS соревнуются в создании самых тупых топиков, показывая при этом полное отсутствие мозгов, вот народ и привык к такому положению дел и реагирует соответственно даже на вполне нормальные топики.
А, ну тогда извиняй... А на будущее так сказать, если видишь что-то вроде: Код (Text): jne NE je Equal Делай лучше: Код (Text): jne NE jmp Equal Ну или что-то в этом роде - скорость она тоже важна, да и просто не люблю грузить проц...