What does ORG Assembly Instruction do?

AssemblyX86NasmDirective

Assembly Problem Overview


can anyone give me a comprehensive description about ORG directive?
When and why is it used in assembly written applications?

Using Nasm on x86 or AMD64.

Assembly Solutions


Solution 1 - Assembly

ORG is used to set the assembler location counter. This may or may not translate to a load address at link time. It can be used to define absolute addresses, e.g. when defining something like interrupt vectors which may need to be at a fixed address, or it can be used to introduce padding or generate a specific alignment for the following code.

Solution 2 - Assembly

ORG is merely an indication on where to put the next piece of code/data, related to the current segment.

It is of no use to use it for fixed addresses, for the eventual address depends on the segment which is not known at assembly time.

Solution 3 - Assembly

      During the assemble time ORG directive resets the MLC (memory location counter) to the address specified in the ORG directive.

Syntax: ORG

note:
may be a unsigned absolute value or any symbol or symbol + .

example:- to observe this instruction working you need any assemble listing which uses ORG directive.

location
0000A4 00 89 TAB DC 256AL1(*-TAB)
0001A4 00000194 90 ORG TAB+240
000194 F0F1F2F3F4F5F6F7 91 DC C'1234567'

Here in the above the TAB symbol is assigned to MLC address 0A4. in the next instruction ORG sets the MLC to TAB+240 address location which is x'194' (~ x'A4' + 240 in decimal). basically this set up is setup a table with length 256 and from 240 th location to store some character constants so that I can use it for TR instruction.

Solution 4 - Assembly

ORG means origin ORG is used for specific addressing in microprocessor and microcontroller programming.

For example:

.org 0000H

This means we want to start our program from the 0000H address.

Solution 5 - Assembly

its the location in memory where you want the binary program to be loaded to, if any.

I prefer not to use org, and just issue out straight opcode/value to hardware. you can always store values in ax and transfer between bx, cx, dx.

I'm writing my own assembler to dish out opcode/value without having to worry about sending it to memory first before executing,

Its so much faster just to execute opcodes on the spot as they're being read, rather than trying to cache them into memory risking overloading the stack which might burn out your cpu

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionsepisoadView Question on Stackoverflow
Solution 1 - AssemblyPaul RView Answer on Stackoverflow
Solution 2 - AssemblyMichael ChourdakisView Answer on Stackoverflow
Solution 3 - Assemblykanthi kiranView Answer on Stackoverflow
Solution 4 - AssemblyUnzela TalpurView Answer on Stackoverflow
Solution 5 - AssemblyJasonView Answer on Stackoverflow