BackupGGCode / writeos

Write Your Own OS with Free and Open Source Software (Chinese)
1 stars 1 forks source link

目前GAS已经支持混合模式跳转 #2

Closed GoogleCodeExporter closed 9 years ago

GoogleCodeExporter commented 9 years ago
在Binutils 2.18源代码里面,
gas/testsuite/gas/i386/jump.s, 行12

    ljmp    $0x1234,$xxx

这个就是混合模式跳转指令,在同一目录下的jump.d行16是预期
的编译结果,为:
1e: ea 00 00 00 00 34 12 [  ]*ljmp   \$0x1234,\$0x0 1f: (R_386_)?(dir)?32   xxx

对比你书上手工输入的指令代码,可以发现结构完全相同。

Original issue reported on code.google.com by earthengine on 8 Jul 2008 at 11:20

GoogleCodeExporter commented 9 years ago
事实上以上内容还缺了一点:我们需要一个66操作数大小前缀
。为了做到这点,请看一下测试代码

.text
.code16
.extern xxx

       ljmpl $0x1234,$xxx

编译命令(我的机器64位,要-32才能避免生成64位目标文件):
      as -32 test.s -o test.o 

然后
     objdump -d test.o的结果为

test.o:     file format elf32-i386

Disassembly of section .text:

00000000 <.text>:
   0:   66 ea 00 00 00 00       ljmpw  $0x0,$0x0
   6:   34 12                   xor    $0x12,%al

很遗憾,反编译器不能理解混合模式跳转指令,不过格式总��
�是正确了。

Original comment by earthengine on 8 Jul 2008 at 12:13

GoogleCodeExporter commented 9 years ago
非常非常感谢您的指教,我已经更新了 svn 
版本库中文件,书中内容仍需在下个版本更新。

再次感谢!

Original comment by solrex on 8 Jul 2008 at 3:25