Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 将字符串传递给外部汇编函数_C_Assembly_X86_Att - Fatal编程技术网

C 将字符串传递给外部汇编函数

C 将字符串传递给外部汇编函数,c,assembly,x86,att,C,Assembly,X86,Att,我想学一些汇编语言。 我的目标是创建一个外部汇编函数,它能够读取字符数组,转换为int,然后执行各种操作,只是为了学习一些东西 我做了很多证明,但我想我没有抓住要点 代码: 我觉得奇怪的是: 当我使用时,就像在这种情况下 printf("GAS said: %c\n", foo(array)); 正如预期的那样,产量为:0 基于此,我还期望随着以下因素的变化: printf("GAS said: %i\n", foo(array)); 将输出气体说:48,但相反,我得到一些随机地址返回 另外

我想学一些汇编语言。 我的目标是创建一个外部汇编函数,它能够读取字符数组,转换为int,然后执行各种操作,只是为了学习一些东西

我做了很多证明,但我想我没有抓住要点

代码:

我觉得奇怪的是: 当我使用时,就像在这种情况下

printf("GAS said: %c\n", foo(array));
正如预期的那样,产量为:0

基于此,我还期望随着以下因素的变化:

printf("GAS said: %i\n", foo(array));
将输出气体说:48,但相反,我得到一些随机地址返回

另外,在汇编文件中,我无法解释为什么我尝试

cmpl $48, %eax
je LABEL 
跳跃永远不会发生

我唯一能想到的是大小有问题,因为int取4B,char只取1B,但我不太确定


那么,在这种情况下,如何使用compare并将int返回到main?

movl(%eax),%eax
将eax中地址处的4个字节移动到寄存器eax,而不仅仅是一个字符。如果您想使用所有EAX来保存一个字符,您可以执行
movzxb(%EAX),%EAX
,它将移动一个字节并将其零扩展到32位寄存器EAX。或者,您可以执行
movb(%EAX),%al
,将单个字节移动到寄存器al(al是EAX的低位字节)。但是你需要比较的只是值AL,而不是整个32位寄存器EAX。你写的代码是32位的,所以我希望你不要编译和汇编为64位代码。我使用的是64位机器,但我使用的是选项--32和gcc-m32来汇编32位代码。谢谢你的建议!现在一切都好了
printf("GAS said: %i\n", foo(array));
cmpl $48, %eax
je LABEL