=={{header|AArch64 Assembly}}==
{{works with|as|Raspberry Pi 3B/4 version Buster 64 bits}}
<lang AArch64 Assembly>
//Consts
/* ARM assembly AARCH64 Raspberry PI 3B */
/* program inputText64.s */
/*******************************************/
/* Constantes file */
/*******************************************/
/* for this file see task include a file in language AArch64 assembly*/
.include "../includeConstantesARM64.inc"
.equ BUFFERSIZE, 100
.equ STDIN, 0 mov x0,STDIN // Linuxlinux input console ▼
/*******************************************/
/*.equ InitializedSTDOUT, data1 // linux output */console
.equ READ, 63
/*******************************************/
.equ WRITE, 64
.equ EXIT, 93
.data
szMessDebenterText: .asciz "Enter text : \n"
szMessNumcarriageReturn: .asciz "Enter number : \n"
szCarriageReturn: .asciz "\n"
//Read Buffer
/*******************************************/
/* UnInitialized data */
/*******************************************/
.bss
sBufferbuffer: .skip BUFFERSIZE
/*******************************************/
/*******************************************/
.text
.global main_start
main: // entry of program ▼
qAdrszMessNumquadEnterText: .quad szMessNumenterText▼
ldr x0,qAdrszMessDeb
qAdrsBufferquadBuffer: .quad sBufferbuffer▼
bl affichageMess
quadCarriageReturn: .quad carriageReturn
▲ mov x0,STDIN // Linux input console
ldr x1,qAdrsBuffer // buffer address ▼
writeMessage:
mov x2,BUFFERSIZE // buffer size ▼
mov x8x2,READ0 // requestreset tosize readcounter to datas0
checkSize: ldr x1,qAdrsBuffer // bufferget size addressof input
movldrb x2w1,#0 [x0,x2] // endload char with offset of stringx2
strbadd w2x2,[x1x2,x0]#1 // store byte at the end of input string// (x0add contains1 numberchar ofread characters)legnth
movcbz x2w1, #0output // endif ofchar stringfound▼
ldrb x0,qAdrsBuffercheckSize // buffer address // loop
bl affichageMess
output:
ldr x0,qAdrszCarriageReturn ▼
svcmov 0x1,x0 // performmove thestring address into system call func parm▼
bl affichageMess
mov x8x0, READSTDOUT // request to read datas▼
mov x8, WRITE #EXIT // request to exit program▼
ldr x0,qAdrszMessNum
▲/* code section svc 0 // trigger system */write
bl affichageMess
movret x0,STDIN // Linux input console
ldr x1,qAdrsBuffer // buffer address ▼
mov x2,BUFFERSIZE // buffer size
_start:
▲ mov x8,READ // request to read datas
//Output enter text
svc 0 // call system
ldr x1x0,qAdrsBuffer quadEnterText // bufferload addressenter message
bl writeMessage // output enter message
▲ mov x2,#0 // end of string
strb w2,[x1,x0] // store byte at the end of input string (x0 ▼
//Read User Input
ldrmov x0,qAdrsBufferSTDIN // bufferlinux input addressconsole
blldr conversionAtoDx1,quadBuffer // conversionload stringbuffer inaddress number in x0
▲ mov x2,BUFFERSIZE // load buffer size
mov x8,READ // request to read data
100: /* standard end of the program */
movsvc x0, #0 // returntrigger system read codeinput
▲ mov x8, #EXIT // request to exit program
//Output User Message
▲ svc 0 // perform the system call
mov x2, #0 // prep end of string
▲ ldr x1, qAdrsBufferquadBuffer // load buffer address
qAdrszMessDeb: .quad szMessDeb
▲ strb w2,[x1, x0] // store x2 0 byte at the end of input string , offset (x0
▲qAdrszMessNum: .quad szMessNum
▲ ldr x1x0, qAdrsBufferquadBuffer // load buffer address
▲qAdrsBuffer: .quad sBuffer
bl writeMessage
qAdrszCarriageReturn: .quad szCarriageReturn
/********************************************************/
//Output newline
/* File Include fonctions */
▲ ldr x0, qAdrszCarriageReturnquadCarriageReturn
/********************************************************/
bl writeMessage
/* for this file see task include a file in language AArch64 assembly */
.include "../includeARM64.inc"
//End Program
▲ svcmov x0, #0 // callreturn systemcode
mov x8, #EXIT // request to exit program
▲main: svc 0 // entrytrigger end of program
</lang>
|