私はこれを理解するのに多くの苦労をしてきました. したがって、私はインライン アセンブリを使用しており、基本的には、ユーザーが Scanf を使用して入力する数値と "$20" という数値を比較しようとしています。
しかし、実際の値ではなく、場所を比較していると思います。
ここに私が持っているものがあります:
asm(
"main: \n"
" \n"
"push $msg \n"
"call _printf \n"
"add $4, %esp \n"
" \n"
"push $gus \n"
"push $fmt \n"
"call _scanf \n"
"add $8, %esp \n"
" \n"
"movl $20, %eax \n"
"movl $gus, %ebx \n"
"cmp %eax, %ebx \n"
"jg lower \n"
"jl higher \n"
" \n"
"lower: \n"
"push $lss \n"
"call _printf \n"
"add $4, %esp \n"
"jmp next \n"
" \n"
"higher: \n"
"push $gtr \n"
"call _printf \n"
"add $4, %esp \n"
"jmp next \n"
" \n"
"next: \n"
"jmp main \n"
"ret \n"
" \n"
".section .data \n"
"msg: .asciz \"Please enter your guess: \" \n"
"gtr: .asciz \"Higher! \" \n"
"lss: .asciz \"Lower! \" \n"
// "crr: .asciz \"Please enter your guess: \" \n"
"fmt: .asciz \"%d\" \n"
".double 100 \n"
".byte 0 \n"
"gus: .double 100 \n"
".byte 0 \n"
);
はい、このコードを実際に使用する意味がないことはわかっています。私がこれを書いている目的は、比較がどのように行われるかを理解することです。
しかし、私の問題は次のとおりです。
"movl $20, %eax \n"
"movl $gus, %ebx \n"
"cmp %eax, %ebx
20 をユーザーが入力した "gus" または "guess" と比較することになっていますが、何を入力しても常に "Lower" と表示されます。