isa4

Download: isa4.zip

This code tests the branch instructions. It is the first example with instructions executed in non-sequential order.

Contents

Source
Shell script
Disassembler output
Simulation

Source: isa4.s

.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

Shell script

#!/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

Disassembler output

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>

Simulation

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