<<<--- % Author M.Ruckert LOC Data_Segment m IS 3 n IS 2 GREG @ U OCTA 0,0,0,0,1,#FF00FF m + n V OCTA 12,0,#EE00EE n Q OCTA 7,7,7,7,#DD00DD m+1 LOC #100 Main LDA $1,U LDA $2,V LDA $3,Q SET $4,m+n SET $5,n PUSHJ $0,:ShiftLeft TRAP 0,Halt,0 --->>> PREFIX :ShiftLeft: % Shift left array \.X of \.n octabyte by \.d bit. Return last \.{carry}. X IS $0 Parameter n IS $1 d IS $2 i IS $1 shares register with \.n dm IS $3 $64-d$ carry IS $4 Return value xi IS $5 tmp IS $6 :ShiftLeft NEG dm,64,d Shift $x$ left $d$ bits. SET carry,0 8ADDU X,n,X; SLU i,n,3; NEG i,i 0H LDOU xi,X,i Load $x_i$. SLU tmp,xi,d; OR tmp,tmp,carry Shift and add carry. STOU tmp,X,i Store $x_i$ SRU carry,xi,dm New carry. ADD i,i,8 PBN i,0B SET $0,carry POP 1,0