Here’s a simple C example. All this code does is declare and initialize an integer, add another interger to it, and exit with the resulting sum as the return value. It doesn’t even print anything to screen, as that is more complex when you look under the hood.
The source code looks like this:
int main(void) {
int my_num = 2;
my_num += 2;
return my_num;
}
The compiler first translates this fairly readable code into “assembly” language:
.file "example.c"
.text
.globl main
.type main, @function
main:
leal 4(%esp), %ecx
andl $-16, %esp
pushl -4(%ecx)
pushl %ebp
movl %esp, %ebp
pushl %ecx
subl $16, %esp
movl $2, -8(%ebp)
addl $2, -8(%ebp)
movl -8(%ebp), %eax
addl $16, %esp
popl %ecx
popl %ebp
leal -4(%ecx), %esp
ret
.size main, .-main
.ident "GCC: (GNU) 4.1.2 20080704 (Red Hat 4.1.2-46)"
.section .note.GNU-stack,"",@progbits
You can already see that much of the human-language nature is lost forever. For instance, the variable name “my_num” is not present anymore.
The next stage is “object” code, which is binary, so all you get here is a hexdump: 
0000000 457f 464c 0101 0001 0000 0000 0000 0000
0000010 0001 0003 0001 0000 0000 0000 0000 0000
0000020 00d0 0000 0000 0000 0034 0000 0000 0028
0000030 0009 0006 4c8d 0424 e483 fff0 fc71 8955
0000040 51e5 ec83 c710 f845 0002 0000 4583 02f8
0000050 458b 83f8 10c4 5d59 618d c3fc 4700 4343
0000060 203a 4728 554e 2029 2e34 2e31 2032 3032
0000070 3830 3730 3430 2820 6552 2064 6148 2074
0000080 2e34 2e31 2d32 3634 0029 2e00 7973 746d
0000090 6261 2e00 7473 7472 6261 2e00 6873 7473
00000a0 7472 6261 2e00 6574 7478 2e00 6164 6174
00000b0 2e00 7362 0073 632e 6d6f 656d 746e 2e00
00000c0 6f6e 6574 472e 554e 732d 6174 6b63 0000
00000d0 0000 0000 0000 0000 0000 0000 0000 0000
*
00000f0 0000 0000 0000 0000 001b 0000 0001 0000
0000100 0006 0000 0000 0000 0034 0000 0028 0000
0000110 0000 0000 0000 0000 0004 0000 0000 0000
0000120 0021 0000 0001 0000 0003 0000 0000 0000
0000130 005c 0000 0000 0000 0000 0000 0000 0000
0000140 0004 0000 0000 0000 0027 0000 0008 0000
0000150 0003 0000 0000 0000 005c 0000 0000 0000
0000160 0000 0000 0000 0000 0004 0000 0000 0000
0000170 002c 0000 0001 0000 0000 0000 0000 0000
0000180 005c 0000 002e 0000 0000 0000 0000 0000
0000190 0001 0000 0000 0000 0035 0000 0001 0000
00001a0 0000 0000 0000 0000 008a 0000 0000 0000
00001b0 0000 0000 0000 0000 0001 0000 0000 0000
00001c0 0011 0000 0003 0000 0000 0000 0000 0000
00001d0 008a 0000 0045 0000 0000 0000 0000 0000
00001e0 0001 0000 0000 0000 0001 0000 0002 0000
00001f0 0000 0000 0000 0000 0238 0000 0080 0000
0000200 0008 0000 0007 0000 0004 0000 0010 0000
0000210 0009 0000 0003 0000 0000 0000 0000 0000
0000220 02b8 0000 0010 0000 0000 0000 0000 0000
0000230 0001 0000 0000 0000 0000 0000 0000 0000
0000240 0000 0000 0000 0000 0001 0000 0000 0000
0000250 0000 0000 0004 fff1 0000 0000 0000 0000
0000260 0000 0000 0003 0001 0000 0000 0000 0000
0000270 0000 0000 0003 0002 0000 0000 0000 0000
0000280 0000 0000 0003 0003 0000 0000 0000 0000
0000290 0000 0000 0003 0005 0000 0000 0000 0000
00002a0 0000 0000 0003 0004 000b 0000 0000 0000
00002b0 0028 0000 0012 0001 6500 6178 706d 656c
00002c0 632e 6d00 6961 006e
00002c8
This is what you’ve got on your Windows box.
I’ve experimented with de-compiling programs in the past, and it’s pretty much a futile effort, as so much useful abstraction and language is irrevocable lost during compilation.