Я не хорош ни во встроенной сборке, ни в синтаксисе MASM, но вот несколько советов:
1) Попробуйте это:
mov eax, num1 ;// eax points to the beggining of the string
movsx eax, [eax + some_index] ;// movsx puts the char num1[some_index] in eax with sign extend.
(movzx для unsigned char, поэтому мы использовали movsx)
2) Вам нужно передать значение от eax
до C. Самый простой способ - объявить переменную и поместить в нее результаты: int rez; __asm { mov rez, eax; };
3) Если вы хотите написать всю функцию в сборке, вам следует подумать об использовании ключевого слова naked
(и прочитать о соглашениях о вызовах). Если нет, убедитесь, что вы сохранили регистры и не повредите стек.