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



我在arm汇编程序中使用fgets(。我真的不知道我应该拿它来比较什么。这是我所拥有的:

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?

问题是我比较了错误的返回值。我已经正确地计算出返回值应该存储在R0中,但我在这里与这段代码实际比较的是printf((的返回值而不是fgets((的回归值,它在我进行比较时已经被覆盖。

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

最新更新