Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // reserved: r13, r14, r15
- // r0 = racc
- // r13 = rshamt
- // r14 = rresult
- // r15 = raddr (previous pc + 2 of caller)
- // r2 = b15..b8
- // r1 = b7..0
- // Initialize data input/output pointers
- bringi 10
- move r10
- bringi 20
- move r11
- FOR:
- // Load input
- bringi 1 // decrement
- move r7
- bring r10
- sub r7
- move r10
- load r10 // load MSW part
- move r2
- bringi 1 // decrement
- move r7
- bring r10
- sub r7
- move r10
- load r10 // load LSW part
- move r1
- // Calculate output
- // Calculate b15' - b8' (index = index - 8)
- // Calculate b15' = b10
- // rresult = getBit()
- bring r2 // getBit(input reg)
- move rresult
- bringi 2 // getBit(index) 10 - 8 = 2
- move r12
- branch GET_BIT
- // append bit to output
- bringi 1
- move rshamt
- bring r4
- sl rshamt
- move r4
- bring r4
- xor rresult
- move r4
- // Calculate b14' = b9
- // rresult = getBit()
- bring r2 // getBit(input reg)
- move rresult
- bringi 1 // getBit(index) 9 - 8 = 1
- move r12
- branch GET_BIT
- // append bit to output
- bringi 1
- move rshamt
- bring r4
- sl rshamt
- move r4
- bring r4
- xor rresult
- move r4
- // Calculate b13' = b8
- // rresult = getBit()
- bring r2 // getBit(input reg)
- move rresult
- bringi 0 // getBit(index)
- move r12
- branch GET_BIT
- // append bit to output
- bringi 1
- move rshamt
- bring r4
- sl rshamt
- move r4
- bring r4
- xor rresult
- move r4
- // Calculate b12' = b7
- // rresult = getBit()
- bring r1 // getBit(input reg)
- move rresult
- bringi 7 // getBit(index)
- move r12
- branch GET_BIT
- // append bit to output
- bringi 1
- move rshamt
- bring r4
- sl rshamt
- move r4
- bring r4
- xor rresult
- move r4
- // Calculate b11' = b6
- // rresult = getBit()
- bring r1 // getBit(input reg)
- move rresult
- bringi 6 // getBit(index)
- move r12
- branch GET_BIT
- // append bit to output
- bringi 1
- move rshamt
- bring r4
- sl rshamt
- move r4
- bring r4
- xor rresult
- move r4
- // Calculate b10' = b5
- // rresult = getBit()
- bring r1 // getBit(input reg)
- move rresult
- bringi 5 // getBit(index)
- move r12
- branch GET_BIT
- // append bit to output
- bringi 1
- move rshamt
- bring r4
- sl rshamt
- move r4
- bring r4
- xor rresult
- move r4
- // Calculate b9' = b4
- // rresult = getBit()
- bring r1 // getBit(input reg)
- move rresult
- bringi 4 // getBit(index)
- move r12
- branch GET_BIT
- // append bit to output
- bringi 1
- move rshamt
- bring r4
- sl rshamt
- move r4
- bring r4
- xor rresult
- move r4
- // Calculate b8' = p7 = ^(b10:b4)
- // r5 = xor bits = 0
- bringi 0
- move r5
- // append b10 to r5
- // rresult = getBit()
- bring r2 // getBit(input reg)
- move rresult
- bringi 2 // getBit(index)
- move r12
- branch GET_BIT
- // append
- bringi 1
- move rshamt
- bring r5
- sl rshamt
- move r5
- bring r5
- xor rresult
- move r5
- // append b9 to r5
- // rresult = getBit()
- bring r2 // getBit(input reg)
- move rresult
- bringi 1 // getBit(index)
- move r12
- branch GET_BIT
- // append
- bringi 1
- move rshamt
- bring r5
- sl rshamt
- move r5
- bring r5
- xor rresult
- move r5
- // append b8 to r5
- // rresult = getBit()
- bring r2 // getBit(input reg)
- move rresult
- bringi 0 // getBit(index)
- move r12
- branch GET_BIT
- // append
- bringi 1
- move rshamt
- bring r5
- sl rshamt
- move r5
- bring r5
- xor rresult
- move r5
- // append b7 to r5
- // rresult = getBit()
- bring r1 // getBit(input reg)
- move rresult
- bringi 7 // getBit(index)
- move r12
- branch GET_BIT
- // append
- bringi 1
- move rshamt
- bring r5
- sl rshamt
- move r5
- bring r5
- xor rresult
- move r5
- // append b6 to r5
- // rresult = getBit()
- bring r1 // getBit(input reg)
- move rresult
- bringi 6 // getBit(index)
- move r12
- branch GET_BIT
- // append
- bringi 1
- move rshamt
- bring r5
- sl rshamt
- move r5
- bring r5
- xor rresult
- move r5
- // append b5 to r5
- // rresult = getBit()
- bring r2 // getBit(input reg)
- move rresult
- bringi 5 // getBit(index)
- move r12
- branch GET_BIT
- // append
- bringi 1
- move rshamt
- bring r5
- sl rshamt
- move r5
- bring r5
- xor rresult
- move r5
- // append b4 to r5
- // rresult = getBit()
- bring r2 // getBit(input reg)
- move rresult
- bringi 4 // getBit(index)
- move r12
- branch GET_BIT
- // append
- bringi 1
- move rshamt
- bring r5
- sl rshamt
- move r5
- bring r5
- xor rresult
- move r5
- // xor r5's bits among themselves
- rxor r5
- move rresult
- // append bit to output
- bringi 1
- move rshamt
- bring r4
- sl rshamt
- move r4
- bring r4
- xor rresult
- move r4
- // Store output
- bringi 1 // decrement
- move r7
- bring r11
- sub r7
- move r11
- bring r4
- str r11 // store MSW part
- bringi 1 // decrement
- move r7
- bring r11
- sub r7
- move r11
- bring r3
- str r11 // store LSW part
- bring r10
- bnez FOR
- END:
- halt
- // rresult = input & output, r12 = index
- GET_BIT:
- // sl rshamt = 7 - index
- bringi 7
- sub r12 // -= index
- move rshamt
- bring rresult
- sl rshamt
- move rresult
- // sr rshamt = 7
- bringi 7
- move rshamt
- bring rresult
- sr rshamt
- move rresult
- branch raddr
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement