Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly “什么是”呢=&引用;在AT&;汇编语言?_Assembly_X86_Operating System - Fatal编程技术网

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避免执行错误的内容)。简单回答并解决了我的问题!非常感谢你的耐心!你提供了许多有用的细节!