ORG指令简介

文章转自:http://liuyj03.blog.163.com/blog/static/14061922820101015104333103/

经常看到汇编代码里面有这样的一条指令:
        org 0x7c00    ; A is a address
        start:
               mov ax msg
               ....(other codes)...
         msg: db "hello,world"

org A :作用是使得其后面的代码从地址A开始。

假设msg前面有10个字节,那么org 0x7c00的作用将使start的地址为0x7c00,msg的地址就是0x7c0a,汇编编译器对代码进行编译的时候,会把msg的地址为0x7c0a赋值给ax,相当于 mov ax 0x7c0a;如果没有org 0x7c00的话,那么start的地址将默认为0x0000,则msg的地址为0x000a,相当于mov ax 0x000a;

那么为什么使用org使代码从某个地址(比如0x7c00)开始呢?
       原因是这些代码会被其他程序加载到内存的首地址(0x7c00)中,并跳到该地址执行这些代码。一个典型的例子就是linux内核的启动代码,bios会把启动代码加载到内存0x7c00处,并跳到该地址开始执行。如上面代码,mov ax msg这句本来是期望把0x7c0a赋值给ax寄存器的,如果启动代码不使用org 0x7c00的话,则赋值给ax的便是0x000a,结果显然是不符合预期的。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值