Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can a program compiled to machine language run on different machines?

In school we've been taught that compilers compile a computer program to machine language. We've also been taught that the machine language consists of direct instructions to the hardware. Then how can the same compiled program run on several computer configurations with different hardware?

like image 672
Boris Marinov Avatar asked May 09 '12 17:05

Boris Marinov


People also ask

How programs are translated into the machine language?

A compiler takes the program code (source code) and converts the source code to a machine language module (called an object file). Another specialized program, called a linker, combines this object file with other previously compiled object files (in particular run-time modules) to create an executable file.

Is machine language the same on all machines?

The exact machine language for a program or action can differ by operating system. The specific operating system dictates how a compiler writes a program or action into machine language. Computer programs are written in one or more programming languages, like C++, Java, or Visual Basic.

How does a program run on a complete machine?

How Does a Program Run? The CPU runs instructions using a "fetch-execute" cycle: the CPU gets the first instruction in the sequence, executes it (adding two numbers or whatever), then fetches the next instruction and executes it, and so on.

Is machine code different for each CPU?

Machine code does not depend on OS, it's same for the same CPU.


1 Answers

Depends what you mean by 'different hardware' if it is the same processor (or same family eg Intel x86) then the machine code instructions are the same.

If the extra hardware is different peripherals (screens, disks printers etc) then the operating system hides those details by giving you a consistent set of instructions to drive them

If you mean, how can you run a program for an ARM cpu on an Intel x86, then you can't - except by some sort of virtual machine emulator that reads each of the ARM instructions and either translates them into x86 or runs the same functionality as a set of x86 funcs and then returns the same answer that the ARM ones would have done.

Edit: I assume you mean PCs with different hw - ie different peripherals but the same processor family?

Talking to hardware doesn't involve specific instructions as such - it's mostly a matter of moving memory to specific locations where the operating system and/or device driver have specifically reserved for data going to that device. In the old days of DOS and BIOS you would then trigger an interupt to call a specific bit of code in the BIOS to act on that data and send it to the HW.

like image 68
Martin Beckett Avatar answered Oct 01 '22 04:10

Martin Beckett