File input/output: Difference between revisions
Content added Content deleted
(add task to ARM64 assembly Raspberry Pi) |
|||
Line 16: | Line 16: | ||
<lang 11l>V file_contents = File(‘input.txt’).read() |
<lang 11l>V file_contents = File(‘input.txt’).read() |
||
File(‘output.txt’, ‘w’).write(file_contents)</lang> |
File(‘output.txt’, ‘w’).write(file_contents)</lang> |
||
=={{header|AArch64 Assembly}}== |
|||
{{works with|as|Raspberry Pi 3B version Buster 64 bits}} |
|||
<lang AArch64 Assembly> |
|||
/* ARM assembly AARCH64 Raspberry PI 3B */ |
|||
/* program readwrtFile64.s */ |
|||
/*******************************************/ |
|||
/* Constantes file */ |
|||
/*******************************************/ |
|||
/* for this file see task include a file in language AArch64 assembly*/ |
|||
.include "../includeConstantesARM64.inc" |
|||
.equ TAILLEBUF, 1000 |
|||
/*********************************/ |
|||
/* Initialized data */ |
|||
/*********************************/ |
|||
.data |
|||
szMessErreur: .asciz "Error open input file.\n" |
|||
szMessErreur4: .asciz "Error open output file.\n" |
|||
szMessErreur1: .asciz "Error close file.\n" |
|||
szMessErreur2: .asciz "Error read file.\n" |
|||
szMessErreur3: .asciz "Error write output file.\n" |
|||
/*************************************************/ |
|||
szMessCodeErr: .asciz "Error code décimal : @ \n" |
|||
szNameFileInput: .asciz "input.txt" |
|||
szNameFileOutput: .asciz "output.txt" |
|||
/*******************************************/ |
|||
/* UnInitialized data */ |
|||
/*******************************************/ |
|||
.bss |
|||
sBuffer: .skip TAILLEBUF |
|||
sZoneConv: .skip 24 |
|||
/**********************************************/ |
|||
/* -- Code section */ |
|||
/**********************************************/ |
|||
.text |
|||
.global main |
|||
main: // entry of program |
|||
mov x0,AT_FDCWD |
|||
ldr x1,qAdrszNameFileInput // file name |
|||
mov x2,#O_RDWR // flags |
|||
mov x3,#0 // mode |
|||
mov x8,#OPEN // call system OPEN |
|||
svc #0 |
|||
cmp x0,0 // open error ? |
|||
ble erreur |
|||
mov x19,x0 // save File Descriptor |
|||
ldr x1,qAdrsBuffer // buffer address |
|||
mov x2,TAILLEBUF // buffer size |
|||
mov x8,READ // call system READ |
|||
svc 0 |
|||
cmp x0,0 // read error ? |
|||
ble erreur2 |
|||
mov x20,x0 // length read characters |
|||
// close imput file |
|||
mov x0,x19 // Fd |
|||
mov x8,CLOSE // call system CLOSE |
|||
svc 0 |
|||
cmp x0,0 // close error ? |
|||
blt erreur1 |
|||
// create output file |
|||
mov x0,AT_FDCWD |
|||
ldr x1,qAdrszNameFileOutput // file name |
|||
mov x2,O_CREAT|O_RDWR // flags |
|||
ldr x3,qFicMask1 // Mode |
|||
mov x8,OPEN // call system open file |
|||
svc 0 |
|||
cmp x0,#0 // create error ? |
|||
ble erreur4 |
|||
mov x19,x0 // file descriptor |
|||
ldr x1,qAdrsBuffer |
|||
mov x2,x20 // length to write |
|||
mov x8, #WRITE // select system call 'write' |
|||
svc #0 // perform the system call |
|||
cmp x0,#0 // error write ? |
|||
blt erreur3 |
|||
// close output file |
|||
mov x0,x19 // Fd fichier |
|||
mov x8, #CLOSE // call system CLOSE |
|||
svc #0 |
|||
cmp x0,#0 // error close ? |
|||
blt erreur1 |
|||
mov x0,#0 // return code OK |
|||
b 100f |
|||
erreur: |
|||
ldr x1,qAdrszMessErreur |
|||
bl displayError |
|||
mov x0,#1 // error return code |
|||
b 100f |
|||
erreur1: |
|||
ldr x1,qAdrszMessErreur1 |
|||
bl displayError |
|||
mov x0,#1 // error return code |
|||
b 100f |
|||
erreur2: |
|||
ldr x1,qAdrszMessErreur2 |
|||
bl displayError |
|||
mov x0,#1 // error return code |
|||
b 100f |
|||
erreur3: |
|||
ldr x1,qAdrszMessErreur3 |
|||
bl displayError |
|||
mov x0,#1 // error return code |
|||
b 100f |
|||
erreur4: |
|||
ldr x1,qAdrszMessErreur4 |
|||
bl displayError |
|||
mov x0,#1 // error return code |
|||
b 100f |
|||
100: // end program |
|||
mov x8,EXIT |
|||
svc 0 |
|||
qAdrszNameFileInput: .quad szNameFileInput |
|||
qAdrszNameFileOutput: .quad szNameFileOutput |
|||
qAdrszMessErreur: .quad szMessErreur |
|||
qAdrszMessErreur1: .quad szMessErreur1 |
|||
qAdrszMessErreur2: .quad szMessErreur2 |
|||
qAdrszMessErreur3: .quad szMessErreur3 |
|||
qAdrszMessErreur4: .quad szMessErreur4 |
|||
qAdrsBuffer: .quad sBuffer |
|||
qFicMask1: .quad 0644 |
|||
/******************************************************************/ |
|||
/* display error message */ |
|||
/******************************************************************/ |
|||
/* x0 contains error code */ |
|||
/* x1 contains address error message */ |
|||
displayError: |
|||
stp x2,lr,[sp,-16]! // save registers |
|||
mov x2,x0 // save error code |
|||
mov x0,x1 // display message error |
|||
bl affichageMess |
|||
mov x0,x2 |
|||
ldr x1,qAdrsZoneConv // conversion error code |
|||
bl conversion10S // decimal conversion |
|||
ldr x0,qAdrszMessCodeErr |
|||
ldr x1,qAdrsZoneConv |
|||
bl strInsertAtCharInc // insert result at @ character |
|||
bl affichageMess // display message final |
|||
ldp x2,lr,[sp],16 // restaur 2 registers |
|||
ret // return to address lr x30 |
|||
qAdrsZoneConv: .quad sZoneConv |
|||
qAdrszMessCodeErr: .quad szMessCodeErr |
|||
/********************************************************/ |
|||
/* File Include fonctions */ |
|||
/********************************************************/ |
|||
/* for this file see task include a file in language AArch64 assembly */ |
|||
.include "../includeARM64.inc" |
|||
</lang> |
|||
=={{header|ACL2}}== |
=={{header|ACL2}}== |
||
<lang lisp>:set-state-ok t |
<lang lisp>:set-state-ok t |