Не работает, потому что инструкция lea предназначена для получения адреса переменной.(+1 к zebarbox для этой заметки.) Нам нужно значение chr, а не его адрес, поэтому мы используем его вместо этого:
movsx eax,chr
Эта псевдоинструкция будет скомпилирована примерно так:
movsx eax,[ebp-4]
Вы также можете написать putchar (chr), поставить точку останова, запустить приложение и посмотреть в окно разборки, чтобы увидеть, как оно скомпилировано.
Обратите внимание, что я использую movsx потому что chr это char, и мне нужен здесь меч.Если бы chr был int, я бы просто использовал инструкцию mov .
Кроме того, вы не можете использовать pop ebx , потому что ebx не должен изменяться здесь.Используйте pop eax или add esp, 4 вместо.