Пытаюсь переводить программу с Паскаля на Си. При попытке компилирования выдается сообщение "Error. Expression Syntax" и курсор указывает на строку, выделенную жирным шрифтом. В версии программы на Паскале все компилируется нормально (ассемблер ведь, вроде бы, для всех одинаковый). Укажите, пожалуйста на ошибку, которую пытается показать компилятор. Заранее спасибо. Используемые версии компиляторов: Turbo Pascal 7, Turbo C 3.0. Код (Text): if (((sb[3] & 0x80) != 0) && (sb[0] >= 4)) { s[48] = 0; asm{ db 0x66, 0xB8; dd 0x80000002; db 0x0F, 0xA2; [b]db 0x66; mov word ptr [s[0]], ax;[/b] db 0x66; mov word ptr [s[3]], bx; db 0x66; mov word ptr [s[7]], cx; db 0x66; mov word ptr [s[11]], dx; db 0x66, 0xB8; dd 0x80000003; db 0x0F, 0xA2; db 0x66; mov word ptr [s[15]], ax; db 0x66; mov word ptr [s[19]], bx; db 0x66; mov word ptr [s[23]], cx; db 0x66; mov word ptr [s[27]], dx; db 0x66, 0xB8; dd 0x80000004; db 0x0F, 0xA2; db 0x66; mov word ptr [s[31]], ax; db 0x66; mov word ptr [s[35]], bx; db 0x66; mov word ptr [s[39]], cx; db 0x66; mov word ptr [s[43]], dx; } printf("Brand String:\n %s\n", s); }
А какая строка тут выделена жирным шрифтом. И не глупо ли переводить с паскаля на си, путем ассемблера?
Жирным шрифтом выделена строка, отмеченная тегами Код (Text): [b][/b] . Уберите одни квадратные скобки в каждой строке.
Sunzer Это которая Код: Vandal +1 KeSqueer в ассемблере x86 нельзя адресоваться по адресу из переменной пишите просто mov word ptr [s+3], ax и т.д.
Не помогло. Убрал лишние скобки в каждой строке, но ошибка при компилировании осталась. Не знаю, насколько это важно, но компилятор ставит указатель не в начале строки, а а промежутке между db и 0x66; пременная s описана, как Код (Text): char s[255];
точка с запятой начинает комментарий, не? кстати, db/dd/dw насколько я знаю во вставках не поддерживаются.
EOT выше по тексту программы еще штук десять ассемблерных вставок с вызовом CPUID. там все вроде нормально. Проблема возникает только в строках с командами с индексной адресацией. Great Точка с запятой начинает комментарий в "чистом" асме. В ассемблерных вставках си точка с запятой отделяет команды, так же как и символ новой строки. И еще вопрос в ту же топку: если закомментировать эти строки, то программа компилируется, но на инструкции CPUID вылетает с криком "NTVDM CPU has encountered an illegal operation". Странно, но не далее, чем два дня назад мне удавалось читать Vendor String с помощью этой инструкции. ОС Windows7 Professional.