         Edinburgh IMP77 Compiler - Version 8.4-2024.12.18

     1  %begin
 0000 C8 00 00 01                           ENTER 0000,1
     2    %predicate zero(%integer i)
 0004 EB 00                                 JMP L1001
 0006                      L1002  EQU $
 0006 C8 00 00 02                           ENTER 0000,2
     3      ! current bug: %true and %false are not implemented but don''t complain
     4      ! %end generates return(0) instead of an error.
     5      %true %if i=0
 000A 8B 45 08                              MOV %EAX,[%EBP+8]
 000D 3D 00 00 00 00                        CMP %EAX,#0
 0012 75 00                                 JNE L1003
 0014 B8 FF FF FF FF                        MOV %EAX,#-1
 0019 C9                                    LEAVE
 001A C3                                    RET
 001B                      L1003  EQU $
     6      %false
 001B B8 00 00 00 00                        MOV %EAX,#0
 0020 C9                                    LEAVE
 0021 C3                                    RET
     7    %end
 0022                      L1001  EQU $
     8  
     9    %if zero(1) %start
 0022 6A 01                                 PUSH #1
 0024 E8 00 00                              CALL 'ZERO' (INTERNAL L1002 )
 0027 83 C4 04                              ADD %ESP,#4
 002A 3D 00 00 00 00                        CMP %EAX,#0
 002F 74 00                                 JE L1004
    10      %signal 15,15
 0031 B8 0A 00 00 00                        MOV %EAX,#10
 0036 50                                    PUSH %EAX
 0037 B8 0F 00 00 00                        MOV %EAX,#15
 003C 50                                    PUSH %EAX
 003D B8 0F 00 00 00                        MOV %EAX,#15
 0042 50                                    PUSH %EAX
 0043 31 C0                                 XOR %EAX,%EAX
 0045 50                                    PUSH %EAX
 0046 E8 0B 00                              CALL '_IMPSIGNAL' (EXTERN 11)
 0049 83 C4 10                              ADD %ESP,#16
    11    %finish
 004C                      L1004  EQU $
    12  
    13    %if zero(0) %start
 004C 6A 00                                 PUSH #0
 004E E8 00 00                              CALL 'ZERO' (INTERNAL L1002 )
 0051 83 C4 04                              ADD %ESP,#4
 0054 3D 00 00 00 00                        CMP %EAX,#0
 0059 74 00                                 JE L1005
    14      %stop
 005B B8 0E 00 00 00                        MOV %EAX,#14
 0060 50                                    PUSH %EAX
 0061 31 C0                                 XOR %EAX,%EAX
 0063 50                                    PUSH %EAX
 0064 31 C0                                 XOR %EAX,%EAX
 0066 50                                    PUSH %EAX
 0067 31 C0                                 XOR %EAX,%EAX
 0069 50                                    PUSH %EAX
 006A E8 0B 00                              CALL '_IMPSIGNAL' (EXTERN 11)
 006D 83 C4 10                              ADD %ESP,#16
    15    %finish
 0070                      L1005  EQU $
    16  
    17  %endofprogram
 0070 C9                                    LEAVE
 0071 C3                                    RET
