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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.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 从NASM函数返回字符数组_C_Linux_Nasm - Fatal编程技术网

C 从NASM函数返回字符数组

C 从NASM函数返回字符数组,c,linux,nasm,C,Linux,Nasm,为了在NASM中练习,我试着做以下几点: 1) 在C中从命令行读取字符串 2) 将该字符串传递给NASM函数,该函数将该字符串作为其第一个参数 3) 从NASM函数返回精确的字符串 prefix.asm: ;nasm -f elf32 prefix.asm -o prefix.o segment .bss pre resb 256 segment .text global prefix prefix: push ebp ;save the old

为了在NASM中练习,我试着做以下几点:

1) 在C中从命令行读取字符串

2) 将该字符串传递给NASM函数,该函数将该字符串作为其第一个参数

3) 从NASM函数返回精确的字符串

prefix.asm:

;nasm -f elf32 prefix.asm -o prefix.o

segment .bss
pre resb 256

segment .text
global prefix

    prefix:
        push ebp          ;save the old base pointer value
        mov  ebp,esp      ;base pointer <- stack pointer

        mov eax,[ebp+8]   ;function argument

        add esp, 4
        pop ebp
        ret
;nasm-f elf32 prefix.asm-o prefix.o
第2部分:bss
预resb 256
段.文本
全局前缀
前缀:
推动ebp;保存旧的基指针值

mov-ebp,esp;基本指针首先尝试编写一个C程序来实现
char*prefix(char*str)
,分解它并理解它

问题1:应删除
添加esp,4
。函数应该保留堆栈指针。也就是说,
esp
在第一条指令之前和返回指令之前应该相同。您的汇编代码将esp增加4


问题2:不要将您的
.asm
.c
命名为相同的名称。使用不同的名称。

对问题投否决票的原因是什么?
//nasm -f elf32 prefix.asm -o prefix.o
//gcc prefix.c prefix.o -o prefix -m32
#include <stdio.h>
#include <string.h>

char* prefix(char *str);

int main(void)
{
    char str[256];
    char* pre;
    int a;

    printf("Enter string: ");
    scanf("%s" , str) ;
    pre = prefix(str);
    printf("Prefix array: %s\n", pre);
    return 0;
}