>>470 をコンパイルしてできるコード(foo の部分だけ)です(gcc on Linux)
pushl %ebp
movl %esp,%ebp
subl $8,%esp
addl $-12,%esp
movsbl 8(%ebp),%eax
pushl %eax
call foo
movsbl %al,%eax
leave
ret
ここの movsbl ってのか char -> int 変換だと思うんですが、違います?