         Edinburgh IMP77 Compiler - Version 8.4-2024.12.18

     1  %begin
 0000 C8 00 00 01                           ENTER 0000,1
     2    %integer res, fred, jim
     3    fred = 1
 0004 C7 45 F4 01 00 00 00                  MOV DWORD PTR [%EBP-12],#1
     4    jim = fred + 2
 000B 8B 45 F4                              MOV %EAX,[%EBP-12]
 000E 05 02 00 00 00                        ADD %EAX,#2
 0013 89 45 F0                              MOV [%EBP-16],%EAX
     5    ! how do you do integer exponentiation?
     6    res = ((fred * jim) + jim) - ((fred << jim) // jim)
 0016 8B 45 F4                              MOV %EAX,[%EBP-12]
 0019 F7 6D F0                              IMUL DWORD PTR [%EBP-16]
 001C 03 45 F0                              ADD %EAX,[%EBP-16]
 001F 8B 4D F0                              MOV %ECX,[%EBP-16]
 0022 8B 55 F4                              MOV %EDX,[%EBP-12]
 0025 D3 E2                                 SHL %EDX,%ECX
 0027 89 45 EC                              MOV [%EBP-20],%EAX
 002A 89 D0                                 MOV %EAX,%EDX
 002C 99                                    CWD
 002D F7 7D F0                              IDIV DWORD PTR [%EBP-16]
 0030 8B 4D EC                              MOV %ECX,[%EBP-20]
 0033 29 C1                                 SUB %ECX,%EAX
 0035 89 4D F8                              MOV [%EBP-8],%ECX
     7    res = fred >> (fred ! jim) & jim;
 0038 8B 45 F4                              MOV %EAX,[%EBP-12]
 003B 0B 45 F0                              OR %EAX,[%EBP-16]
 003E 89 C1                                 MOV %ECX,%EAX
 0040 8B 45 F4                              MOV %EAX,[%EBP-12]
 0043 D3 E8                                 SHR %EAX,%ECX
 0045 23 45 F0                              AND %EAX,[%EBP-16]
 0048 89 45 F8                              MOV [%EBP-8],%EAX
     8  %endofprogram
 004B C9                                    LEAVE
 004C C3                                    RET
