我正在尝试学习一些汇编。 我的目标是创建一个外部汇编函数,该函数能够读取char数组,转换为int,然后执行各种操作,只是为了学习一些东西。
我已经做了很多证明,但我想我没有抓住重点
代码:
#include <stdio.h>
#define SIZE 5
extern int foo(char array[]);
int main(void){
char array[SIZE]={'0','1','1','0','1'};
printf("GAS said: %c\n", foo(array));
return 0;
}
程序集:
.data
.text
.global foo
foo:
pushl %ebp
movl %esp, %ebp
movl 8(%esp), %eax #saving in eax the pointer of the array
movl (%eax), %eax #saving in eax the first char of the array
popl %ebp
ret
对我来说奇怪的是在这里: 当我使用这种情况下
printf("GAS said: %c\n", foo(array));
正如预期的那样,GAS输出为:0
基于此,我还期望随着以下内容的改变:
printf("GAS said: %i\n", foo(array));
将输出GAS:48,但我却返回了一些随机地址。
此外,在汇编文件中,我无法解释为什么我尝试
cmpl $48, %eax
je LABEL
跳跃将永远不会发生。
我唯一能想到的是大小上的问题,因为int仅占用4B,而char只占用1B,但是我不确定。
那么,在这种情况下,如何使用compare并将int返回给main?