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.

Contents

Source
Shell script
Size summary
Sections
Symbols
Disassembler output
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)

    ldw    r8,8(r4)   # test transfer
    ldw    r8,12(r4)
    
copy:    movia    r4,str    # src string
    addi    r5,r4,80  # dst string
    mov    r6,r5
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

    ldw    r8,0(r6)  # test transfer
    ldw     r8,4(r6)
    ldw     r8,8(r6)

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
name="isa7"
nios2-elf-gcc ${name}.s
nios2-elf-size a.out > ${name}.size.txt
nios2-elf-objdump -dS a.out > ${name}.disassemble.txt
nios2-elf-objdump -h a.out >  ${name}.headers.txt
nios2-elf-nm a.out > ${name}.symbols.txt
nios2-elf-objcopy -S -O binary a.out ${name}.bin
nios2-iss -td:${name}.sim.txt --trace-from=main -f a.out
mifwrite ${name}.bin ${name}.mif
nios2-elf-readelf -x 2 a.out > ${name}.rodata.txt
nios2-elf-readelf -x 3 a.out > ${name}.data.txt

Size

   text       data        bss        dec        hex    filename
    686        932          0       1618        652    a.out

Sections


a.out:     file format elf32-littlenios2

Sections:
Idx Name          Size      VMA       LMA       File off  Algn
  0 .text         000002ac  00000000  00000000  00000074  2**3
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
  1 .rodata       00000002  000002ac  000002ac  00000320  2**2
                  CONTENTS, ALLOC, LOAD, READONLY, DATA
  2 .data         000003a0  000002b0  000002b0  00000322  2**2
                  CONTENTS, ALLOC, LOAD, DATA
  3 .sdata        00000004  00000650  00000650  000006c2  2**2
                  CONTENTS, ALLOC, LOAD, DATA, SMALL_DATA
  4 .sbss         00000000  00000654  00000654  000006c6  2**0
                  CONTENTS, SMALL_DATA
  5 .bss          00000000  00000654  00000654  000006c6  2**0
                  ALLOC
  6 .comment      00000108  00000000  00000000  000006c6  2**0
                  CONTENTS, READONLY
  7 .debug_aranges 000000a0  00000000  00000000  000007ce  2**0
                  CONTENTS, READONLY, DEBUGGING
  8 .debug_pubnames 000000d6  00000000  00000000  0000086e  2**0
                  CONTENTS, READONLY, DEBUGGING
  9 .debug_info   00001499  00000000  00000000  00000944  2**0
                  CONTENTS, READONLY, DEBUGGING
 10 .debug_abbrev 000004c2  00000000  00000000  00001ddd  2**0
                  CONTENTS, READONLY, DEBUGGING
 11 .debug_line   00000a02  00000000  00000000  0000229f  2**0
                  CONTENTS, READONLY, DEBUGGING
 12 .debug_frame  000000e4  00000000  00000000  00002ca4  2**2
                  CONTENTS, READONLY, DEBUGGING
 13 .debug_str    0000068a  00000000  00000000  00002d88  2**0
                  CONTENTS, READONLY, DEBUGGING

Symbols

00000654 A __bss_start
0000027c T __fake_fini
000000ac T __fake_init
000000b0 T __start_2
00000654 A _edata
00000654 A _end
00000280 T _exit
0000027c W _fini
00008640 A _gp
00000650 G _impure_ptr
000000ac W _init
00000001 a _nios2_macros_
00000000 T _start
000000f0 T _zero_bss
00000078 t copy
000000a8 t end
000000fc T exit
00000048 t high2
000002d4 d impure_data
00000088 t loop
00000030 T main
000001e0 T memset
07ffff00 A nasys_stack_top
000002b0 d str
000002c4 d table

Disassembler output


a.out:     file format elf32-littlenios2

Disassembly of section .text:

00000030 <main>:
  30:    01000034     movhi    r4,0
  34:    2100b114     ori    r4,r4,708
  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:    2100b114     ori    r4,r4,708
  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)
  70:    22000217     ldw    r8,8(r4)
  74:    22000317     ldw    r8,12(r4)

00000078 <copy>:
  78:    01000034     movhi    r4,0
  7c:    2100ac14     ori    r4,r4,688
  80:    21401404     addi    r5,r4,80
  84:    280d883a     mov    r6,r5

00000088 <loop>:
  88:    21c00007     ldb    r7,0(r4)
  8c:    29c00005     stb    r7,0(r5)
  90:    21000044     addi    r4,r4,1
  94:    29400044     addi    r5,r5,1
  98:    383ffb1e     bne    r7,zero,88 <loop>
  9c:    32000017     ldw    r8,0(r6)
  a0:    32000117     ldw    r8,4(r6)
  a4:    32000217     ldw    r8,8(r6)

000000a8 <end>:
  a8:    003fff06     br    a8 <end>

Data Section Contents


Hex dump of section '.data':
  0x000002b0 676e6972 74732061 20736920 73696854 This is a string
  0x000002c0 ffffffff 01020304 8a0b8c0d 00000000 ................
  0x000002d0 00000598 0000053c 00000000 aaaaaaaa ........<.......
  0x000002e0 00000000 00000000 00000000 000005f4 ................
  0x000002f0 00000000 00000000 00000000 00000000 ................
  0x00000300 00000000 000002ac 00000000 00000000 ................
 

Simulation

0x00000030 <main>:          0x01000034  movhi r4, 0 [dstData=0x0 dstReg=r4]
0x00000034 <main+0x4>:      0x2100b114  ori r4, r4, 708 [dstData=0x2c4 dstReg=r4]
0x00000038 <main+0x8>:      0x21c00003  ldbu r7, 0(r4) [memAddr=0x2c4 ldData=0xd dstReg=r7]
0x0000003c <main+0xc>:      0x22000043  ldbu r8, 1(r4) [memAddr=0x2c5 ldData=0x8c dstReg=r8]
0x00000040 <main+0x10>:     0x22400083  ldbu r9, 2(r4) [memAddr=0x2c6 ldData=0xb dstReg=r9]
0x00000044 <main+0x14>:     0x228000c3  ldbu r10, 3(r4) [memAddr=0x2c7 ldData=0x8a dstReg=r10]
0x00000048 <high2>:         0x01000034  movhi r4, 0 [dstData=0x0 dstReg=r4]
0x0000004c <high2+0x4>:     0x2100b114  ori r4, r4, 708 [dstData=0x2c4 dstReg=r4]
0x00000050 <high2+0x8>:     0x21c0000f  ldh r7, 0(r4) [memAddr=0x2c4 ldData=0xffff8c0d dstReg=r7]
0x00000054 <high2+0xc>:     0x21c0030d  sth r7, 12(r4) [memAddr=0x2d0 stData=0x8c0d]
0x00000058 <high2+0x10>:    0x21c0008f  ldh r7, 2(r4) [memAddr=0x2c6 ldData=0xffff8a0b dstReg=r7]
0x0000005c <high2+0x14>:    0x21c0038d  sth r7, 14(r4) [memAddr=0x2d2 stData=0x8a0b]
0x00000060 <high2+0x18>:    0x21c0000b  ldhu r7, 0(r4) [memAddr=0x2c4 ldData=0x8c0d dstReg=r7]
0x00000064 <high2+0x1c>:    0x21c0020d  sth r7, 8(r4) [memAddr=0x2cc stData=0x8c0d]
0x00000068 <high2+0x20>:    0x21c0008b  ldhu r7, 2(r4) [memAddr=0x2c6 ldData=0x8a0b dstReg=r7]
0x0000006c <high2+0x24>:    0x21c0028d  sth r7, 10(r4) [memAddr=0x2ce stData=0x8a0b]
0x00000070 <high2+0x28>:    0x22000217  ldw r8, 8(r4) [memAddr=0x2cc ldData=0x8a0b8c0d dstReg=r8]
0x00000074 <high2+0x2c>:    0x22000317  ldw r8, 12(r4) [memAddr=0x2d0 ldData=0x8a0b8c0d dstReg=r8]
0x00000078 <copy>:          0x01000034  movhi r4, 0 [dstData=0x0 dstReg=r4]
0x0000007c <copy+0x4>:      0x2100ac14  ori r4, r4, 688 [dstData=0x2b0 dstReg=r4]
0x00000080 <copy+0x8>:      0x21401404  addi r5, r4, 80 [dstData=0x300 dstReg=r5]
0x00000084 <copy+0xc>:      0x280d883a  mov r6, r5 [dstData=0x300 dstReg=r6]
0x00000088 <loop>:          0x21c00007  ldb r7, 0(r4) [memAddr=0x2b0 ldData=0x54 dstReg=r7]
0x0000008c <loop+0x4>:      0x29c00005  stb r7, 0(r5) [memAddr=0x300 stData=0x54]
0x00000090 <loop+0x8>:      0x21000044  addi r4, r4, 1 [dstData=0x2b1 dstReg=r4]
0x00000094 <loop+0xc>:      0x29400044  addi r5, r5, 1 [dstData=0x301 dstReg=r5]
0x00000098 <loop+0x10>:     0x383ffb1e  bne r7, r0, 0x88 <loop> [passed]
0x00000088 <loop>:          0x21c00007  ldb r7, 0(r4) [memAddr=0x2b1 ldData=0x68 dstReg=r7]
0x0000008c <loop+0x4>:      0x29c00005  stb r7, 0(r5) [memAddr=0x301 stData=0x68]
0x00000090 <loop+0x8>:      0x21000044  addi r4, r4, 1 [dstData=0x2b2 dstReg=r4]
0x00000094 <loop+0xc>:      0x29400044  addi r5, r5, 1 [dstData=0x302 dstReg=r5]
0x00000098 <loop+0x10>:     0x383ffb1e  bne r7, r0, 0x88 <loop> [passed]
0x00000088 <loop>:          0x21c00007  ldb r7, 0(r4) [memAddr=0x2b2 ldData=0x69 dstReg=r7]
0x0000008c <loop+0x4>:      0x29c00005  stb r7, 0(r5) [memAddr=0x302 stData=0x69]
0x00000090 <loop+0x8>:      0x21000044  addi r4, r4, 1 [dstData=0x2b3 dstReg=r4]
0x00000094 <loop+0xc>:      0x29400044  addi r5, r5, 1 [dstData=0x303 dstReg=r5]
0x00000098 <loop+0x10>:     0x383ffb1e  bne r7, r0, 0x88 <loop> [passed]
0x00000088 <loop>:          0x21c00007  ldb r7, 0(r4) [memAddr=0x2b3 ldData=0x73 dstReg=r7]
0x0000008c <loop+0x4>:      0x29c00005  stb r7, 0(r5) [memAddr=0x303 stData=0x73]
0x00000090 <loop+0x8>:      0x21000044  addi r4, r4, 1 [dstData=0x2b4 dstReg=r4]
0x00000094 <loop+0xc>:      0x29400044  addi r5, r5, 1 [dstData=0x304 dstReg=r5]
0x00000098 <loop+0x10>:     0x383ffb1e  bne r7, r0, 0x88 <loop> [passed]
0x00000088 <loop>:          0x21c00007  ldb r7, 0(r4) [memAddr=0x2b4 ldData=0x20 dstReg=r7]
0x0000008c <loop+0x4>:      0x29c00005  stb r7, 0(r5) [memAddr=0x304 stData=0x20]
0x00000090 <loop+0x8>:      0x21000044  addi r4, r4, 1 [dstData=0x2b5 dstReg=r4]
0x00000094 <loop+0xc>:      0x29400044  addi r5, r5, 1 [dstData=0x305 dstReg=r5]
0x00000098 <loop+0x10>:     0x383ffb1e  bne r7, r0, 0x88 <loop> [passed]
0x00000088 <loop>:          0x21c00007  ldb r7, 0(r4) [memAddr=0x2b5 ldData=0x69 dstReg=r7]
0x0000008c <loop+0x4>:      0x29c00005  stb r7, 0(r5) [memAddr=0x305 stData=0x69]
0x00000090 <loop+0x8>:      0x21000044  addi r4, r4, 1 [dstData=0x2b6 dstReg=r4]
0x00000094 <loop+0xc>:      0x29400044  addi r5, r5, 1 [dstData=0x306 dstReg=r5]
0x00000098 <loop+0x10>:     0x383ffb1e  bne r7, r0, 0x88 <loop> [passed]
0x00000088 <loop>:          0x21c00007  ldb r7, 0(r4) [memAddr=0x2b6 ldData=0x73 dstReg=r7]
0x0000008c <loop+0x4>:      0x29c00005  stb r7, 0(r5) [memAddr=0x306 stData=0x73]
0x00000090 <loop+0x8>:      0x21000044  addi r4, r4, 1 [dstData=0x2b7 dstReg=r4]
0x00000094 <loop+0xc>:      0x29400044  addi r5, r5, 1 [dstData=0x307 dstReg=r5]
0x00000098 <loop+0x10>:     0x383ffb1e  bne r7, r0, 0x88 <loop> [passed]
0x00000088 <loop>:          0x21c00007  ldb r7, 0(r4) [memAddr=0x2b7 ldData=0x20 dstReg=r7]
0x0000008c <loop+0x4>:      0x29c00005  stb r7, 0(r5) [memAddr=0x307 stData=0x20]
0x00000090 <loop+0x8>:      0x21000044  addi r4, r4, 1 [dstData=0x2b8 dstReg=r4]
0x00000094 <loop+0xc>:      0x29400044  addi r5, r5, 1 [dstData=0x308 dstReg=r5]
0x00000098 <loop+0x10>:     0x383ffb1e  bne r7, r0, 0x88 <loop> [passed]
0x00000088 <loop>:          0x21c00007  ldb r7, 0(r4) [memAddr=0x2b8 ldData=0x61 dstReg=r7]
0x0000008c <loop+0x4>:      0x29c00005  stb r7, 0(r5) [memAddr=0x308 stData=0x61]
0x00000090 <loop+0x8>:      0x21000044  addi r4, r4, 1 [dstData=0x2b9 dstReg=r4]
0x00000094 <loop+0xc>:      0x29400044  addi r5, r5, 1 [dstData=0x309 dstReg=r5]
0x00000098 <loop+0x10>:     0x383ffb1e  bne r7, r0, 0x88 <loop> [passed]
0x00000088 <loop>:          0x21c00007  ldb r7, 0(r4) [memAddr=0x2b9 ldData=0x20 dstReg=r7]
0x0000008c <loop+0x4>:      0x29c00005  stb r7, 0(r5) [memAddr=0x309 stData=0x20]
0x00000090 <loop+0x8>:      0x21000044  addi r4, r4, 1 [dstData=0x2ba dstReg=r4]
0x00000094 <loop+0xc>:      0x29400044  addi r5, r5, 1 [dstData=0x30a dstReg=r5]
0x00000098 <loop+0x10>:     0x383ffb1e  bne r7, r0, 0x88 <loop> [passed]
0x00000088 <loop>:          0x21c00007  ldb r7, 0(r4) [memAddr=0x2ba ldData=0x73 dstReg=r7]
0x0000008c <loop+0x4>:      0x29c00005  stb r7, 0(r5) [memAddr=0x30a stData=0x73]
0x00000090 <loop+0x8>:      0x21000044  addi r4, r4, 1 [dstData=0x2bb dstReg=r4]
0x00000094 <loop+0xc>:      0x29400044  addi r5, r5, 1 [dstData=0x30b dstReg=r5]
0x00000098 <loop+0x10>:     0x383ffb1e  bne r7, r0, 0x88 <loop> [passed]
0x00000088 <loop>:          0x21c00007  ldb r7, 0(r4) [memAddr=0x2bb ldData=0x74 dstReg=r7]
0x0000008c <loop+0x4>:      0x29c00005  stb r7, 0(r5) [memAddr=0x30b stData=0x74]
0x00000090 <loop+0x8>:      0x21000044  addi r4, r4, 1 [dstData=0x2bc dstReg=r4]
0x00000094 <loop+0xc>:      0x29400044  addi r5, r5, 1 [dstData=0x30c dstReg=r5]
0x00000098 <loop+0x10>:     0x383ffb1e  bne r7, r0, 0x88 <loop> [passed]
0x00000088 <loop>:          0x21c00007  ldb r7, 0(r4) [memAddr=0x2bc ldData=0x72 dstReg=r7]
0x0000008c <loop+0x4>:      0x29c00005  stb r7, 0(r5) [memAddr=0x30c stData=0x72]
0x00000090 <loop+0x8>:      0x21000044  addi r4, r4, 1 [dstData=0x2bd dstReg=r4]
0x00000094 <loop+0xc>:      0x29400044  addi r5, r5, 1 [dstData=0x30d dstReg=r5]
0x00000098 <loop+0x10>:     0x383ffb1e  bne r7, r0, 0x88 <loop> [passed]
0x00000088 <loop>:          0x21c00007  ldb r7, 0(r4) [memAddr=0x2bd ldData=0x69 dstReg=r7]
0x0000008c <loop+0x4>:      0x29c00005  stb r7, 0(r5) [memAddr=0x30d stData=0x69]
0x00000090 <loop+0x8>:      0x21000044  addi r4, r4, 1 [dstData=0x2be dstReg=r4]
0x00000094 <loop+0xc>:      0x29400044  addi r5, r5, 1 [dstData=0x30e dstReg=r5]
0x00000098 <loop+0x10>:     0x383ffb1e  bne r7, r0, 0x88 <loop> [passed]
0x00000088 <loop>:          0x21c00007  ldb r7, 0(r4) [memAddr=0x2be ldData=0x6e dstReg=r7]
0x0000008c <loop+0x4>:      0x29c00005  stb r7, 0(r5) [memAddr=0x30e stData=0x6e]
0x00000090 <loop+0x8>:      0x21000044  addi r4, r4, 1 [dstData=0x2bf dstReg=r4]
0x00000094 <loop+0xc>:      0x29400044  addi r5, r5, 1 [dstData=0x30f dstReg=r5]
0x00000098 <loop+0x10>:     0x383ffb1e  bne r7, r0, 0x88 <loop> [passed]
0x00000088 <loop>:          0x21c00007  ldb r7, 0(r4) [memAddr=0x2bf ldData=0x67 dstReg=r7]
0x0000008c <loop+0x4>:      0x29c00005  stb r7, 0(r5) [memAddr=0x30f stData=0x67]
0x00000090 <loop+0x8>:      0x21000044  addi r4, r4, 1 [dstData=0x2c0 dstReg=r4]
0x00000094 <loop+0xc>:      0x29400044  addi r5, r5, 1 [dstData=0x310 dstReg=r5]
0x00000098 <loop+0x10>:     0x383ffb1e  bne r7, r0, 0x88 <loop> [passed]
0x00000088 <loop>:          0x21c00007  ldb r7, 0(r4) [memAddr=0x2c0 ldData=0x0 dstReg=r7]
0x0000008c <loop+0x4>:      0x29c00005  stb r7, 0(r5) [memAddr=0x310 stData=0x0]
0x00000090 <loop+0x8>:      0x21000044  addi r4, r4, 1 [dstData=0x2c1 dstReg=r4]
0x00000094 <loop+0xc>:      0x29400044  addi r5, r5, 1 [dstData=0x311 dstReg=r5]
0x00000098 <loop+0x10>:     0x383ffb1e  bne r7, r0, 0x88 <loop> [failed]
0x0000009c <loop+0x14>:     0x32000017  ldw r8, 0(r6) [memAddr=0x300 ldData=0x73696854 dstReg=r8]
0x000000a0 <loop+0x18>:     0x32000117  ldw r8, 4(r6) [memAddr=0x304 ldData=0x20736920 dstReg=r8]
0x000000a4 <loop+0x1c>:     0x32000217  ldw r8, 8(r6) [memAddr=0x308 ldData=0x74732061 dstReg=r8]
0x000000a8 <end>:           0x003fff06  br 0xa8 <end>


Maintained by John Loomis, last updated Wed Oct 29 22:53:29 2008