我在解决这个问题时遇到了很多麻烦。因此,我使用内联汇编,并且基本上尝试将用户在使用 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”或用户输入的“猜测”进行比较。但无论他们输入什么,它总是显示“较低”。
最佳答案
在比较之前,您将 gus
的地址(而不是其值)加载到 EBX。
你更大的问题是你试图用内联汇编做太多事情。
你想在 assembly 中进行比较吗?很好,比较一下。但为什么要调用 printf
和 scanf
以及其他所有函数呢?
关于c - 如何将数据与内联汇编进行比较?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10987819/