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

时间:2018-07-08 20:19:53

标签: c assembly x86 att

我正在尝试学习一些汇编。 我的目标是创建一个外部汇编函数,该函数能够读取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?

0 个答案:

没有答案