Download: isa5.zip
This code tests the call, callr, jmp, and ret instructions. It also tests the nextpc instruction.
Entries from 0x00 through 0x0b was deleted.
.include "./nios_macros.m" .text .global main .type main, @function main: movi r6,16 movi r7,13 mov r4,r6 mov r5,r7 call max mov r4,r6 sub r5,r0,r7 # r5 = -13 movia r8,sign callr r8 mov r4,r7 sub r5,r0,r6 call max movia r8,test jmp r8 end: br end /* wait here once the program has completed */ test: movi r4,4 movi r5,8 call max nextpc r2 movia r8,end jmp r8 max: blt r4,r5,m1 # if r4 < r5 skip mov r2,r4 # else return r4 ret m1: mov r2,r5 # return r5 ret sign: bge r4,r0,m2 # if r4 >= 0 skip sub r4,r0,r4 # r4 = -r4 m2: blt r5,r0,m3 # if (r5 < 0) skip mov r2,r4 # return abs(r4) ret m3: sub r2,r0,r4 # return -abs(r4) ret .end
#!/bin/sh name="isa5" nios2-elf-gcc ${name}.s nios2-elf-size a.out > ${name}.size.txt nios2-elf-objdump -dS a.out > ${name}.disassemble.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
text data bss dec hex filename 706 896 0 1602 642 a.out
a.out: file format elf32-littlenios2 Disassembly of section .text: 00000030 <main>: 30: 01800404 movi r6,16 34: 01c00344 movi r7,13 38: 3009883a mov r4,r6 3c: 380b883a mov r5,r7 40: 00000900 call 90 <max> 44: 3009883a mov r4,r6 48: 01cbc83a sub r5,zero,r7 4c: 02000034 movhi r8,0 50: 42002914 ori r8,r8,164 54: 403ee83a callr r8 58: 3809883a mov r4,r7 5c: 018bc83a sub r5,zero,r6 60: 00000900 call 90 <max> 64: 02000034 movhi r8,0 68: 42001d14 ori r8,r8,116 6c: 4000683a jmp r8 00000070 <end>: 70: 003fff06 br 70 <end> 00000074 <test>: 74: 01000104 movi r4,4 78: 01400204 movi r5,8 7c: 00000900 call 90 <max> 80: 0004e03a nextpc r2 84: 02000034 movhi r8,0 88: 42001c14 ori r8,r8,112 8c: 4000683a jmp r8 00000090 <max>: 90: 21400216 blt r4,r5,9c <m1> 94: 2005883a mov r2,r4 98: f800283a ret 0000009c <m1>: 9c: 2805883a mov r2,r5 a0: f800283a ret 000000a4 <sign>: a4: 2000010e bge r4,zero,ac <m2> a8: 0109c83a sub r4,zero,r4 000000ac <m2>: ac: 28000216 blt r5,zero,b8 <m3> b0: 2005883a mov r2,r4 b4: f800283a ret 000000b8 <m3>: b8: 0105c83a sub r2,zero,r4 bc: f800283a ret
0x00000030 <main>: 0x01800404 movi r6, 16 [dstData=0x10 dstReg=r6] 0x00000034 <main+0x4>: 0x01c00344 movi r7, 13 [dstData=0xd dstReg=r7] 0x00000038 <main+0x8>: 0x3009883a mov r4, r6 [dstData=0x10 dstReg=r4] 0x0000003c <main+0xc>: 0x380b883a mov r5, r7 [dstData=0xd dstReg=r5] 0x00000040 <main+0x10>: 0x00000900 call 0x90 <max> [dstData=0x44 dstReg=ra] 0x00000090 <max>: 0x21400216 blt r4, r5, 0x9c <m1> [failed] 0x00000094 <max+0x4>: 0x2005883a mov r2, r4 [dstData=0x10 dstReg=r2] 0x00000098 <max+0x8>: 0xf800283a ret [targetPcb=0x44] 0x00000044 <main+0x14>: 0x3009883a mov r4, r6 [dstData=0x10 dstReg=r4] 0x00000048 <main+0x18>: 0x01cbc83a sub r5, r0, r7 [dstData=0xfffffff3 dstReg=r5] 0x0000004c <main+0x1c>: 0x02000034 movhi r8, 0 [dstData=0x0 dstReg=r8] 0x00000050 <main+0x20>: 0x42002914 ori r8, r8, 164 [dstData=0xa4 dstReg=r8] 0x00000054 <main+0x24>: 0x403ee83a callr r8 <sign> [dstData=0x58 dstReg=ra targetPcb=0xa4] 0x000000a4 <sign>: 0x2000010e bge r4, r0, 0xac <m2> [passed] 0x000000ac <m2>: 0x28000216 blt r5, r0, 0xb8 <m3> [passed] 0x000000b8 <m3>: 0x0105c83a sub r2, r0, r4 [dstData=0xfffffff0 dstReg=r2] 0x000000bc <m3+0x4>: 0xf800283a ret [targetPcb=0x58] 0x00000058 <main+0x28>: 0x3809883a mov r4, r7 [dstData=0xd dstReg=r4] 0x0000005c <main+0x2c>: 0x018bc83a sub r5, r0, r6 [dstData=0xfffffff0 dstReg=r5] 0x00000060 <main+0x30>: 0x00000900 call 0x90 <max> [dstData=0x64 dstReg=ra] 0x00000090 <max>: 0x21400216 blt r4, r5, 0x9c <m1> [failed] 0x00000094 <max+0x4>: 0x2005883a mov r2, r4 [dstData=0xd dstReg=r2] 0x00000098 <max+0x8>: 0xf800283a ret [targetPcb=0x64] 0x00000064 <main+0x34>: 0x02000034 movhi r8, 0 [dstData=0x0 dstReg=r8] 0x00000068 <main+0x38>: 0x42001d14 ori r8, r8, 116 [dstData=0x74 dstReg=r8] 0x0000006c <main+0x3c>: 0x4000683a jmp r8 [targetPcb=0x74] 0x00000074 <test>: 0x01000104 movi r4, 4 [dstData=0x4 dstReg=r4] 0x00000078 <test+0x4>: 0x01400204 movi r5, 8 [dstData=0x8 dstReg=r5] 0x0000007c <test+0x8>: 0x00000900 call 0x90 <max> [dstData=0x80 dstReg=ra] 0x00000090 <max>: 0x21400216 blt r4, r5, 0x9c <m1> [passed] 0x0000009c <m1>: 0x2805883a mov r2, r5 [dstData=0x8 dstReg=r2] 0x000000a0 <m1+0x4>: 0xf800283a ret [targetPcb=0x80] 0x00000080 <test+0xc>: 0x0004e03a nextpc r2 [dstData=0x84 dstReg=r2] 0x00000084 <test+0x10>: 0x02000034 movhi r8, 0 [dstData=0x0 dstReg=r8] 0x00000088 <test+0x14>: 0x42001c14 ori r8, r8, 112 [dstData=0x70 dstReg=r8] 0x0000008c <test+0x18>: 0x4000683a jmp r8 [targetPcb=0x70] 0x00000070 <end>: 0x003fff06 br 0x70 <end>
Maintained by John Loomis, last updated Wed Oct 29 23:10:46 2008