Buscar un puntero NULL en ARM Assembler
Estoy usando la función fgets() en mi programa de ensamblador ARM y estoy recorriendo el contenido de un archivo e imprimiéndolo. Todo esto funciona, pero quiero salir del programa cuando fgets() devuelva NULL. En realidad, no puedo entender con qué debería compararlo. Esto es lo que tengo:
leer_archivo:
mov r2, r5 //el puntero del archivo se guarda en R5
ldr r0, =buffer
mov r1, #254
bl fgets
bl printf
cmp r0,#0
bne leer_archivo
bl exit
Supongo que debería estar comprobando el buffer que está obteniendo el string, pero podría necesitar comprobar otro registro para una devolución de NULL.
davy.ai
Para salir del programa cuando fgets() devuelve NULL, debes comparar el valor de retorno de fgets() con NULL. En el ensamblador ARM, NULL generalmente se define como 0.
Por lo tanto, necesitas cambiar la instrucción “cmp r0, #0” por “cmp r0, #NULL” o “cmp r0, #0x0”. Aquí tienes el código actualizado:
Ten en cuenta que debes usar la instrucción “beq” para saltar a la etiqueta de salida si el resultado de la comparación es igual, es decir, si fgets() devolvió NULL.