OpenCores
URL https://opencores.org/ocsvn/eco32/eco32/trunk

Subversion Repositories eco32

[/] [eco32/] [trunk/] [stdalone/] [hello/] [hello.s] - Diff between revs 18 and 94

Go to most recent revision | Only display areas with differences | Details | Blame | View Log

Rev 18 Rev 94
;
;
; hello.s -- Hello, world!
; hello.s -- Hello, world!
;
;
 
 
        .set    tba,0xF0300000          ; terminal base address
        .set    tba,0xF0300000          ; terminal base address
        .set    tos,0xC0010000          ; top of stack
        .set    tos,0xC0020000          ; top of stack
 
 
        ; get some addresses listed in the load map
        ; get some addresses listed in the load map
        .export reset
 
        .export start
        .export start
 
        .export main
        .export out
        .export out
        .export hello
        .export hello
 
 
        ; minimal execution environment
        ; minimal execution environment
reset:
start:
        add     $29,$0,tos               ; setup stack
        add     $29,$0,tos               ; setup stack
        jal     start                   ; do useful work
        jal     main                    ; do useful work
reset1:
start1:
        j       reset1                  ; halt by looping
        j       start1                  ; halt by looping
 
 
        ; main program
        ; main program
start:
main:
        sub     $29,$29,8               ; create stack frame
        sub     $29,$29,8               ; create stack frame
        stw     $31,$29,0                ; save return register
        stw     $31,$29,0                ; save return register
        stw     $16,$29,4               ; save register variable
        stw     $16,$29,4               ; save register variable
        add     $16,$0,hello             ; pointer to string
        add     $16,$0,hello             ; pointer to string
loop:
loop:
        ldbu    $4,$16,0         ; get char
        ldbu    $4,$16,0         ; get char
        beq     $4,$0,stop               ; null - finished
        beq     $4,$0,stop               ; null - finished
        jal     out                     ; output char
        jal     out                     ; output char
        add     $16,$16,1               ; bump pointer
        add     $16,$16,1               ; bump pointer
        j       loop                    ; next char
        j       loop                    ; next char
stop:
stop:
        ldw     $31,$29,0                ; restore return register
        ldw     $31,$29,0                ; restore return register
        ldw     $16,$29,4               ; restore register variable
        ldw     $16,$29,4               ; restore register variable
        add     $29,$29,8               ; release stack frame
        add     $29,$29,8               ; release stack frame
        jr      $31                     ; return
        jr      $31                     ; return
 
 
        ; output a character to the terminal
        ; output a character to the terminal
out:
out:
        add     $8,$0,tba                ; set I/O base address
        add     $8,$0,tba                ; set I/O base address
out1:
out1:
        ldw     $9,$8,8                 ; get xmtr status
        ldw     $9,$8,8                 ; get xmtr status
        and     $9,$9,1                 ; xmtr ready?
        and     $9,$9,1                 ; xmtr ready?
        beq     $9,$0,out1               ; no - wait
        beq     $9,$0,out1               ; no - wait
        stw     $4,$8,12                ; send char
        stw     $4,$8,12                ; send char
        jr      $31                     ; return
        jr      $31                     ; return
 
 
        ; a very famous little string...
        ; a very famous little string...
hello:
hello:
        .byte   0x0D, 0x0A
        .byte   0x0D, 0x0A
        .byte   "Hello, world!"
        .byte   "Hello, world!"
        .byte   0x0D, 0x0A
        .byte   0x0D, 0x0A
        .byte   0x0D, 0x0A, 0
        .byte   0x0D, 0x0A, 0
 
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.