Assembly “什么是”呢=&引用;在AT&;汇编语言?
我正在尝试编写引导程序。内容如下:Assembly “什么是”呢=&引用;在AT&;汇编语言?,assembly,x86,operating-system,Assembly,X86,Operating System,我正在尝试编写引导程序。内容如下: .text balabala .globl _start _start: balabala .=_start+510 .byte 0x55,0xaa 顺便说一下,我也不明白“.字节0x55,0xaa”的意思是什么? 它的功能是什么?它是如何工作的? 细节越多越好。汇编程序将数据和指令转换为字节。与编译器不同,汇编指令和内存之间通常有1:1的匹配。这个传统上,符号用于表示从当前程序段开始的当前偏移量 它最常用于确定对象的大小 使用已修改的示例: SOMEDA
.text
balabala
.globl _start
_start:
balabala
.=_start+510
.byte 0x55,0xaa
顺便说一下,我也不明白“.字节0x55,0xaa”的意思是什么?
它的功能是什么?它是如何工作的?
细节越多越好。汇编程序将数据和指令转换为字节。与编译器不同,汇编指令和内存之间通常有1:1的匹配。这个传统上,符号用于表示从当前程序段开始的当前偏移量 它最常用于确定对象的大小 使用已修改的示例:
SOMEDATA:
.byte 0x55,0xaa
这将分配值为55和AA的2个字节,并将内部标签SOMEDATA分配给具有该数据的位置
如果我马上加上
SOMEDATA:
.byte 0x55,0xaa
SOMEDATALENGTH = . - SOMEDATA
这将定义一个符号,给出分配的字节数(本例中为2)。有些汇编程序具有复杂的宏功能,可以描述复杂的数据结构。使用。在建立这样的结构时非常常见
一些汇编器允许分配给。符号同上
_start:
.=_start+510
.byte 0x55,0xaa
这将导致分配器增加510字节。然后,它在位置_start和给定值55和AA的2个字节之间创建510字节的间隙。通常间隙用零填充,但这取决于汇编程序。
是当前位置<代码>=为符号赋值,因此=_start+510
将当前位置设置为\u start+510
。字节0x55,0xaa
将定义两个字节0x55
和0xaa
。它没有特定的功能,除非在偏移量+510和+511的引导扇区中找到这两个值,BIOS会认为引导扇区包含有效的引导代码,并执行它(如果磁盘被一些随机数据覆盖/格式化,很可能是“魔标”将不在引导扇区中,使BIOS避免执行错误的内容)。简单回答并解决了我的问题!非常感谢你的耐心!你提供了许多有用的细节!