;Alto->8086 small-c compiler rev 2.0
C←CODE SEGMENT

$INCLUDE(8086LIB.D)

$INCLUDE(smallsig.DEC)

ASSUME CS:C←CODE, DS:C←DATA

; extern MyFrame();

; extern CallersFrame();

; extern ReturnLoc();

; extern ReturnTo();

; struct ssig {

;   int ssframe;

;   int ssenframe;

;   int sscontinue;

;   };

; int SSEnable(ss)
←SSEnable:

;   struct ssig *ss;
 CALL StkChk
PUSH BP
MOV BP,SP
PUSH BX

;   {

;   ss->ssenframe = MyFrame();

;	BX ← ←ss
POP BX
PUSH BX
PUSH BX
CALL ←MyFrame
MOV CX,BX
POP BX
MOV [BX+2],CX

;   ss->ssframe = CallersFrame(MyFrame());
CALL ←MyFrame
CALL ←CallersFrame
MOV CX,BX

;	BX ← ←ss
POP BX
PUSH BX
MOV [BX],CX

;   ss->sscontinue = ReturnLoc(MyFrame());

;	BX ← ←ss
POP BX
PUSH BX
PUSH BX
CALL ←MyFrame
CALL ←ReturnLoc
MOV CX,BX
POP BX
MOV [BX+4],CX

;   return(0);
XOR BX,BX
MOV SP,BP
POP BP
RET;

;   };

; int SSReturn(ss, result)
←SSReturn:

;   struct ssig *ss;

;   int result;
 CALL StkChk
PUSH BP
MOV BP,SP
PUSH CX
PUSH BX

;   {

;   ReturnTo(ss->ssenframe, ss->ssframe, ss->sscontinue, result);

;	BX ← ←ss
MOV BX,[BP-2]
MOV CX,[BX+2]
PUSH CX

;	DI ← ←ss
MOV DI,[BP-2]
MOV BX,[DI]
PUSH BX

;	BX ← ←ss
MOV BX,[BP-2]
MOV CX,[BX+4]

;	BX ← ←result
MOV BX,[BP-4]
CALL ←ReturnTo
ADD SP,4

;   };
MOV SP,BP
POP BP
RET;

; Externals Declared Here
PUBLIC ←SSEnable
PUBLIC ←SSReturn

C←CODE ENDS

; Number of Bytes of Code = 056X, (86)