免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 4662 | 回复: 12

2.6.27 x86/boot/head.S [复制链接]

论坛徽章:
0
发表于 2009-01-06 10:34 |显示全部楼层
有两个问题:
1,类似于下面的语句是什么意思?我理解是个段,但是不知道后面的 “a” “ax”是什么意思。
.section ".header", "a"
.section ".bstext", "ax"

2,下面这两行代码是什么意思,没理解。
_start:
                # Explicitly enter this as bytes, or the assembler
                # tries to generate a 3-byte jump here, which causes
                # everything else to push off to the wrong offset.
                .byte        0xeb                # short (2-byte) jump
                .byte        start_of_setup-1f

论坛徽章:
0
发表于 2009-01-06 11:21 |显示全部楼层
1,  info as

2,  分配一byte的空间,给它赋值为0xeb,看注释这是short jump的操作码
   
第二个byte是一个表达式, a减去b的结果。

论坛徽章:
0
发表于 2009-01-06 11:32 |显示全部楼层
>2,  分配一byte的空间,给它赋值为0xeb,看注释这是short jump的操作码
  我明白了,这个其实是一条操作指令  
>第二个byte是一个表达式, a减去b的结果。
这个是指令的操作数,想跳转到start_of_setup,为什么写成start_of_setup-1f,这个f是什么,我看到很多汇编的立即数都跟个f?

既然是想跳转,为什么要写成这种方式,直接使用类似于jmp指令不行吗?为什么要这样来实现呢?
我理解是为了保证后面的数据的offset,如果用类似于jmp,产生不是2字节的代码。

[ 本帖最后由 chenbdchenbd 于 2009-1-6 11:35 编辑 ]

论坛徽章:
0
发表于 2009-01-06 12:33 |显示全部楼层
a 减去 b, 得到的是一个值, 也就是操作数。

f表示forward, b表示backward, LABEL加上{f|b},当作一个值来用。

论坛徽章:
0
发表于 2009-01-06 15:40 |显示全部楼层
谢楼上的回答。

论坛徽章:
0
发表于 2009-01-07 00:07 |显示全部楼层
斑竹,从哪能学到这些汇编指令?
介绍本书吧

论坛徽章:
0
发表于 2009-01-08 15:23 |显示全部楼层
找到了下面内容,但是还是有些不理解什么叫可分配段,继续找。
.section

       语法:

              .section NAME [, "FLAGS"[, @TYPE[, @ENTSIZE]]]

              FLAGS 常用的有以下几种:

              `a'           可分配段

              `w'          可写段

              `x'           可执行段

              data section 具有的 FLAGS 通常是’wa’;

              text section 具有的 FLAGS 通常是’ax’。

       用法:

              .section .text1, “wa”      // 定义一个.text1段,且该段为可写的以及可分配的

论坛徽章:
0
发表于 2009-01-08 18:07 |显示全部楼层
原帖由 chenbdchenbd 于 2009-1-8 15:23 发表
找到了下面内容,但是还是有些不理解什么叫可分配段,继续找。
.section

       语法:

              .section NAME [, "FLAGS"[, @TYPE[, @ENTSIZE]]]

              FLAGS 常用的有以下几种:

...


其实就是同样的数据打个标签,然后在 ld 脚本中可以指定存放位置,有同样标签的可以存放在一起,即使代码分布在不同的位置。

论坛徽章:
0
发表于 2009-01-08 18:21 |显示全部楼层
`a'           可分配段  指的就是可以被ld放在别的地方吗?

论坛徽章:
0
发表于 2009-01-08 18:44 |显示全部楼层
原帖由 chenbdchenbd 于 2009-1-8 18:21 发表
`a'           可分配段  指的就是可以被ld放在别的地方吗?


请参考 《GNU linker ld》
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP