riscv ecall

 

 

#
# Risc-V Assembler program to print "Hello World!"
# to stdout.
#
# a0-a2 - parameters to linux function services
# a7 - linux function number
#

.global _start      # Provide program starting address to linker

# Setup the parameters to print hello world
# and then call Linux to do it.

_start: addi  a0, x0, 1      # 1 = StdOut
        la    a1, helloworld # load address of helloworld
        addi  a2, x0, 13     # length of our string
        addi  a7, x0, 64     # linux write system call
        ecall                # Call linux to output the string

# Setup the parameters to exit the program
# and then call Linux to do it.

        addi    a0, x0, 0   # Use 0 return code
        addi    a7, x0, 93  # Service command code 93 terminates
        ecall               # Call linux to terminate the program

.data
helloworld:      .ascii "Hello World!\n"

 

root@ubuntu:~/riscv_learn/01_ecall# riscv64-linux-gnu-as -march=rv64imac -o hello.o hello.s
root@ubuntu:~/riscv_learn/01_ecall# riscv64-linux-gnu-ld -o hello hello.o
root@ubuntu:~/riscv_learn/01_ecall# riscv64-linux-gnu-objdump -d hello

hello:     file format elf64-littleriscv


Disassembly of section .text:

00000000000100b0 <_start>:
   100b0:       00100513                li      a0,1
   100b4:       00001597                auipc   a1,0x1
   100b8:       02058593                addi    a1,a1,32 # 110d4 <helloworld>
   100bc:       00d00613                li      a2,13
   100c0:       04000893                li      a7,64
   100c4:       00000073                ecall
   100c8:       00000513                li      a0,0
   100cc:       05d00893                li      a7,93
   100d0:       00000073                ecall

 

posted on 2021-12-15 15:09  tycoon3  阅读(934)  评论(0编辑  收藏  举报

导航