我正在尝试编写启动程序。内容如下:
.text
balabala
.globl _start
_start:
balabala
.=_start+510
.byte 0x55,0xaa
顺便说一句,我也无法理解" .byte 0x55,0xaa"手段? 它的功能是什么?它是如何工作的? 细节越多越好。
答案 0 :(得分:2)
汇编程序将数据和指令转换为字节。与编译器不同,汇编指令和内存之间通常有1:1的匹配。的。传统上,符号用于表示当前程序段开头的当前偏移量。
最常用于确定对象的大小。
使用您修改的示例:
SOMEDATA:
.byte 0x55,0xaa
这将使用值55和AA分配2个字节,并将内部标签SOMEDATA分配给包含该数据的位置。
如果我之后立即添加
SOMEDATA:
.byte 0x55,0xaa
SOMEDATALENGTH = . - SOMEDATA
将定义一个符号,给出分配的字节数(在本例中为2)。一些汇编程序具有复杂的宏功能,可以描述精细的数据结构。用。在建立这样的结构时很常见。
有些汇编程序允许赋值给。符号如上。
_start:
.=_start+510
.byte 0x55,0xaa
这会导致分配器增加510个字节。然后,在给定值55和AA的位置_start和2个字节之间创建510字节间隙。通常间隙用零填充,但这取决于汇编程序。