Chinaunix首页 | 论坛 | 博客
  • 博客访问: 427807
  • 博文数量: 123
  • 博客积分: 2686
  • 博客等级: 少校
  • 技术积分: 1349
  • 用 户 组: 普通用户
  • 注册时间: 2009-12-23 22:11
文章分类
文章存档

2012年(3)

2011年(10)

2010年(100)

2009年(10)

我的朋友

分类: LINUX

2011-01-08 16:10:52

看一个记录一个,哈哈!


Reference:




1.

.fill repeat, size, value


其中,repeatsize value都是常量表达式。Fill的含义是反复拷贝size字节。Repeat可以大于等于0size也可以大于等于0,但不能超过8,如果超过8,也只取8。把repeat字节以8个为一组,每组的最高4个字节内容为0,最低4字节内容置为value


Size value为可选项。如果第二个逗号和value值不存在,则假定value0。如果第一个逗号和size不存在,则假定size1.


例如,在Linux初始化的过程中,对全局描述符表GDT进行设置的最后一句为:

     .fill NR_CPUS*4,8,0             /* space for TSS's and LDT's */

因为每个描述符正好占8个字节,因此,.fill给每个CPU留有存放4个描述符的位置。



2.


.org new_lc, fill


把当前字节的位置计数器提前到new_lcnew location counter)。new_lc或者是一个常量表达式,或者是一个与当前子节处于同一节的表达式。也就是说,你不能用.org横跨节:如果new_lc是个错误的值,则.org被忽略。.org只能增加位置计数器的值,或者让其保持不变;但绝不能用.org来让位置计数器倒退。


注意,位置计数器的起始值是相对于一个节的开始的,而不是子节的开始。当位置计数器被提升后,中间位置的字节被填充值fill(这也是一个常量表达式)。如果逗号和fill都省略,则fill的缺省值为0

例如:.org 0x2000

        ENTRY(pg0)

表示把位置计数器置为0x2000,这个位置存放的就是临时页表pg0



3.


movl 5(%ebx),%eax


等价于Intel汇编:mov eax, [ebx+5]
Intel的语法中,基寄存器用“[]”起来,而在AT&T中,用“()”起来


4.

ljmp $0x8, $protcseg

jmpi与ljmp都是段间跳转指令
jmpi的格式是: jmpi 段内偏移,段选择子
ljmp的格式是: ljmp 段选择子,段内偏移
jmpi是linux下intel 80x86的汇编指令,而ljmp是linux下AT$T格式的汇编指令. 
上句指令的意思是:
用0x8作为段选择符,到gdt中去取出gdt[0x8]的值,再加上偏移量$protcseg. 跳转到gdt[0x8] + $protcseg的地址处执行。
阅读(3152) | 评论(1) | 转发(0) |
0

上一篇:The use of QEMU

下一篇:QEMU Source Code for Linux

给主人留下些什么吧!~~

chinaunix网友2011-03-08 16:04:22

很好的, 收藏了 推荐一个博客,提供很多免费软件编程电子书下载: http://free-ebooks.appspot.com