In this task, the job is to create a new empty file called "output.txt" of size 0 bytes
and an empty directory called "docs". This should be done twice: once "here", i.e. in the current working directory and once in the filesystem root.

 
/* ARM assembly AARCH64 Raspberry PI 3B */
/*  program createDirFic64.s   */
 
/*******************************************/
/* Constantes file                         */
/*******************************************/
/* for this file see task include a file in language AArch64 assembly*/
.include "../includeConstantesARM64.inc"
 
.equ MKDIRAT, 0x22     // Linux Syscall  create directory
.equ CHGDIR,  0x31     // Linux Syscall  change directory
 
/*******************************************/
/* Initialized data                        */
/*******************************************/
.data
szMessCreateDirOk:   .asciz "Create directory Ok.\n"
szMessErrCreateDir:  .asciz "Unable create directory. \n"
szMessErrChangeDir:  .asciz "Unable change directory. \n"
szMessCreateFileOk:  .asciz "Create file Ok.\n"
szMessErrCreateFile: .asciz "Unable create file. \n"
szMessErrCloseFile:  .asciz "Unable close file. \n"
 
szNameDir:           .asciz "Dix1"
szNameFile:          .asciz "file1.txt"
 
/*******************************************/
/* UnInitialized data                      */
/*******************************************/
.bss 
/*******************************************/
/*  code section                           */
/*******************************************/
.text
.global main 
main:                           // entry of program 
                                // create directory
    mov x0,AT_FDCWD
    ldr x1,qAdrszNameDir        // directory name
    mov x2,0775                 // mode (in octal zero is important !!)
    mov x8,MKDIRAT              // code call system create directory 
    svc 0                       // call systeme 
    cbnz x0,99f                 // error ?
 
                                // display  message ok directory
    ldr x0,qAdrszMessCreateDirOk
    bl affichageMess
                                // change directory
    ldr x0,qAdrszNameDir        // directory name
    mov x8, #CHGDIR             // code call system change directory 
    svc #0                      // call systeme 
    cbnz x0,98f                 // error ?
                                // create file
    mov x0,AT_FDCWD             // current directory
    ldr x1,qAdrszNameFile       // directory name
    mov x2,O_CREAT|O_WRONLY     //  flags
    mov x3,0644                 // this zone is Octal number (0 before)
    mov x8,OPEN                 // code call system open file
    svc #0                      // call systeme 
    cmp x0,#0                   // error ?
    ble 97f
    mov x19,x0                  // save File Descriptor 
                                // display  message ok file
    ldr x0,qAdrszMessCreateFileOk
    bl affichageMess
 
                                // close file
    mov x0,x19                  // Fd 
    mov x8,CLOSE                // close file
    svc 0 
    cbnz x0,96f                 // error ?
    mov x0,0                    // return code Ok
    b 100f                      // end Ok
96:                             // display error message close file 
    ldr x0,qAdrszMessErrCloseFile
    bl affichageMess
    mov x0,1                    // return code error
    b 100f
97:                             // display error message create file 
    ldr x0,qAdrszMessErrCreateFile
    bl affichageMess
    mov x0,1                    // return code error
    b 100f
98:                             // display error message change directory 
    ldr x0,qAdrszMessErrChangeDir
    bl affichageMess
    mov x0,1                    // return code error
    b 100f
99:                             // display error message create directory 
    ldr x0,qAdrszMessErrCreateDir
    bl affichageMess
    mov x0,1                    // return code error
    b 100f
100:                            // standard end of the program 
    mov x8,EXIT                 // request to exit program
    svc 0                       // perform the system call
qAdrszMessCreateDirOk:     .quad szMessCreateDirOk
qAdrszMessErrCreateDir:    .quad szMessErrCreateDir
qAdrszMessErrChangeDir:    .quad szMessErrChangeDir
qAdrszMessCreateFileOk:    .quad szMessCreateFileOk
qAdrszNameFile:            .quad szNameFile
qAdrszMessErrCreateFile:   .quad szMessErrCreateFile
qAdrszMessErrCloseFile:    .quad szMessErrCloseFile
qAdrszNameDir:             .quad szNameDir
/********************************************************/
/*        File Include fonctions                        */
/********************************************************/
/* for this file see task include a file in language AArch64 assembly */
.include "../includeARM64.inc"
 
 