产生小于等于 AX 的随机数, 返回: AX = 随机数, 并且 AX = 0 时返回 ZR
;
AX <> 0 时返回 NZ
9E80:1166 1E PUSH DS
9E80:1167 53 PUSH BX
9E80:1168 51 PUSH CX
9E80:1169 52 PUSH DX
9E80:116A 50 PUSH AX
9E80:116B 33C0 XOR AX,AX ;取系统时钟 (随机)
9E80:116D CD1A INT 1A ;返回 CX
X = 时钟计数
9E80:116F 0E PUSH CS
9E80:1170 1F POP DS
9E80:1171 E440 IN AL,40 ;取 8253 通道一计数器 (随机)
9E80:1173 91 XCHG AX,CX ;CL = 8253 随机数
9E80:1174 92 XCHG AX,DX ;DX:AX = 时钟随机数
9E80:1175 BB9C11 MOV BX,119C
9E80:1178 3107 XOR [BX],AX
9E80:117A D307 ROL Word Ptr [BX],CL
9E80:117C 330F XOR CX,[BX]
9E80:117E D3C0 ROL AX,CL
9E80:1180 3317 XOR DX,[BX]
9E80:1182 D3CA ROR DX,CL
9E80:1184 33C2 XOR AX,DX
9E80:1186 F7EA IMUL DX
9E80:1188 33C2 XOR AX,DX
9E80:118A 3107 XOR [BX],AX
9E80:118C 59 POP CX
9E80:118D 33D2 XOR DX,DX ;DX:AX = 随机数
9E80:118F 41 INC CX
9E80:1190 7403 JZ 1195
9E80:1192 F7F1 DIV CX
9E80:1194 92 XCHG AX,DX ;DX = 余数 (小于入口数的随机数)
9E80:1195 5A POP DX ;返回 AX = 随机数
9E80:1196 59 POP CX
9E80:1197 5B POP BX
9E80:1198 1F POP DS
9E80:1199 0BC0 OR AX,AX
9E80:119B C3 RET