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.
.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
#!/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
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>
text data bss dec hex filename 662 932 0 1594 63a a.out
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
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.
Maintained by John Loomis,
last updated Tue Apr 10 15:17:44 2007Data 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>