在 ARM 汇编程序中检查 NULL 指针

Check for NULL pointer in ARM Assembler

我在我的 arm 汇编程序中使用 fgets() 函数调用并循环遍历文件的内容并打印它。所有这些都有效,但我想在 fgets() returns NULL 时退出程序。我实际上也不知道我应该比较什么。这是我拥有的:

read_file:
    mov r2, r5       //file pointer is stored in R5
    ldr r0, =buffer
    mov r1, #254
    bl fgets
    bl printf
    cmp r0,#0
    bne read_file
    bl exit

我假设我应该检查正在获取字符串的缓冲区,但我可能需要检查另一个寄存器是否为 NULL return?

问题是我比较了错误的 return 值。我已经正确计算出 return 值应该存储在 R0 中,但我实际上在这里与这段代码比较的是 printf() not[= 的 return 值17=] fgets() 的 return 值在我进行比较时已经被覆盖。

    bl fgets
    bl printf
    cmp r0,#0

在代码中将比较移动到更高位置并直接在 fgets() 之后,它起作用了。

read_file:
        mov r2, r5
        ldr r0, =buffer
        mov r1, #254
        bl fgets
        cmp r0, #0
        beq exit
        bl printf
        bl read_file
        bl exit