;;; ORG $00 ;;; BATNUM game, By sdlin 8417042 @csie.nctu ;;; Run ON SISC by tsaiwn@csie.nctu.edu.tw 2100 ;R1<==00H; LDI 1,00 ; w000: 2206 ;R2<==06H; LDI 2,06 ;at most 5 stones 2401 ;R4<==01H; LDI 4,01 2514 ;R5<==14H, LDI 5,14; let num = decimal 20 2FFF ;RF<==FFH ;LDI F,ff (= -1) ; w008: D68E ;PutS 8E; print "BatNum :" D68A ;PutS 8A; print CR/LF D698 ;PutS 98; print "By sdlin 8417042 D68A ;PutS 8A; print CR/LF ; w010: ;BEGIN -->12h D6AC ;print "Now , we have 4050 ; MOV 5,0 D300 ;PUTi ;print num in R0 D68A ;PutS 8A; print CR/LF ; w018: D6C2 ;PutS c2; print "You pick ? " D200 ;GETi; read a pick number. 4008 ;move R0 to R8, save the input number F081 ;CMP 8, 1; compare the pick num to 0 ; W020: F112 ;JLT 12; , < 0 F212 ;JEQ 12; , = 0 F082 ;CMP 8,2 ; R2 is 6 F312 ;JGT 12; > 6 ; W028 F212 ;JEQ 12; = 6 F085 ;CMP 8, 5 ; Judge pick num; R5=14h F312 ;JGT 12; > 14h ;; now compute R5 - R8 (total - pick) 908F ;XOR 0,8,f ; R0:= (R8: 1->0, 0->1) ; W030 5004 ;ADD 0,0,4 ; R0 := R0+1 5005 ;ADD 0,0,5 ; R0:=R0+R5; is the #of Stones remain 4005 ;MOV 0,0,5 ; copy the remain num into R5 F051 ;CMP R5,R1 ; R5=remain, R1=0 ; W038 F27A ;JEQ MEWIN ; 0 stones left, I win 5A5F ;ADD A,5,F ; RA := R5 - 1; (remain) 402B ; RB:=R2; #6 F0A2 ;CMP A,2 ;judge the remain with #6 ; W040 F152 ;JLT ok; jump ok if remain < 6 ;AGAIN-->W044h 90BF ;XOR 0,B,F; R0: = (RB: 1->0, 0-> 1) 5004 ;ADD 0,0,4; R0:= R0+1; ;W048: 500A ;ADD 0,0,A; R0:=R0+RA 400A ;product remain F0AB ;CMP A,b ;judge the remain with F152 ;JLT ok; jump ok B044 ;jump again ; W050 ;ok: -->W052h F0A1 ;judge the remain with F268 ;jump ok2 D6CE ;print "I pick" 40A0 ; w058 D300 ;print my get D68A ;CR/LF 90AF ; xor operation 5004 ; w060 5005 4005 ;leave num = leave num B074 ;jump turn ;ok2: -->W068h ;W068h: 5AA4 ; w068 D6CE ;print "I pick" 40A0 D300 ;print my get D68A ;CR/LF ; W070 555F ;turn: -->W074h F051 ;judge the leave num w F282 ;jump USERWIN B012 ;jump begin ; W078 ;MEWIN: -->W07Ah D6D6 ;print "I win !" (PutS D6) D68A ;CR/LF C000 ;HALT FFFF ; W080 ;W082h: ;USERWIN: -->W082h D6DE ;print "You win !" ; W082 D68A ;CR/LF C000 FFFF ; W088 ; 0D0A ; == CR/LF ; W08Ah 2424 ;$$ 4261 ;W08Eh, data of "BatNum : 744E ;tN ; W090 756D ;um 2021 ; ! 2424 ;$$ 4279 ;W098h, data of "By sdlin ; W098 2073 646C 696E 2038 ; 8 ; W0A0 3431 ;41 3730 ;70 3432 ;42 2021 ; ! ; W0A8 2424 ;$$ ; String terminated by '$' 4E6F ;w0ACh, data of "Now , we 7720 2C20 ; W0B0 7765 2068 6176 6520 ; W0B8 6E75 6D62 6572 2424 ;$$ ; W0C0 596F ;W0C2h, .data "You pick ? $" 7520 7069 636B ; W0C8 203F 2024 ; $ 4920 ;W0CEh, .data "I pick $" 7069 ; W0D0 636B 2024 ; $ 4920 ;W0D6h, .data "I win !$" ;W0D6 7769 ;'wi' ; W0D8 6E20 ;'n ' 2124 ;'!$' 596F ;W0DEh, 'Yo', .data "You win!$' 7520 ;'u ' ; W0E0 7769 ;'wi' 6E20 ;'n ' 2124 ;!$ ; String terminated by '$' ; W0E8 ;.END