.include /mit/6.004/bsim/beta.uasm .include /mit/6.004/bsim/lab5checkoff.uasm count_bull_cows: PUSH(LP) PUSH(BP) MOVE(SP, BP) |.breakpoint LD(BP, -12, R0) LD(BP, -16, R1) | PUSH(R0) | a PUSH(R1) | b PUSH(R2) | bulls PUSH(R3) | cows PUSH(R4) | i PUSH(R5) | j PUSH(R6) | mask PUSH(R7) | tmp PUSH(R8) | tmp PUSH(R9) | tmp PUSH(R10) | atry PUSH(R11) | btemp; PUSH(R12) | btry; CMOVE(0, R2) CMOVE(0, R3) |.breakpoint CMOVE(0xF, R6) CMOVE(0,R4) bullsloop: AND(R6, R0, R7) AND(R6, R1, R8) CMPEQ(R7, R8, R9) BEQ(R9, nobull) ADDC(R2, 1, R2) OR(R0, R6, R0) OR(R1, R6, R1) nobull: SHLC(R6, 4, R6) ADDC(R4, 1, R4) CMPLTC(R4, 4, R9) BNE(R9, bullsloop) |.breakpoint CMOVE(0, R4) cowsloop: ANDC(R0, 0xF, R10) SHRC(R0, 4, R0) CMPEQC(R10, 0xF, R9) BNE(R9, bull) MOVE(R1, R11) CMOVE(0xF, R6) CMOVE(0, R5) jloop: ANDC(R11, 0xF, R12) SHRC(R11, 4, R11) CMPEQ(R10, R12, R9) BEQ(R9, nocow) ADDC(R3, 1, R3) OR(R1, R6, R1) BEQ(R31, endjloop) nocow: SHLC(R6, 4, R6) ADDC(R5, 1, R5) CMPLTC(R5, 4, R9) BNE(R9, jloop) endjloop: bull: ADDC(R4, 1, R4) CMPLTC(R4, 4, R9) BNE(R9, cowsloop) |.breakpoint SHLC(R2, 4, R0) ADD(R3, R0, R0) POP(R12) POP(R11) POP(R10) POP(R9) POP(R8) POP(R7) POP(R6) POP(R5) POP(R4) POP(R3) POP(R2) POP(R1) MOVE(BP,SP) POP(BP) POP(LP) RTN() StackBase: LONG(.+4) . = .+0x1000