关于引导程序第一条指令为什么是org 07c00h,org到底是干嘛的

    ​费解了好久,一直不明白org是干嘛的。首先平时编程绝对不加org也能运行,为什么写引导区就要加上呢。其次,很多文章对此的解释是,org 07c00h会把程序加载到内存地址07c00(0000::7c00)处,但是它真能决定程序加载位置吗?

    ​先说第二个问题,在BIOS自检等一系列工作完成后,要开始引导了。计算机会将硬盘0面0道1扇区512字节加载到07c00h(0000::7c00)处。不管有没有org,都会加载到07c00处。org根本对程序加载位置没有任何影响,它只是伪指令,只在汇编器汇编阶段起作用,之后不翻译成机器指令。那既然程序已经加载到了07c00h处,为什么需要org??因为org是对汇编器的指示性语句。

我们假设程序代码如下(这程序过于简陋,只是为了示例!):

code segment
  start:mov ax,offset msg
    msg db "hello"
code ends
end start

    ​如果程序这么写的话,那么汇编器默认在汇编时将mov ax,offset msg汇编成mov ax,0003h(这条语句3字节长,那么msg在段内偏移就是0003h了)。正常情况下,系统把这个程序会自动加载到自由内存区,并且是加载到某一段的0000h偏移处。比如在我的电脑上debug可以看到

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值