2017-03-24 59 views
2

我试图像下面的代码引导program.The内容:在AT&T汇编语言中,“。=”是指什么?

.text 
balabala 
.globl _start 
_start: 
balabala 

.=_start+510 
.byte 0x55,0xaa 

顺便说一句,我也cannt理解“.BYTE 0x55,0xaa”的意思? 它的功能是什么,它是如何工作的? 越详细,越好。

+1

'.'是当前位置。 '='给符号赋值,所以'。 = _start + 510'将当前位置设置为“_start + 510”。 – fuz

+1

'.byte 0x55,0xaa'将定义两个字节'0x55'和'0xAA'。它没有特别的功能,除非在偏移量为+510和+511的引导扇区中找到这两个值,BIOS会认为引导扇区包含有效的启动代码,并且它会执行它(如果磁盘将被覆盖/由一些随机数据格式化,这很可能引导扇区中不存在“魔术标记”,从而使BIOS避免执行错误的内容)。 – Ped7g

+0

简单的回答并解决了我的问题!非常感谢你 –

回答

2

汇编程序将数据和指令转换为字节。与编译器不同,汇编指令和内存之间通常有1:1的匹配。这个。符号传统上用于指示当前程序段开始时的当前偏移量。

它最常用于确定物体的大小。

使用例如改性:

SOMEDATA: 
    .byte 0x55,0xaa 

此分配2个字节,其值为55和AA和内部标签SOMEDATA分配到与该数据的位置。

如果我立即加入之后

SOMEDATA: 
    .byte 0x55,0xaa 
SOMEDATALENGTH = . - SOMEDATA 

,将定义一个符号给出(在这种情况下2)字节的分配的数目。一些汇编器具有复杂的宏功能,可以描述精细的数据结构。使用。在建立这样的结构中非常普遍。

一些汇编器允许赋值给。象征如上。

_start: 
.=_start+510 
.byte 0x55,0xaa 

这会导致分配器增加510个字节。然后在给定值55和AA的情况下,它在位置_start和2个字节之间创建一个510字节的间隔。通常情况下,缺口填充零,但这取决于汇编程序。

+0

感谢您的耐心等待!您已经提供了许多有用的细节! –