.define .sar .define .lar .define .aar !register usage: ! a0 : descriptor address ! d0 : index ! a1 : base address .text .aar: move.l (sp)+,d2 ! return address move.l (sp)+,a0 move.w (sp)+,d0 move.l (sp)+,a1 sub (a0),d0 ! index - lower bound : relative index !chk 2(a0),d0 !blt 9f !cmp 2(a0),d0 !bgt 9f mulu 4(a0),d0 ! total # bytes add d0,a1 ! address of element move.l a1,-(sp) move.l d2,-(sp) rts .lar: move.l (sp)+,d2 ! return address move.l (sp)+,a0 move.w (sp)+,d0 move.l (sp)+,a1 sub (a0),d0 !chk 2(a0),d0 !blt 9f !cmp 2(a0),d0 !bgt 9f move 4(a0),d1 mulu d1,d0 add d0,a1 add d1,a1 asr #1,d1 bne 3f clr d1 move.b -(a1),d1 move d1,-(sp) bra 4f 3: move -(a1),-(sp) sub #1,d1 bgt 3b 4: move.l d2,-(sp) rts !9: !move.w #EARRAY,-(sp) !jmp .fat .sar: move.l (sp)+,d2 move.l (sp)+,a0 move.w (sp)+,d0 move.l (sp)+,a1 sub (a0),d0 !chk 2(a0),d0 !blt 9b !cmp 2(a0),d0 !bgt 9b move 4(a0),d1 mulu d1,d0 add d0,a1 asr #1,d1 bne 3f move (sp)+,d1 move.b d1,(a1) bra 4f 3: move (sp)+,(a1)+ sub #1,d1 bgt 3b 4: move.l d2,-(sp) rts