Gizmos Needs You

Gizmo's Freeware is Recruiting

 We are looking for people with skills or interest in the following areas:
 -  Mobile Platform App Reviews for Android and iOS
 -  Windows, Mac and Linux software reviews       Interested? Click here

                  

 

32-bit and 64-bit explained

Will this 32-bit software run on my 64-bit operating system? or

Will this 64-bit software run on my computer?

If you've asked these questions then this tutorial should help you to understand the concepts of 32-bit and 64-bit computing. We'll look at your computer system as three parts: the hardware, the operating system and the application programs. At the end we'll look at some of the common questions people have.

32-bit versus 64-bit

As the number of bits increases there are two important benefits.

  • More bits means that data can be processed in larger chunks which also means more accurately.
  • More bits means our system can point to or address a larger number of locations in physical memory.

32-bit systems were once desired because they could address (point to) 4 Gigabytes (GB) of memory in one go. Some modern applications require more than 4 GB of memory to complete their tasks so 64-bit systems are now becoming more attractive because they can potentially address up to 4 billion times that many locations.

Since 1995, when Windows 95 was introduced with support for 32-bit applications, most of the software and operating system code has been 32-bit compatible.

Here is the problem, while most of the software available today is 32-bit, the processors we buy are almost all 64-bit.

So how long will the transition from 32-bit to 64-bit systems take?

The main issue is that your computer works from the hardware such as the processor (or CPU, as it is called), through the operating system (OS), to the highest level which is your applications. So the computer hardware is designed first, the matching operating systems are developed, and finally the applications appear.

We can look back at the transition from 16-bit to 32-bit Windows on 32-bit processors. It took 10 years (from 1985 to 1995) to get a 32-bit operating system and even now, more than 15 years later, there are many people still using 16-bit Windows applications on older versions of Windows.

The hardware and software vendors learnt from the previous transition, so the new operating systems have been released at the same time as the new processors. The problem this time is that there haven't been enough 64-bit applications. Ten years after the PC's first 64-bit processors, installs of 64-bit Windows finally exceeded installs of 32-bit Windows. Further evidence of this inertia is that you are probably reading this tutorial because you are looking to install your first 64-bit software.

Your computer system in three parts

Now we'll look at those three components of your system. In simple terms they are three layers with the processor or CPU as the central or lowest layer and the application as the outermost or highest layer as shown below:

Processor, OS and application hierarchy

To run a 64-bit operating system you need support from the lower level: the 64-bit CPU.

To run a 64-bit application you need support from all lower levels: the 64-bit OS and the 64-bit CPU.

This simplification will be enough for us to look what happens when we mix the 32-bit and 64-bit parts. But if you want to understand the issue more deeply then you will also need to consider the hardware that supports the CPU and the device drivers that allow the OS and the applications to interface with the system hardware.

What 32-bit and 64-bit combinations are compatible and will work together?

This is where we get to the practicalities and can start answering common questions.

The general rule is that 32-bit will run on a lower level 64-bit component but 64-bit does not run on a lower level 32-bit component:

  • A 32-bit OS will run on a 32-bit or 64-bit processor without any problem.
  • A 32-bit application will run on a 32-bit or 64-bit OS without any problem.
  • But a 64-bit application will only run on a 64-bit OS and a 64-bit OS will only run on a 64-bit processor.

These two tables illustrate the same rule:

Table 1 — What is compatible if I have a 32-bit CPU?
Processor (CPU) 32-bit 32-bit 32-bit 32-bit
Operating System (OS) 32-bit 32-bit 64-bit 64-bit
Application Program 32-bit 64-bit 32-bit 64-bit
  Yes No No No
 
Table 2 — What is compatible if I have a 64-bit CPU?
Processor (CPU) 64-bit 64-bit 64-bit 64-bit
Operating System (OS) 64-bit 64-bit 32-bit 32-bit
Application Program 64-bit 32-bit 32-bit 64-bit
  Yes Yes Yes No

The main reason that 32-bit will always run on 64-bit is that the 64-bit components have been designed to work that way. So the newer 64-bit systems are backward-compatible with the 32-bit systems (which is the main reason most of us haven't moved to 64-bit software).

An example of backward compatibility is Windows 64-bit. It has software called WOW64 that provides compatibility by emulating a 32-bit system. See the article How Windows 7 / Vista 64 Support 32-bit Applications if you want to know more. One important point that is made in that article is that it is not possible to install a 32-bit device driver on a 64-bit operating system. This is because device drivers run in parallel to the operating system. The emulation is done at the operating system level so it is available to the higher layer, the application, but it is not available to the device driver which runs on the same level.

Hardware virtualization is the exception to the rule

Another question many people have is whether a 32-bit system can run 64-bit software. As more people are looking to use 64-bit Windows they are wanting to try it out on their existing systems. So we are getting more questions about whether they can run it on their 32-bit processor or under their 32-bit OS.

Following the general rule, we would expect that you cannot run 64-bit software on a 32-bit system. Except that there is one exception called virtualization.

Virtualization creates a virtual system within the actual system. Virtualization can be achieved in hardware or software but it works best if the virtual machine is created in the system hardware. The guest operating system is not aware that there is a host operating system already running. This is the way that a 64-bit operating system can think that it is running on 64-bit hardware without being aware that there is a 32-bit operating system in the mix.

Tables 3 and 4 illustrate the result. Provided that the virtual machine can actually be created and isolated by the virtualizing software then the host OS is effectively removed from the equation, so I've grayed it out. We can now apply the general rules for a non-virtualized system to the three remaining layers.

Table 3 — What is compatible if I have a 32-bit CPU and software virtualization?
Processor (CPU) 32-bit 32-bit 32-bit 32-bit
Host Operating System 32-bit 32-bit 32-bit 32-bit
Guest Operating System 32-bit 32-bit 64-bit 64-bit
Application Program 32-bit 64-bit 32-bit 64-bit
  Yes No No No
 
Table 4 — What is compatible if I have a 64-bit CPU and software virtualization?
Processor (CPU) 64-bit 64-bit 64-bit 64-bit
Host Operating System 32/64-bit 32/64-bit 32/64-bit 32/64-bit
Guest Operating System 64-bit 64-bit 32-bit 32-bit
Application Program 64-bit 32-bit 32-bit 64-bit
  Yes Yes Yes No

Before you hurry away to try running 64-bit in a virtual machine, you must check that your computer BIOS supports hardware virtualization. If it does not then hardware virtualization will not work even if the CPU does support it.

Emulation of the 64-bit CPU is not an option

All the feasible configurations that we have looked at so far have the processors (CPUs) running software that use the instruction set that is native to that processor. Running 64-bit software on a 32-bit processor doesn't work because the 64-bit instructions are not native to a 32-bit processor. But what if I could emulate a 64-bit processor using 32-bit software?

It is theoretically possible but practically impossible to emulate a 64-bit processor while running software on a 32-bit processor. Even if you can get non-native 64-bit emulation to work, the virtual machine that duplicates a 64-bit CPU would run very slowly because every 64-bit instruction has to be trapped and handled by the emulator. 64-bit memory pointers also have to be converted to work within the 32-bit address space.

Furthermore, my understanding is that the x86 (32-bit) processors used in PCs and Apple Macs are not able to completely emulate the x64 (64-bit) instruction set. Some 64-bit instructions cannot be trapped by the emulator. This causes the system to crash when the x86 processor tried to run those x64 instructions.

 

Answers to common questions about 32-bit and 64-bit systems

Will a 64-bit CPU run a 32-bit program on a 64-bit version of an OS?

Yes it will. 64-bit systems are backward-compatible with their 32-bit counterparts.

Will a 64-bit OS run a 32-bit application on a 64-bit processor?

Yes it will. Again, this is because of backward compatibility.

Can 64-bit applications contain 32-bit code?

Yes, many times 64-bit software will contain portions of 32-bit code.

Similarly 32-bit software (usually very old programs) can have some code in 16-bit which is why those 32-bit applications will usually fail to run properly on a 64-bit OS.

Can 16-bit applications or code run on 64-bit systems?

No, as we said previously. 16-bit code will NOT run on 64-bit OS because the designers did not provide backward-compatibility. This is one reason why some 32-bit programs will not work on 64-bit operating systems.

Can a 64-bit CPU with a 32-bit host OS run a virtual machine (VM) for a 64-bit guest OS?

Yes. It all depends upon the level of virtualization.

With software virtualization it is hardly likely to work, or if it does work it may be very slow.

Hardware virtualization will need to be supported by the CPU (e.g. with Intel-VT or AMD-V) and the BIOS.

 

Answers to common questions about 32- and 64-bit Windows

Can I run Windows 2000 and Windows XP on a 64-bit CPU, and use old software?

Yes, a 32-bit OS (Windows 2000 or XP) will run on a 64-bit processor.You should also be able to run older 32-bit software on a 64-bit OS.

Is a Windows Vista or Windows 7 license key valid for both 32-bit and 64-bit versions?

Yes, unless you have an OEM version. If it was installed on your computer when you bought it and you only have one Windows disk then it is almost certainly an OEM version and you will have to buy the other bit version if you want it. If you have two disks, one for 32-bit Windows and one for 64-bit Windows, then you have a non-OEM version so you get to choose which bit version you will use without having to buy another license. See Microsoft Answers for a discussion of these issues.

Remember, if you have only bought one license then, even if you have both bit versions on disk, you are only licensed to install and run one version on one computer.

How do find out if my system is 64-bit?

Microsoft provide resources to help you find out such as FAQ on 32-bit and 64-bit Windows and Taking the mystery our of 64-bit Windows.

I recommend that you look at downloading SecurAble from Gibson Research Corporation (GRC) which will tell you if you have a 64-bit processor with the useful features of hardware DEP and hardware virtualization.

How do I migrate my 32-bit system to 64-bit Windows?

There is no upgrade path from 32-bit to 64-bit Windows only from 64-bit Windows. You will almost certainly have to do a clean install of your 64-bit operating system, copy back your data files, and reinstall your 32-bit applications.

If you want to keep your old install then you can try dual booting or virtualization.

How do I run 32-bit software once I have installed 64-bit Windows?

Windows 7 64-bit provides a 32-bit compatibility mode called WOW32 (Windows 32-bit on Windows 64-bit) that should run most if not all your applications. See How Windows 64-bit supports 32-bit Applications.

If you have 32-bit application you want to run from the Command Prompt then you need to use the WOW64 version of cmd.exe. At the Start Menu select Run and enter the following command. Note that the %systemroot% variable points to your Windows folder so this will work even if Windows is not installed on C: drive:

%systemroot%\SysWOW64\cmd.exe

If your application won't run under Windows 64-bit then try XP Mode, Windows Virtual PC, or other virtualization solution. Be aware that XP Mode reduces your system security and so it should be used as a last resort.

How can I tell if my application is 32-bit or 64-bit?

There are a number of indicators of the bit type for your program but they are not definitive as you will see if you use guidelines like the following.

  • Windows installs your programs to these folders on your system drive:
    • '\Program Files' for 64-bit programs
    • '\Program Files (x86)' for 32-bit programs
  • In Task Manager, 32-bit processes will usually have a suffix of '*32' and 64-bit processes will not.

The reason that these indicators cannot be relied upon relates to the way 64-bit Windows installs software. 64-bit install packages usually install 64-bit applications or a mixture of 32- and 64-bit components but can even install only 32-bit components.

What determines where a component is installed is the registry setting for that component rather than the setting for the install package. Windows also assumes that all components are 32-bit unless told otherwise. This means that a 64-bit component not flagged as 64-bit will install to 32-bit folders and 32-bit registry keys but will execute as 64-bit.

You can, with the necessary knowledge, find the information yourself but there are better solutions:

  • Run a system information or audit tool such as Belarc Adviser. Just be aware that most of these types of applications are helpful but not definitive e.g. SIW, MSINFO.
  • Windows 64-bit Task Manager indicates 32-bit applicationsIf the software is running then you can use the Task Manager: As shown in the example screenshot, 32-bit processes are usually indicated with "(32-bit)" beside the name in Windows 8 or "*32" in Windows 7.
  • If you want more detail about the modules used by a program then try Dependency Walker, which is also part of Microsoft development tools such as Visual Studio and Visual C++. As with other software running under 64-bit Windows you will get the best results if you run the 32- or 64-bit version of Dependency Walker that matches the application you want to check. Remember that Windows 64-bit restricts access to the relevant 32-bit or 64-bit portions of the registry.
  • The Windows Software Development Kit (SDK) tool DumpBin can be used. If the SDK is installed run Windows SDK Command Prompt and enter the following command. Examples of the program path are "C:\Windows\System32\cmd.exe" which is the Windows command prompt and "C:\Program Files (x86)\Mozilla Firefox\Firefox.exe" which is a 32-bit web browser. The quotation marks are not needed unless the program path contains spaces like the Firefox example..
dumpbin /headers "program path"
  • Process Explorer can display process propertiesTools like Microsoft Process Explorer are often used to replace the Task Manager. They provide a lot more information and features. Process Explorer can display the process properties or you can add the Image Type column to the process view as in the screenshot to the right..
  • I used to recommend running the PowerShell script from Auditing 32-Bit and 64-Bit Applications with PowerShell. Unless you already use PowerShell this will be a lot more hassle. It lists all installed applications and their bitness where they are correctly registered in the registry. The script has been updated to have one version that runs in both 32-bit or 64-bit Windows but it now requires PowerShell 2.0. That's no problem if you are running Windows 7 or 8 but will have to be downloaded if your Windows version is XP or Vista. If you are a first time user of PowerShell then the following instructions will help you to get it going..

You can check the version by running PowerShell and typing the following command into the console. This example indicates version 4 because it is provided in Windows 8.1.:

PS C:\Users\Me> $PSVersionTable.PSVersion

Major  Minor  Build  Revision
-----  -----  -----  --------
4      0      -1     -1

PowerShell scripts are restricted from running by default run the powershell console as administrator and temporarily allow the script to run by entering the command "set-executionpolicy unrestricted"  - you will have to confirm that you want to be able to run scripts. Then you will need to remember to turn it off with the command "set-executionpolicy restricted":

PS C:\WINDOWS\system32> set-executionpolicy unrestricted
Execution Policy Change
The execution policy helps protect you from scripts that you do not trust.
Changing the execution policy might expose you to the security risks described in 
the about_Execution_Policies help topic at http://go.microsoft.com/fwlink/?LinkID=135170.
Do you want to change the execution policy?
[Y] Yes  [N] No  [S] Suspend  [?] Help (default is "Y"): Y


To run the script unzip "Get-InstalledApps.PS1.TXT" and remove the ".TXT" so Windows will recognize the application as PowerShell. Then create a shortcut to it and in the shortcut's Target field insert "powershell.exe -noexit" before the path to the file. You can also redirect the console text output to a text file by appending " > installedapps.txt". It's easier to browse the file than viewing it as it streams to the display.

What are the differences between Windows 32-bit and 64-bit?

I've chosen to highlight the physical and logical differences between each version of desktop Windows as shown in Table 5. This table illustrates the progressive improvement of Windows 64-bit and indicates that Windows has a long way to go before it exhausts the capabilities of 64-bit processors.

Many of the limits in the 64-bit versions of Windows are design choices rather than limitations of the 64-bit CPUs. The number of physical processors is the most obvious as Windows Server editions support many more.

Hardware is also limited by design. For example, while 64-bit AMD and Intel CPUs use 64-bit  memory pointers, the supporting chipsets only use a 52-bit physical address space (4 Petabytes) and a 48-bit virtual memory space (256 Terabytes). This is presently more than sufficient because Windows 7 64-bit only allows 192 GB of physical memory and 16 Terabytes (44-bits) of virtual memory.

Table 5: Physical and Logical limits for Windows Versions
Numbers in parentheses indicate extended settings that are not the default and require compatible hardware
Version: XP Vista 7
Version Bits: 32 64 32 64 32 64
System:            
Physical Processors 2 2 2 2 2 2
Logical Processors 32 64 32 64 32 256
System Cache 1 GB 1,024 GB 1 (2) GB 1,024 GB 1 (2) GB 1,024 GB
Physical Memory 4 GB 128 GB 4 GB 128 GB 4 GB 192 GB
Virtual Memory 4 GB 16,384 GB 4 GB 16,384 GB 4 GB 16,384 GB
Kernel 1 (2) GB 8 GB 2 GB 8 GB 2 GB 8 GB
User Process:            
Physical Memory 2 (3) GB 2 (4) GB 2 (3) GB 8 GB 2 (4) GB 8 GB
Virtual Memory 2 (3) GB 2 (8,192) GB 2 (3) GB 2 (8,192) GB 2 (4) GB 2 (8,192) GB

Note 1. I have used Gigabytes (GB) for consistency even though it would be convenient to convert  1,024 GB to 1 TB.

Note 2. I've excluded the first 64-bit version of Windows XP (2002) because it has a different architecture. It used Intel Itanium (IA-64) CPUs which had an x86 processor built-in for compatibility. It was replaced by AMD's 64-bit architecture (x86-64) which extended the x86 instruction set and worked so well that it has been licensed by Intel and other chip makers. The name is commonly shortened to x64 as it is the most common 64-bit CPU type today.

 

Related Links

Help with terminology

 

Share this
4.449135
Average: 4.4 (521 votes)
Your rating: None

Comments

by Remah on 13. July 2014 - 10:52  (117298)

This article has been updated with more examples of how to find out if software is 32-bit or 64-bit. Screenshots have been added for Task Manager and Process Explorer.

Remah - Article Editor

by exus69 on 10. April 2013 - 7:00  (106951)

Excellent article :) I think there's a small mistake in the following para. Please correct me if I am wrong. The original is as follows:

"One important point that is made in that article is that it is not possible to install a 32-bit device driver on a 64-bit operating system. This is because device drivers run in parallel to the operating system. The emulation is done at the operating system level so it is available to the higher layer, the application, but it is not available to the device driver which runs on the same level."

The corrected one, which I think should be is as follows:

"One important point that is made in that article is that it is not possible to install a 32-bit device driver on a 64-bit operating system. This is because device drivers run in parallel to the operating system. The emulation is done at the application program level so it is available to the higher layer, the application, but it is not available to the device driver which runs on the same level."

by Remah on 11. April 2013 - 5:48  (106981)

"The emulation is done at the operating system level" not at "the application program level". This is because the emulator has to intercept operating system calls. If the emulator were an application program then it would not normally have sufficient privilege to interfere with the operating system or to supervise other application programs.

by Alerocks (not verified) on 10. November 2012 - 5:41  (102102)

Thanks for the info, it helps me alot.

by Mamta (not verified) on 9. November 2012 - 6:55  (102056)

Hi,
Recently I have purchased a dell laptop of 2nd gen/i3/2gb/500gb/DOS specification,where the architecture is 32 bit.Im confused about the fact whether buying a 32 bit system has greater disadvantages over a 64 bit system & whether installation of programs like windows XP & running linux based applications is possible or not.Will I be at a loss in terms of scope of operation & installation?????Plz help..

Thanks in advance,
Mamta

by Remah on 9. November 2012 - 10:07  (102061)

This is not a support forum so you will need to check your system compatibility at intel.com and dell.com.

As far as I know, all 2nd generation Core i3 processors are 64-bit, Dell only sells them with 64-bit Windows 7, and Windows XP will not install on them except in a virtual machine.

Personally, I would not replace Windows 7 so I would install other operating systems, such as XP and Linux, by multi-booting or running in virtual machines.

In general, if your system has 4GB of memory/RAM then 64-bit Windows will make better use of it. I don't recommend downgrading your system but if your concern is backward compatibility then 32-bit Windows might be more compatible.

by Mamta (not verified) on 16. November 2012 - 5:45  (102389)

Thanks a lot.....Your suggestions are really helpful.

by Mirza Abbas Ali (not verified) on 3. November 2012 - 19:13  (101811)

Dear Sir I purchased a H.P. Lap Top which has 64-bit system. Further I purchased on line Microsft Office Professional HUP 2010 one month ago. Till date Microsoft is not able to solve my problem instead they are running me in a Marry Go Round they send me 2 Files 32-bit and one 3rd file 64-bit and I had been sending them the snipe shots of the Error message & My system details but they are ignoring to my e mails. I am not a computer litrate,of at least by reading the Error message I can figure out that Microsoft has to send me all 3 files of 64-bit to install on my new lap top and run the system but I fail to under what is wrong with Microsoft why they are not understanding my ERROR message could you please reply me to my e mail. [Email address removed for safety reasons - please post requests for support in our forum]

http://www.techsupportalert.com/freeware-forum/general-computer-support/

by Remah on 6. November 2012 - 6:20  (101939)

Sorry but I can't help you. We do not provide any support for paid applications as this site is dedicated to freeware. Even if it was free software, your issue is too specific to address in these comments and you would have to post on our support forum.

by Roger Beltz (not verified) on 18. October 2012 - 0:05  (100938)

Your article explaining 31-bit / 64-bit architecture is very good, however, you have neglected one important aspect in respect to computers and operating systems - a Mac computer. Contrary to misconception, their are millions of Mac users (who, I might add) would NEVER own a PC). If you are going to delve into discussion about operating systems and specific models of computers, Apple/Mac computers should definitely be included in the discussion........and, I might also add, before discussing Mac computers and Mac operating systems, one should conduct extensive research into Mac products to insure one is getting all the facts correct.

by Remah on 18. October 2012 - 6:31  (100961)

Thanks. If you have comments about specific points in the article then I'd also like to hear them.

When I have the time I expect to add sections for other operating systems and hardware platforms. The highest priorities would be the proliferating mobile platforms and the continuing development of UNIX/Linux variants such as Android. But Apple PCs might get done first because of the similar Intel-based hardware.

I definitely want to make the article less Windows-centric but that focus is a practical necessity to reduce my workload. If I didn't have the Windows FAQ section then I would be continually answering many common questions in the comments.

This is neither unfair nor biased. The difference in PC market share is an order of magnitude. Windows generally has at least 80% of worldwide PC sales and users whereas Apple typically had less than 5%. In the US, Apple has been around 10% for many years and I'm sure that it has finally reached 5% worldwide. Linux PCs are further back at somewhere around 2-3%.

by sri (not verified) on 5. October 2012 - 4:14  (100305)

good information

by Midhun (not verified) on 22. September 2012 - 13:04  (99595)

Presentation of information is so good.
Highlighting the key differences is good.

Keep up the good work

by Remah on 23. September 2012 - 1:11  (99626)

Thanks all for the compliments. There is still room for improving the existing article and I will be adding more info later this year.

by Gilson Chapple (not verified) on 11. September 2012 - 19:17  (99124)

The very best information I have ever come across on the subject. Concise, and well written so that even a novice can understand.
This guy can write a bit!
Brilliant!
G.C.

by BallyIrish on 11. April 2014 - 17:45  (115625)

I say "hear, hear" to that!!! A beautiful and expert article. Thank you.

by Shylesh (not verified) on 4. September 2012 - 9:27  (98736)

Thanks a lot. Now I understood clearly the difference between 32 and 64 bit systems. I tried to increase the RAM of MySQL server from 4GB to 6GB, thinking that, it will boost the performance, but system itself was not recognizing the change, because it is 32 bit system. Your article is wonderful. Thanks :)

by Remah on 4. September 2012 - 11:41  (98742)

You may be able to use Physical Address Extension (PAE) to address more than 4GB in Linux and Mac OS X.

PAE increases the address size from 32-bits to 36-bits or more so you could use 64GB or more. Your system BIOS will usually support it if it displays the correct total of 6GB RAM.

Windows 32-bit uses PAE but locks in the 4GB limit. There are utilities that remove this limit but I don't recommend using them as Pushing the Limits of Windows: Physical Memory explains.

If you're running MySQL on Windows then can use Address Windowing Extensions (AWE) which is supported by MSQL. AWE increases the maximum size of a user process from 2GB to 3GB which is what I have indicated in Table 5 of this article. It would give a 50% increase in addressable RAM for MySQL but you will find that it should give a greater increase in the memory available to your MySQL application. Running MySQL on Windows with 4 GB of RAM explains this in more detail.

Just remember it doesn't work on all editions of 32-bit Windows, it prevents MySQL using Windows pagefile, and you have to recompile MySQL.

by Pd (not verified) on 28. August 2012 - 8:31  (98400)

Really A very well scripted Article. Thank you for sharing.
But still I have a confusion related to i7-2860qm it comes with only 64 bit supported. I understand its required 64-bit OS now question is that can I run 32bit or any old applications on 2860qm processor with 64 bit OS.

Thanks

by Remah on 28. August 2012 - 8:57  (98402)

The i7-2860qm is just another Intel 64-bit processor. The processor itself is backward compatible with 32-bit and 16-bit code but the operating system will determine what you can actually run.

Windows 7 64-bit will run most 32-bit applications but will not support 32-bit device drivers or any 16-bit code.

by DaveJB (not verified) on 21. August 2012 - 20:45  (98078)

Thanks for this great article.

I have a question. As I'd learned, the machine code contains a statement code, and the address with interpreting flags or anything. Now I see that 64 bits architectures use 64 bits wide address "path", I don't know how wide the address bus is. But: if 64 bits words are used for reaching billitrillibits of RAM, I would really like to know how long the address code is, and generally what are contained is that. I guess that "current 64-bit processors are generally limited to 40-bit physical address space" could mean that the statement code is stored on 16 bits and the address on 40/48 bits, but at this case the memory range is only 2^40 bytes high.

Briefly: how does a 64 bits machine code sturture looks? I couldn't fine any answer for this anywhere.

by Remah on 22. August 2012 - 1:35  (98094)

As I responded to the earlier question, your question falls outside the focus and the main audience of this article. Even so I'll address some important points that other users may find relevant.

I suggest that you start with http://en.wikipedia.org/wiki/AMD64#Virtual_address_space_details because it summarizes operating modes with the sizes you are interested in.

Machine code and assembler are the lowest level computer languages where each instruction/statement corresponds to an operation of the processor. Each instruction/statement has an operation (op) code and various operands (typically none to three). The operands specify the data to be operated on and the data itself. Machine code uses binary instruction codes and binary data. Assembler uses mnemonic codes (e.g. MOV means move) and data is represented in higher-level forms such as hexadecimal. Higher level languages use more complex instructions that have no parallel with the instructions used in the processor.

There is no normative/universal format for machine code or assembler code. It can vary between different processor families and between generations of the same family. The same applies to 64-bit processors.

Processors are normally designed to minimize overheads and costs and to maximize speed. It is a waste of computation power and in increase in complexity to process at 64-bits when a lower power will do. So 64-bit processors do not have to use 64-bit addresses or data. That is why 64-bit processors currently limit physical memory to 48-bits because that is more than enough at present.

Where processor designs use such lower powers then there will usually be a plan to migrate/scale to higher powers (i.e. more bits). The Wikipedia link provides a good visual example of how virtual memory addresses can transition from 48-bit to 64-bit.

by DaveJB (not verified) on 22. August 2012 - 15:44  (98150)

Eeeh...I'm not sure that my question is which you replied to. Thank you for your help about assembly languages and mnemonics, but I had written several programs in that in an earlier time. I would have liked to know only a general example about 64 bit CPUs - and you choose as you wish -, that if the word size is 64 bits to have the ability to address such a giant memory area, then is the statement code also in a 64 bits long word automatically, or the 64 bits word usually includes the statement code, too. But I don't bother you with this, thank you for your advice about Wikipedia, I will continue there. Hi.

by Remah on 22. August 2012 - 20:53  (98165)

???

Although the background comments are for those not familiar with machine code, I clearly state that the instruction/statement code is separate to the operands. The wikipedia link then gives the operand and address sizes for AMD64 processors. With a 64-bit address in long mode there is no space for the op code. So logically the AMD64 instruction set is not limited to a 64-bit word. This means that the instruction set is variable rather than fixed length.

It is possible that you are trying to look at current processor technology through an old technology lens. Processors used to execute machine code one for one but that is no longer the case. Multistage processing provides for instructions to be preprocessed: broken down into smaller micro instructions, combined into larger macro instructions, and even executed in a different order (out of order).

This link provides more info:
http://en.wikipedia.org/wiki/X86#Basic_properties_of_the_architecture

(Edited with additional comments and link)

by TK (not verified) on 18. August 2012 - 15:00  (97906)

I remember back in the day where windows 3.1/3.11 had win32s shim that permitted 32-bit applications to run in conjunction with pre-existing parts of the OS which operated in 32-bit mode whilst other parts operated in 16-bit mode and the prevailing wisdom was if one could keep software and OS in 32-bit mode context one would get greater over all performance...

My question is: are Intel and AMD 64-bit x86 CPU's capable of similarly switching context say in a 32-bit kernel driver into 64bit mode to address otherwise inaccessable RAM in 64-bit mode and then be switched back to 32-bit mode when returning back to 32-bit mode before handing back to the OS? I suspect in user mode it would be dissallowed and highly undesirable to swith CPU context but in kernel mode with interupts disabled for the duration could it be done?

by Remah on 19. August 2012 - 4:54  (97946)

Comparisons with Windows 3 are largely irrelevant because the latest versions of Windows operate so differently. It is much the same for the CPUs. The transition from 16-bit to 32-bit involved the move from real mode (the only mode for the original 8086 CPU) to protected mode (with multitasking, code levels and memory protection). Windows 3 needed to maintain compatibility back then but Microsoft later removed 16-bit and real-mode support even though the CPUs still provide such backward compatibility.

The result is that the transition to 64-bit Windows looks a lot different. In particular, the Registry (first implemented after Windows 3) is a central design consideration such that Windows 64-bit uses emulation of 32-bit code so it can maintain a common repository.

Windows now restricts 32-bit code to run only in user mode thereby avoiding the issue of 32-bit kernel drivers (kernel, supervisor or master mode runs unrestricted whereas user, restricted or slave mode runs with less privileges and more supervision).

Your main question is beyond the scope of this article and is too technical for the majority of our readers. However it is worth clarifying that any "32-bit kernel driver" won't be able to work in 64-bit mode unless it has 64-bit code: by definition it must be 64-bit. As you point out mode switching is unattractive because of the performance hit from switching the CPU whether between 64-bit and 32-bit mode, between 32-bit and 16-bit mode or between protected and real mode.

[I've edited this response to improve clarity]

by sagar antala (not verified) on 15. August 2012 - 10:16  (97737)

hey.. i have windows 7 home basic 64 bit license version and i5 proccessor DELL laptop.
i want to install 32 bit windows 8 preveiw.. i also have cd of windows 7 to reinstall in future..
can it damage my laptop or license??
can i install 32 bit instead of 64 bit??
if it possible then in future can i reinstall my old cd of windows 7 as 64 bit??
plz yaaar!!! i am confused .. plz help me..

by Remah on 15. August 2012 - 22:20  (97763)

Yes, you can install 32-bit or 64-bit Windows on a 64-bit processor.
This will not damage your computer.

Yes, you should have no problem reinstalling your Windows Home Basic 64-bit at a later date as you can install and reinstall any version you like provided it meets Microsoft's license requirements. This article looks at technical issues and does not address licensing so you should always get Microsoft to answer such questions, for example, at:
http://windows.microsoft.com/en-NZ/windows7/32-bit-and-64-bit-Windows-fr...

As you are talking about reinstalling Windows 7, I suggest that you install Windows 8 Preview in a dual boot configuration. This means you can use your current version of Windows 7 and the new version of Windows 8 on the same computer. Each time you start-up your computer you will be able to choose which version to run.

To setup a dual-boot configuration you need a separate disk partition which can be created during Windows 8 Preview setup. There are many articles that tell you how to do it so read them first, e.g.:
http://www.afterdawn.com/news/article.cfm/2012/03/01/quick_guide_to_inst...

by Anonymouse (not verified) on 12. August 2012 - 17:29  (97612)

May I suggest another heading:

Should I use/download the 32-bit or 64-bit version of X application with my 64-bit OS?

I realise this may often depend on the individual program, but broadly speaking this seems to depend on the general interoperability characteristics of the program class.

For example, a 32-bit uninstaller application will not be able to remove 64-bit applications. However, a 64-bit browser will not work with 32-bit plugins/addons.

by Remah on 15. August 2012 - 22:32  (97764)

Good suggestion. Thanks for reminding me of this issue. I have thought about it but haven't had the time to do it.

If I do it it will be in the companion article How Windows 64-bit Supports 32-bit Applications.