在 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
我在我的 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