;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)