isa7

Download: isa7.zip

This code uses a .data section, and tests the load and store instructions for bytes and half-words. The simulator, therefore, must incorporate a data memory with initialized values and contend with absolute memory references. If we we use a separate data memory, we must keep track of the offset between our data memory and the memory of the target system.

Contents

Source
Shell script
Disassembler output
Size summary
Sections
Symbols
Data Section
Simulation

Source: isa7.s

.include "./nios_macros.m"

.text

.global main
.type main, @function

main:
    movia    r4,table  # load unsigned bytes
    ldbu    r7,0(r4)
    ldbu    r8,1(r4)
    ldbu    r9,2(r4)
    ldbu    r10,3(r4)

high2:    movia   r4,table  # transfer half-words
    ldh    r7,0(r4)
    sth    r7,12(r4)
    ldh    r7,2(r4)
    sth    r7,14(r4)

    ldhu    r7,0(r4)  # transfer unsigned half-words
    sth    r7,8(r4)
    ldhu    r7,2(r4)
    sth    r7,10(r4)

copy:    movia    r4,str    # src string
    addi    r5,r4,80  # dst string
loop:     ldb    r7,0(r4)  # copy string elsewhere in memory
    stb    r7,0(r5)
    addi    r4,r4,1
    addi    r5,r5,1
    bne    r7,zero,loop


end:
    br    end   /* wait here once the program has completed */

.data

str:    .asciz "This is a string"
    .balign 4
table:    .word  0x8a0b8c0d, 0x01020304, 0xffffffff,0xaaaaaaaa

.end

Shell script

#!/bin/sh
nios2-elf-gcc isa7.s
nios2-elf-size a.out > isa7.size.txt
nios2-elf-objdump -dS a.out > isa7.disassemble.txt
nios2-elf-objdump -h a.out > isa7.headers.txt
nios2-elf-nm a.out > isa7.symbols.txt
nios2-elf-objcopy -S -O binary a.out isa7.bin
nios2-iss -td:isa7.sim.txt  -f a.out
od -Ax -j0x298 -txz isa7.bin > isa7.od.txt

Disassembler output

00000030 <main>:
  30:    01000034     movhi    r4,0
  34:    2100ab14     ori    r4,r4,684
  38:    21c00003     ldbu    r7,0(r4)
  3c:    22000043     ldbu    r8,1(r4)
  40:    22400083     ldbu    r9,2(r4)
  44:    228000c3     ldbu    r10,3(r4)

00000048 <high2>:
  48:    01000034     movhi    r4,0
  4c:    2100ab14     ori    r4,r4,684
  50:    21c0000f     ldh    r7,0(r4)
  54:    21c0030d     sth    r7,12(r4)
  58:    21c0008f     ldh    r7,2(r4)
  5c:    21c0038d     sth    r7,14(r4)
  60:    21c0000b     ldhu    r7,0(r4)
  64:    21c0020d     sth    r7,8(r4)
  68:    21c0008b     ldhu    r7,2(r4)
  6c:    21c0028d     sth    r7,10(r4)

00000070 <copy>:
  70:    01000034     movhi    r4,0
  74:    2100a614     ori    r4,r4,664
  78:    21401404     addi    r5,r4,80

0000007c <loop>:
  7c:    21c00007     ldb    r7,0(r4)
  80:    29c00005     stb    r7,0(r5)
  84:    21000044     addi    r4,r4,1
  88:    29400044     addi    r5,r5,1
  8c:    383ffb1e     bne    r7,zero,7c <loop>

00000090 <end>:
  90:    003fff06     br    90 <end>

Size

   text       data        bss        dec        hex    filename
    662        932          0       1594        63a    a.out

Headers


a.out:     file format elf32-littlenios2

Sections:
Idx Name          Size      VMA       LMA       File off  Algn
  0 .text         00000294  00000000  00000000  00000074  2**3
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
  1 .rodata       00000002  00000294  00000294  00000308  2**2
                  CONTENTS, ALLOC, LOAD, READONLY, DATA
  2 .data         000003a0  00000298  00000298  0000030a  2**2
                  CONTENTS, ALLOC, LOAD, DATA
  3 .sdata        00000004  00000638  00000638  000006aa  2**2
                  CONTENTS, ALLOC, LOAD, DATA, SMALL_DATA
  4 .sbss         00000000  0000063c  0000063c  000006ae  2**0
                  CONTENTS, SMALL_DATA
  5 .bss          00000000  0000063c  0000063c  000006ae  2**0
                  ALLOC

Symbols

0000063c A __bss_start
00000264 T __fake_fini
00000094 T __fake_init
00000098 T __start_2
0000063c A _edata
0000063c A _end
00000268 T _exit
00000264 W _fini
00008630 A _gp
00000638 G _impure_ptr
00000094 W _init
00000001 a _nios2_macros_
00000000 T _start
000000d8 T _zero_bss
00000070 t copy
00000090 t end
000000e4 T exit
00000048 t high2
000002bc d impure_data
0000007c t loop
00000030 T main
000001c8 T memset
07ffff00 A nasys_stack_top
00000298 d str
000002ac d table

See key for the meaning of the symbol type characters.

Data Section

000298 73696854 20736920 74732061 676e6972  >This is a string<
0002a8 00000000 8a0b8c0d 01020304 ffffffff  >................<
0002b8 aaaaaaaa 00000000 00000524 00000580  >........$.......<
0002c8 000005dc 00000000 00000000 00000000  >................<
0002d8 00000000 00000000 00000000 00000000  >................<
0002e8 00000000 00000000 00000294 00000000  >................<
0002f8 00000000 00000000 00000000 00000000  >................<
*
000358 00000000 00000000 00000001 00000000  >................<
000368 abcd330e e66d1234 0005deec 0000000b  >.3..4.m.........<
000378 00000000 00000000 00000000 00000000  >................<
*
000638 000002bc                             >....<
00063c

Simulation

0x00000030 <main>:              0x01000034  movhi r4, 0 [dstData=0x0 dstReg=r4]
0x00000034 <main+0x4>:          0x2100ab14  ori r4, r4, 684 [dstData=0x2ac dstReg=r4]
0x00000038 <main+0x8>:          0x21c00003  ldbu r7, 0(r4) [memAddr=0x2ac ldData=0xd dstReg=r7]
0x0000003c <main+0xc>:          0x22000043  ldbu r8, 1(r4) [memAddr=0x2ad ldData=0x8c dstReg=r8]
0x00000040 <main+0x10>:         0x22400083  ldbu r9, 2(r4) [memAddr=0x2ae ldData=0xb dstReg=r9]
0x00000044 <main+0x14>:         0x228000c3  ldbu r10, 3(r4) [memAddr=0x2af ldData=0x8a dstReg=r10]
0x00000048 <high2>:             0x01000034  movhi r4, 0 [dstData=0x0 dstReg=r4]
0x0000004c <high2+0x4>:         0x2100ab14  ori r4, r4, 684 [dstData=0x2ac dstReg=r4]
0x00000050 <high2+0x8>:         0x21c0000f  ldh r7, 0(r4) [memAddr=0x2ac ldData=0xffff8c0d dstReg=r7]
0x00000054 <high2+0xc>:         0x21c0030d  sth r7, 12(r4) [memAddr=0x2b8 stData=0x8c0d]
0x00000058 <high2+0x10>:        0x21c0008f  ldh r7, 2(r4) [memAddr=0x2ae ldData=0xffff8a0b dstReg=r7]
0x0000005c <high2+0x14>:        0x21c0038d  sth r7, 14(r4) [memAddr=0x2ba stData=0x8a0b]
0x00000060 <high2+0x18>:        0x21c0000b  ldhu r7, 0(r4) [memAddr=0x2ac ldData=0x8c0d dstReg=r7]
0x00000064 <high2+0x1c>:        0x21c0020d  sth r7, 8(r4) [memAddr=0x2b4 stData=0x8c0d]
0x00000068 <high2+0x20>:        0x21c0008b  ldhu r7, 2(r4) [memAddr=0x2ae ldData=0x8a0b dstReg=r7]
0x0000006c <high2+0x24>:        0x21c0028d  sth r7, 10(r4) [memAddr=0x2b6 stData=0x8a0b]
0x00000070 <copy>:              0x01000034  movhi r4, 0 [dstData=0x0 dstReg=r4]
0x00000074 <copy+0x4>:          0x2100a614  ori r4, r4, 664 [dstData=0x298 dstReg=r4]
0x00000078 <copy+0x8>:          0x21401404  addi r5, r4, 80 [dstData=0x2e8 dstReg=r5]
0x0000007c <loop>:              0x21c00007  ldb r7, 0(r4) [memAddr=0x298 ldData=0x54 dstReg=r7]
0x00000080 <loop+0x4>:          0x29c00005  stb r7, 0(r5) [memAddr=0x2e8 stData=0x54]
0x00000084 <loop+0x8>:          0x21000044  addi r4, r4, 1 [dstData=0x299 dstReg=r4]
0x00000088 <loop+0xc>:          0x29400044  addi r5, r5, 1 [dstData=0x2e9 dstReg=r5]
0x0000008c <loop+0x10>:         0x383ffb1e  bne r7, r0, 0x7c <loop> [passed]
0x0000007c <loop>:              0x21c00007  ldb r7, 0(r4) [memAddr=0x299 ldData=0x68 dstReg=r7]
0x00000080 <loop+0x4>:          0x29c00005  stb r7, 0(r5) [memAddr=0x2e9 stData=0x68]
0x00000084 <loop+0x8>:          0x21000044  addi r4, r4, 1 [dstData=0x29a dstReg=r4]
0x00000088 <loop+0xc>:          0x29400044  addi r5, r5, 1 [dstData=0x2ea dstReg=r5]
0x0000008c <loop+0x10>:         0x383ffb1e  bne r7, r0, 0x7c <loop> [passed]
0x0000007c <loop>:              0x21c00007  ldb r7, 0(r4) [memAddr=0x29a ldData=0x69 dstReg=r7]
0x00000080 <loop+0x4>:          0x29c00005  stb r7, 0(r5) [memAddr=0x2ea stData=0x69]
0x00000084 <loop+0x8>:          0x21000044  addi r4, r4, 1 [dstData=0x29b dstReg=r4]
0x00000088 <loop+0xc>:          0x29400044  addi r5, r5, 1 [dstData=0x2eb dstReg=r5]
0x0000008c <loop+0x10>:         0x383ffb1e  bne r7, r0, 0x7c <loop> [passed]
0x0000007c <loop>:              0x21c00007  ldb r7, 0(r4) [memAddr=0x29b ldData=0x73 dstReg=r7]
0x00000080 <loop+0x4>:          0x29c00005  stb r7, 0(r5) [memAddr=0x2eb stData=0x73]
0x00000084 <loop+0x8>:          0x21000044  addi r4, r4, 1 [dstData=0x29c dstReg=r4]
0x00000088 <loop+0xc>:          0x29400044  addi r5, r5, 1 [dstData=0x2ec dstReg=r5]
0x0000008c <loop+0x10>:         0x383ffb1e  bne r7, r0, 0x7c <loop> [passed]
0x0000007c <loop>:              0x21c00007  ldb r7, 0(r4) [memAddr=0x29c ldData=0x20 dstReg=r7]
0x00000080 <loop+0x4>:          0x29c00005  stb r7, 0(r5) [memAddr=0x2ec stData=0x20]
0x00000084 <loop+0x8>:          0x21000044  addi r4, r4, 1 [dstData=0x29d dstReg=r4]
0x00000088 <loop+0xc>:          0x29400044  addi r5, r5, 1 [dstData=0x2ed dstReg=r5]
0x0000008c <loop+0x10>:         0x383ffb1e  bne r7, r0, 0x7c <loop> [passed]
0x0000007c <loop>:              0x21c00007  ldb r7, 0(r4) [memAddr=0x29d ldData=0x69 dstReg=r7]
0x00000080 <loop+0x4>:          0x29c00005  stb r7, 0(r5) [memAddr=0x2ed stData=0x69]
0x00000084 <loop+0x8>:          0x21000044  addi r4, r4, 1 [dstData=0x29e dstReg=r4]
0x00000088 <loop+0xc>:          0x29400044  addi r5, r5, 1 [dstData=0x2ee dstReg=r5]
0x0000008c <loop+0x10>:         0x383ffb1e  bne r7, r0, 0x7c <loop> [passed]
0x0000007c <loop>:              0x21c00007  ldb r7, 0(r4) [memAddr=0x29e ldData=0x73 dstReg=r7]
0x00000080 <loop+0x4>:          0x29c00005  stb r7, 0(r5) [memAddr=0x2ee stData=0x73]
0x00000084 <loop+0x8>:          0x21000044  addi r4, r4, 1 [dstData=0x29f dstReg=r4]
0x00000088 <loop+0xc>:          0x29400044  addi r5, r5, 1 [dstData=0x2ef dstReg=r5]
0x0000008c <loop+0x10>:         0x383ffb1e  bne r7, r0, 0x7c <loop> [passed]
0x0000007c <loop>:              0x21c00007  ldb r7, 0(r4) [memAddr=0x29f ldData=0x20 dstReg=r7]
0x00000080 <loop+0x4>:          0x29c00005  stb r7, 0(r5) [memAddr=0x2ef stData=0x20]
0x00000084 <loop+0x8>:          0x21000044  addi r4, r4, 1 [dstData=0x2a0 dstReg=r4]
0x00000088 <loop+0xc>:          0x29400044  addi r5, r5, 1 [dstData=0x2f0 dstReg=r5]
0x0000008c <loop+0x10>:         0x383ffb1e  bne r7, r0, 0x7c <loop> [passed]
0x0000007c <loop>:              0x21c00007  ldb r7, 0(r4) [memAddr=0x2a0 ldData=0x61 dstReg=r7]
0x00000080 <loop+0x4>:          0x29c00005  stb r7, 0(r5) [memAddr=0x2f0 stData=0x61]
0x00000084 <loop+0x8>:          0x21000044  addi r4, r4, 1 [dstData=0x2a1 dstReg=r4]
0x00000088 <loop+0xc>:          0x29400044  addi r5, r5, 1 [dstData=0x2f1 dstReg=r5]
0x0000008c <loop+0x10>:         0x383ffb1e  bne r7, r0, 0x7c <loop> [passed]
0x0000007c <loop>:              0x21c00007  ldb r7, 0(r4) [memAddr=0x2a1 ldData=0x20 dstReg=r7]
0x00000080 <loop+0x4>:          0x29c00005  stb r7, 0(r5) [memAddr=0x2f1 stData=0x20]
0x00000084 <loop+0x8>:          0x21000044  addi r4, r4, 1 [dstData=0x2a2 dstReg=r4]
0x00000088 <loop+0xc>:          0x29400044  addi r5, r5, 1 [dstData=0x2f2 dstReg=r5]
0x0000008c <loop+0x10>:         0x383ffb1e  bne r7, r0, 0x7c <loop> [passed]
0x0000007c <loop>:              0x21c00007  ldb r7, 0(r4) [memAddr=0x2a2 ldData=0x73 dstReg=r7]
0x00000080 <loop+0x4>:          0x29c00005  stb r7, 0(r5) [memAddr=0x2f2 stData=0x73]
0x00000084 <loop+0x8>:          0x21000044  addi r4, r4, 1 [dstData=0x2a3 dstReg=r4]
0x00000088 <loop+0xc>:          0x29400044  addi r5, r5, 1 [dstData=0x2f3 dstReg=r5]
0x0000008c <loop+0x10>:         0x383ffb1e  bne r7, r0, 0x7c <loop> [passed]
0x0000007c <loop>:              0x21c00007  ldb r7, 0(r4) [memAddr=0x2a3 ldData=0x74 dstReg=r7]
0x00000080 <loop+0x4>:          0x29c00005  stb r7, 0(r5) [memAddr=0x2f3 stData=0x74]
0x00000084 <loop+0x8>:          0x21000044  addi r4, r4, 1 [dstData=0x2a4 dstReg=r4]
0x00000088 <loop+0xc>:          0x29400044  addi r5, r5, 1 [dstData=0x2f4 dstReg=r5]
0x0000008c <loop+0x10>:         0x383ffb1e  bne r7, r0, 0x7c <loop> [passed]
0x0000007c <loop>:              0x21c00007  ldb r7, 0(r4) [memAddr=0x2a4 ldData=0x72 dstReg=r7]
0x00000080 <loop+0x4>:          0x29c00005  stb r7, 0(r5) [memAddr=0x2f4 stData=0x72]
0x00000084 <loop+0x8>:          0x21000044  addi r4, r4, 1 [dstData=0x2a5 dstReg=r4]
0x00000088 <loop+0xc>:          0x29400044  addi r5, r5, 1 [dstData=0x2f5 dstReg=r5]
0x0000008c <loop+0x10>:         0x383ffb1e  bne r7, r0, 0x7c <loop> [passed]
0x0000007c <loop>:              0x21c00007  ldb r7, 0(r4) [memAddr=0x2a5 ldData=0x69 dstReg=r7]
0x00000080 <loop+0x4>:          0x29c00005  stb r7, 0(r5) [memAddr=0x2f5 stData=0x69]
0x00000084 <loop+0x8>:          0x21000044  addi r4, r4, 1 [dstData=0x2a6 dstReg=r4]
0x00000088 <loop+0xc>:          0x29400044  addi r5, r5, 1 [dstData=0x2f6 dstReg=r5]
0x0000008c <loop+0x10>:         0x383ffb1e  bne r7, r0, 0x7c <loop> [passed]
0x0000007c <loop>:              0x21c00007  ldb r7, 0(r4) [memAddr=0x2a6 ldData=0x6e dstReg=r7]
0x00000080 <loop+0x4>:          0x29c00005  stb r7, 0(r5) [memAddr=0x2f6 stData=0x6e]
0x00000084 <loop+0x8>:          0x21000044  addi r4, r4, 1 [dstData=0x2a7 dstReg=r4]
0x00000088 <loop+0xc>:          0x29400044  addi r5, r5, 1 [dstData=0x2f7 dstReg=r5]
0x0000008c <loop+0x10>:         0x383ffb1e  bne r7, r0, 0x7c <loop> [passed]
0x0000007c <loop>:              0x21c00007  ldb r7, 0(r4) [memAddr=0x2a7 ldData=0x67 dstReg=r7]
0x00000080 <loop+0x4>:          0x29c00005  stb r7, 0(r5) [memAddr=0x2f7 stData=0x67]
0x00000084 <loop+0x8>:          0x21000044  addi r4, r4, 1 [dstData=0x2a8 dstReg=r4]
0x00000088 <loop+0xc>:          0x29400044  addi r5, r5, 1 [dstData=0x2f8 dstReg=r5]
0x0000008c <loop+0x10>:         0x383ffb1e  bne r7, r0, 0x7c <loop> [passed]
0x0000007c <loop>:              0x21c00007  ldb r7, 0(r4) [memAddr=0x2a8 ldData=0x0 dstReg=r7]
0x00000080 <loop+0x4>:          0x29c00005  stb r7, 0(r5) [memAddr=0x2f8 stData=0x0]
0x00000084 <loop+0x8>:          0x21000044  addi r4, r4, 1 [dstData=0x2a9 dstReg=r4]
0x00000088 <loop+0xc>:          0x29400044  addi r5, r5, 1 [dstData=0x2f9 dstReg=r5]
0x0000008c <loop+0x10>:         0x383ffb1e  bne r7, r0, 0x7c <loop> [failed]
0x00000090 <end>:               0x003fff06  br 0x90 <end>


Maintained by John Loomis, last updated Tue Apr 10 15:17:44 2007