Download: isa4.zip
This code tests the branch instructions. It is the first example with instructions executed in non-sequential order.
.include "./nios_macros.m" .text .global main .type main, @function main: movi r2,48 movi r3,55 blt r2,r3,LB LA: movi r4,3 # loop = 3 movi r5,0 # sum = 0 movi r3,0 # v = 0; LE: addi r3,r3,5 # v = v + 5 add r5,r5,r3 # sum += v; beq r4,r0,LD # if loop==0 break subi r4,r4,1 # loop-- br LE LD: blt r3,r5,end # okay, we're done LB: movi r4,37 sub r3,r2,r4 bge r2,r3,LC cmpne r5,r2,r3 cmpge r6,r3,r2 bne r5,r6,LA LC: movi32 r2,-6 movi32 r3,-18 bgeu r2,r3,LA end: br end /* wait here once the program has completed */ .end
#!/bin/sh nios2-elf-gcc isa4.s nios2-elf-size a.out nios2-elf-objdump -dS a.out > isa4.disassemble.txt nios2-elf-objcopy -S -O binary a.out isa4.bin nios2-iss -td:isa4.sim.txt --trace-from=main -f a.out
00000030 <main>: 30: 00800c04 movi r2,48 34: 00c00dc4 movi r3,55 38: 10c00916 blt r2,r3,60 <LB> 0000003c <LA>: 3c: 010000c4 movi r4,3 40: 01400004 movi r5,0 44: 00c00004 movi r3,0 00000048 <LE>: 48: 18c00144 addi r3,r3,5 4c: 28cb883a add r5,r5,r3 50: 20000226 beq r4,zero,5c <LD> 54: 213fffc4 addi r4,r4,-1 58: 003ffb06 br 48 <LE> 0000005c <LD>: 5c: 19400b16 blt r3,r5,8c <end> 00000060 <LB>: 60: 01000944 movi r4,37 64: 1107c83a sub r3,r2,r4 68: 10c0030e bge r2,r3,78 <LC> 6c: 10cac03a cmpne r5,r2,r3 70: 188c403a cmpge r6,r3,r2 74: 29bff11e bne r5,r6,3c <LA> 00000078 <LC>: 78: 00bffff4 movhi r2,65535 7c: 10bffe94 ori r2,r2,65530 80: 00fffff4 movhi r3,65535 84: 18fffb94 ori r3,r3,65518 88: 10ffec2e bgeu r2,r3,3c <LA> 0000008c <end>: 8c: 003fff06 br 8c <end>
0x00000030 <main>: 0x00800c04 movi r2, 48 [dstData=0x30 dstReg=r2] 0x00000034 <main+0x4>: 0x00c00dc4 movi r3, 55 [dstData=0x37 dstReg=r3] 0x00000038 <main+0x8>: 0x10c00916 blt r2, r3, 0x60 <LB> [passed] 0x00000060 <LB>: 0x01000944 movi r4, 37 [dstData=0x25 dstReg=r4] 0x00000064 <LB+0x4>: 0x1107c83a sub r3, r2, r4 [dstData=0xb dstReg=r3] 0x00000068 <LB+0x8>: 0x10c0030e bge r2, r3, 0x78 <LC> [passed] 0x00000078 <LC>: 0x00bffff4 movhi r2, 65535 [dstData=0xffff0000 dstReg=r2] 0x0000007c <LC+0x4>: 0x10bffe94 ori r2, r2, 65530 [dstData=0xfffffffa dstReg=r2] 0x00000080 <LC+0x8>: 0x00fffff4 movhi r3, 65535 [dstData=0xffff0000 dstReg=r3] 0x00000084 <LC+0xc>: 0x18fffb94 ori r3, r3, 65518 [dstData=0xffffffee dstReg=r3] 0x00000088 <LC+0x10>: 0x10ffec2e bgeu r2, r3, 0x3c <LA> [passed] 0x0000003c <LA>: 0x010000c4 movi r4, 3 [dstData=0x3 dstReg=r4] 0x00000040 <LA+0x4>: 0x01400004 movi r5, 0 [dstData=0x0 dstReg=r5] 0x00000044 <LA+0x8>: 0x00c00004 movi r3, 0 [dstData=0x0 dstReg=r3] 0x00000048 <LE>: 0x18c00144 addi r3, r3, 5 [dstData=0x5 dstReg=r3] 0x0000004c <LE+0x4>: 0x28cb883a add r5, r5, r3 [dstData=0x5 dstReg=r5] 0x00000050 <LE+0x8>: 0x20000226 beq r4, r0, 0x5c <LD> [failed] 0x00000054 <LE+0xc>: 0x213fffc4 addi r4, r4, -1 [dstData=0x2 dstReg=r4] 0x00000058 <LE+0x10>: 0x003ffb06 br 0x48 <LE> 0x00000048 <LE>: 0x18c00144 addi r3, r3, 5 [dstData=0xa dstReg=r3] 0x0000004c <LE+0x4>: 0x28cb883a add r5, r5, r3 [dstData=0xf dstReg=r5] 0x00000050 <LE+0x8>: 0x20000226 beq r4, r0, 0x5c <LD> [failed] 0x00000054 <LE+0xc>: 0x213fffc4 addi r4, r4, -1 [dstData=0x1 dstReg=r4] 0x00000058 <LE+0x10>: 0x003ffb06 br 0x48 <LE> 0x00000048 <LE>: 0x18c00144 addi r3, r3, 5 [dstData=0xf dstReg=r3] 0x0000004c <LE+0x4>: 0x28cb883a add r5, r5, r3 [dstData=0x1e dstReg=r5] 0x00000050 <LE+0x8>: 0x20000226 beq r4, r0, 0x5c <LD> [failed] 0x00000054 <LE+0xc>: 0x213fffc4 addi r4, r4, -1 [dstData=0x0 dstReg=r4] 0x00000058 <LE+0x10>: 0x003ffb06 br 0x48 <LE> 0x00000048 <LE>: 0x18c00144 addi r3, r3, 5 [dstData=0x14 dstReg=r3] 0x0000004c <LE+0x4>: 0x28cb883a add r5, r5, r3 [dstData=0x32 dstReg=r5] 0x00000050 <LE+0x8>: 0x20000226 beq r4, r0, 0x5c <LD> [passed] 0x0000005c <LD>: 0x19400b16 blt r3, r5, 0x8c <end> [passed] 0x0000008c <end>: 0x003fff06 br 0x8c <end>
Maintained by John Loomis, last updated Fri Apr 06 20:00:55 2007