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