;Alto->8086 small-c compiler rev 2.0
C←CODE SEGMENT
$INCLUDE(8086LIB.D)
$INCLUDE(random.DEC)
ASSUME CS:C←CODE, DS:C←DATA
; extern int rindex, rtable[33];
; random()
←random:
CALL StkChk
PUSH BP
MOV BP,SP
; {
; int new;
; if (rindex >= 13) new = rtable[rindex-13];
PUSH DX
MOV BX,←rindex
CMP BX,0DX
JL X1
MOV BX,←rindex
ADD BX,0FFF3X
LEA CX,←rtable
SAL BX
ADD BX,CX
MOV CX,[BX]
; ←new ← CX
POP DX
PUSH CX
; else new = rtable[rindex+20];
JR X2
X1:
MOV BX,←rindex
ADD BX,014X
LEA CX,←rtable
SAL BX
ADD BX,CX
MOV CX,[BX]
; ←new ← CX
POP DX
PUSH CX
X2:
; new = rtable[rindex] = new + rtable[rindex];
MOV BX,←rindex
LEA CX,←rtable
SAL BX
ADD BX,CX
MOV CX,←rindex
LEA AX,←rtable
SAL CX
ADD CX,AX
MOV DI,CX
MOV CX,[DI]
; AX ← ←new
POP AX
PUSH AX
ADD AX,CX
MOV [BX],AX
; ←new ← AX
POP DX
PUSH AX
; rindex = ( rindex + 1 ) % 33;
MOV BX,←rindex
INC BX
MOV AX,BX
MOV BX,021X
CWD
IDIV AX,BX
MOV AX,DX
MOV ←rindex,AX
; return (new);
; BX ← ←new
POP BX
PUSH BX
MOV SP,BP
POP BP
RET;
; };
MOV SP,BP
POP BP
RET;
; Externals Declared Here
PUBLIC ←random
C←CODE ENDS
; Number of Bytes of Code = 071X, (113)