我试图像下面的代码引导program.The内容:在AT&T汇编语言中,“。=”是指什么?
.text
balabala
.globl _start
_start:
balabala
.=_start+510
.byte 0x55,0xaa
顺便说一句,我也cannt理解“.BYTE 0x55,0xaa”的意思? 它的功能是什么,它是如何工作的? 越详细,越好。
我试图像下面的代码引导program.The内容:在AT&T汇编语言中,“。=”是指什么?
.text
balabala
.globl _start
_start:
balabala
.=_start+510
.byte 0x55,0xaa
顺便说一句,我也cannt理解“.BYTE 0x55,0xaa”的意思? 它的功能是什么,它是如何工作的? 越详细,越好。
汇编程序将数据和指令转换为字节。与编译器不同,汇编指令和内存之间通常有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字节的间隔。通常情况下,缺口填充零,但这取决于汇编程序。
感谢您的耐心等待!您已经提供了许多有用的细节! –
'.'是当前位置。 '='给符号赋值,所以'。 = _start + 510'将当前位置设置为“_start + 510”。 – fuz
'.byte 0x55,0xaa'将定义两个字节'0x55'和'0xAA'。它没有特别的功能,除非在偏移量为+510和+511的引导扇区中找到这两个值,BIOS会认为引导扇区包含有效的启动代码,并且它会执行它(如果磁盘将被覆盖/由一些随机数据格式化,这很可能引导扇区中不存在“魔术标记”,从而使BIOS避免执行错误的内容)。 – Ped7g
简单的回答并解决了我的问题!非常感谢你 –