购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

6.10 NASM 编译器的$和$$标记

源程序第51 行,用于在显示了各个数位之后,再显示一个字符“D”。目的地址是由ES:DI 给出的,源操作数是立即数0x0744,其中,高字节0x07 是黑底白字的显示属性,低字节0x44 是字符“D”的ASCII 码。字的写入是按低端字节序的,请自行参照图6-5。

整个程序到此结束。为了使处理器还有事做,源程序第53 行,是一个无限循环。NASM 编译器提供了一个标记“$”,该标记等同于标号,你可以把它看成是一个隐藏在当前行行首的标号。因此,jmp near $的意思是,转移到当前指令继续执行,它和

是一样的,没有区别,但不需要使用标号,更不必为给标号起一个有意义的名字而伤脑筋。

和第5 章一样,为了得到不多不少,正好512 字节的编译结果,同时最后两个字节还必须是0x55 和0xAA,需要在所有指令的后面填充一些无用的数据。

源程序第55 行,用于重复伪指令“db 0”若干次。重复的次数是由510-($-$$)得到的,除去0x55 和0xAA 后,剩余的主引导扇区内容是510 字节;$是当前行的汇编地址;$$是NASM 编译器提供的另一个标记,代表当前汇编节(段)的起始汇编地址。当前程序没有定义节或段,就默认地自成一个汇编段,而且起始的汇编地址是0(程序起始处)。这样,用当前汇编地址减去程序开头的汇编地址(0),就是程序实体的大小。再用510 减去程序实体的大小,就是需要填充的字节数。

就像处理器把内存划分成逻辑上的分段一样,源程序也应当按段来组织,划分成独立的代码段、数据段等。从本书第8 章开始,将引入这方面的内容。 wMT+2mH5i3NVdato6cdxNaM7mURc2yCY3RvdenMo5lJkD2g6NUByalppdNB3nqPg

点击中间区域
呼出菜单
上一章
目录
下一章
×