isa5

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.

Contents

Source
Shell script
Size summary
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
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
 

Size

   text       data        bss        dec        hex    filename
    706        896          0       1602        642    a.out

Disassembler output


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

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 Wed Oct 29 23:10:46 2008