首页 > 解决方案 > 为什么我的 arm32 汇编程序中有段错误?

问题描述

我尝试在 arm 程序集中编写一个程序,该程序会写入全部char** argv内容。在 C 中它会是这样的:

#include <stdio.h>

int main(int argc, char** argv) {
    for (unsigned int i = 0; argv[i] != 0; i++)
        puts(argv[i]);
    return 0;
}

我在汇编中这样写:


.global main

.data

.bss

.text

.align 4

@r0 = argc
@r1 = argv

main:
        @prologue
        stmfd sp!, {fp, lr}
        add fp, sp, #4
        sub sp, sp, #8

        @i = 0
        mov r0, #0
        str r0, [fp, #-8]
        b loop_begin

loop_content:
        bl puts
        ldr r0, [fp, #-8]
        add r0, r0, #1
        str r0, [fp, #-8]

loop_begin:
        @r0 = i
        ldr r0, [fp, #-8]

        @i = i * 4
        lsl r0, r0, #2

        @r0 = argv + i
        add r0, r1, r0

        @r3 = argv[i]
        ldr r0, [r0]

        @argv[i] == 0?
        cmp r0, #0

        @if arvg[i] != 0 go to ...
        bne loop_content

        mov r0, #0
        sub sp, fp, #4
        ldmfd sp!, {fp, lr}
        bx lr

但它给了我段错误

        str r0, [fp, #-8]

我不知道为什么,你有什么想法为什么会发生?

标签: assemblyarmargv

解决方案


推荐阅读