小编UNK*_*UNK的帖子

用qemu运行二进制文件

我在一门课程中正在学习手臂汇编语言。我入门没有什么问题。我写了一个简单的C代码:

int main()
{
    int a = 10;
    int b = 20;
    int c = a+b;
}
Run Code Online (Sandbox Code Playgroud)

然后通过使用以下命令,使用gnu arm将其转换为汇编代码:

arm-elf-gcc -S first.c
Run Code Online (Sandbox Code Playgroud)

这首先生成一个包含汇编代码的文件:

    .file   "first.c"
    .text
    .align  2
    .global main
    .type   main, %function
main:
    @ args = 0, pretend = 0, frame = 12
    @ frame_needed = 1, uses_anonymous_args = 0
    mov ip, sp
    stmfd   sp!, {fp, ip, lr, pc}
    sub fp, ip, #4
    sub sp, sp, #12
    mov r3, #10
    str r3, [fp, #-16]
    mov r3, #20
    str r3, …
Run Code Online (Sandbox Code Playgroud)

assembly arm qemu

5
推荐指数
1
解决办法
9744
查看次数

C到arm汇编代码转换

我在c中编写了一个程序并将其转换为arm程序集,现在我在理解汇编代码中生成的某些指令时遇到了问题.C程序的一部分是:

#define MAX_DIGIT 1024
int main()
{
    int fd[MAX_DIGIT];
    int xLen = 0;
    int sd[MAX_DIGIT];
    int yLen = 0;

    int result[6*MAX_DIGIT];

    // Take input for two numbers
    takeInput(fd, &xLen);
    takeInput(sd, &yLen);   
        ...
        ...
        ...
}
...
...
...

void takeInput(int digit[], int *length)
{
    char c;
    if((c=getchar()) != '\n' && *length <= MAX_DIGIT){
        takeInput(digit, length);
        digit[*length] = c - '0';
        (*length)++;
    }else return;
}
Run Code Online (Sandbox Code Playgroud)

我已经使用gnu arm工具链将此c代码转换为arm汇编代码.生成的汇编代码的一部分是:

main:
    @ args = 0, pretend = 0, frame = 32788
    @ frame_needed = …
Run Code Online (Sandbox Code Playgroud)

c assembly arm

3
推荐指数
1
解决办法
2791
查看次数

标签 统计

arm ×2

assembly ×2

c ×1

qemu ×1