Differences
This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revision | |
| en:multiasm:cs:chapter_3_10 [2025/12/10 12:43] – [Program control flow destination addressing] ktokarz | en:multiasm:cs:chapter_3_10 [2025/12/10 13:22] (current) – [Absolute and Relative addressing] ktokarz |
|---|
| ===== Absolute and Relative addressing ===== | ===== Absolute and Relative addressing ===== |
| |
| In all previous examples, the addresses were specified as the values which represent the **absolute** memory location. The resulting address (even calculated as the sum of some values) was the memory location counted from the beginning of the memory - address "0". It is presented in Fig{{ref>addrabsolute}}. | In all previous examples, the addresses were specified as the values which represent the **absolute** memory location. The resulting address (even calculated as the sum of some values) was the memory location counted from the beginning of the memory, address "0". It is presented in Fig{{ref>addrabsolute}}. |
| |
| <figure addrabsolute> | <figure addrabsolute> |
| </figure> | </figure> |
| |
| Absolute addressing is simple and doesn't require any additional calculations by the processor. It is often used in embedded systems, where the software is installed and configured by the designer and the location of programs does not change. | Absolute addressing is simple and doesn't require any additional calculations by the processor. It is often used in embedded systems, where the software is installed and configured by the designer, and the location of programs does not change. |
| Absolute addressing is very hard to use in general-purpose operating systems like Linux or Windows where the user can start a variety of different programs, and their placement in the memory differs every time they're loaded and executed. Much more useful is the **relative addressing** where operands are specified as differences from memory location and some known value which can be easily modified and accessed. Often the operands are provided relative to the Instruction Pointer which allows the program to be loaded at any address in the address space, but the distance between the currently executed instruction and the location of the data it wants to reach is always the same. This is the default addressing mode in the Windows operating system working on x64 machines. It is illustrated in Fig{{ref>addrrelative}}. | Absolute addressing is very hard to use in general-purpose operating systems like Linux or Windows, where the user can start a variety of different programs, and their placement in the memory differs every time they're loaded and executed. Much more useful is the **relative addressing** where operands are specified as differences from a memory location and some known value, which can be easily modified and accessed. Often, the operands are provided relative to the Instruction Pointer, which allows the program to be loaded at any address in the address space, but the distance between the currently executed instruction and the location of the data it wants to reach is always the same. This is the default addressing mode in the Windows operating system, working on x64 machines. It is illustrated in Fig{{ref>addrrelative}}. |
| |
| <figure addrrelative> | <figure addrrelative> |