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.
.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
#!/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
text data bss dec hex filename 686 932 0 1618 652 a.out
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
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
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>
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 ................
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