isa5

Download: isa5.zip

This code tests the call, callr, jmp, and ret instructions. It also tests the nextpc instruction.

Contents

Source
Shell script
Disassembler output
Simulation

Source: isa5.s

.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

Shell script

#!/bin/sh
nios2-elf-gcc isa5.s
nios2-elf-size a.out
nios2-elf-objdump -dS a.out > isa5.disassemble.txt
nios2-elf-objcopy -S -O binary a.out a5.bin
nios2-iss -td:isa5.sim.txt --trace-from=main -f a.out

Disassembler output

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

Simulation

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 Fri Apr 06 19:53:06 2007