es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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.

Tags:  , , ,

Answer

  1. Avatar for 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:

    read_file:
        mov r2, r5       // el puntero al archivo está almacenado en R5
        ldr r0, =buffer
        mov r1, #254
        bl fgets
        bl printf           // imprimir el contenido del buffer
        cmp r0, #NULL       // comparar el valor de retorno de fgets() con NULL
        beq exit            // salir si fgets() devolvió NULL
        b read_file         // de lo contrario, continuar en el ciclo
    exit:
        bl exit             // salir del programa
    

    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.

Comments are closed.