Здраствуйте. У меня есть нестандартная проблема.
Мне нужно в текст программы на с++ вставить ассемблерную вставку. А если быть точнее, то стандартные функции strcmp, strcpy и strlen.
Помогите это реализовать.
Здравствуйте, ssyrik, Вы писали:
S>Здраствуйте. У меня есть нестандартная проблема.
S>Мне нужно в текст программы на с++ вставить ассемблерную вставку. А если быть точнее, то стандартные функции strcmp, strcpy и strlen.
S>Помогите это реализовать.
А проблема-то в чем?
Если вставить ассемблерную вставку в код, то это вот так:
asm{
xor eax,eax
mov eax,[eax]
}
Если релизоавть strcpy, то это зависит от многих факторов, в частности под какой процессор и какие требования. В простейшем варианте(x86) это что-то типа:
asm{
cld
mov esi,src
mov edi,dest
mov ecx,-1
repnz movsb
}
WARNING: очень неэффективно, в реальности по вопросам копирования блоков памяти написаны целые главы
--
Sergey Chadov
... << RSDN@Home 1.2.0 alpha rev. 685>>
Ну первоначально идея состояла в том, чтобы вставить уже написаные файлы из библиотек.
Но я уже бросил заниматься этим.
Написал обычную функцию того же сравнения строк.
Дизассемблировал.
Оптимизировал.
И все прекрасно работает.
Просто преподаватель странный. Я ему показываю, что функция написана на ассемблере, просто в коде ее нету, а он мне говорит, что ему нужно, чтобы он видел эту функцию в самой программе.
Всем спасибо. Вопрос отпал.
K13>А в чем сакральный смысл именно ассемблера вместо обычного Си-кода?
Как бы это смешно не казалось, но никакого.
У меня стоит задание на курсовую — разработка транслятора подмножества команд ассемблера. Ну я и написал.
А как потом оказалось, половина кода должна быть именно на ассемблере. Сколько бы я не возмущался, меня заставили переделывать