【问题标题】:Explanation of a few lines in AssemblyAssembly中几行的解释
【发布时间】:2013-02-16 04:24:09
【问题描述】:
bits 16

org 0x7c00

start: jmp loader

;******; ; OEM Parameter block ;********;

TIMES 0Bh-$+start DB 0; THIS LINE

bpbBytesPerSector: DW 512 

bpbSectorsPerCluster: DB 1

bpbReservedSectors: DW 1

bpbNumberOfFATs: DB 2 

bpbRootEntries: DW 224 

bpbTotalSectors: DW 2880 

bpbMedia: DB 0xF0 

bpbSectorsPerFAT: DW 9 

bpbSectorsPerTrack: DW 18

bpbHeadsPerCylinder: DW 2

bpbHiddenSectors: DD 0 

bpbTotalSectorsBig: DD 0 

bsDriveNumber: DB 0 

bsUnused: DB 0 

bsExtBootSignature: DB 0x29 

bsSerialNumber: DD 0xa0a1a2a3 

bsVolumeLabel: DB "MOS FLOPPY "

bsFileSystem: DB "FAT12   "

;******** ; Bootloader Entry Point ;**********;

loader:

cli 

hlt 

times 510 - ($-$$) db 0 

dw 0xAA55 

现在的问题是我不太明白 TIMES 0bh-$+start 在这种情况下的计算结果。 例如 $-$$ = 程序的大小。 如果有人可以向我解释 LODSB 语法,那将是非常有益的。另外,为什么在每个 bpb 和 bs 语句之后都有一个 : 符号? : 符号不是表示新部分的开始吗,就像该程序中的加载程序部分或开始部分一样。 请详细解释以下如何评估答案。

谢谢。

【问题讨论】:

    标签: assembly nasm bootloader


    【解决方案1】:

    啊! “THIS LINE”只是为“OEMNAME”保留空间。如果您愿意,可以将您的操作系统的名称放在那里 - 填充到 11 个字节。 (在这种情况下,$$ 与“开始”相同 - 节的开头 - 0x7C00)。

    lodsb 没有太多“语法”,它只是一个指令...... http://home.myfairpoint.net/fbkotler/nasmdocc.html#section-A.4.141 (我使用“lodbs”作为拼写指令的示例是否让您感到困惑?抱歉。)

    “:”绝对没有任何作用。如果一行中只有一个标签,它会通知 Nasm 它是一个标签,而不是一个拼写错误的指令。在手册中查找“orphan_label”。如果没有“:”,Nasm 将(可选 - 默认打开)发出警告,但无论如何都会做正确的事情。

    你真的应该在jmp start 之后有一个nop,因为Nasm 会发出一个“短”的jmp(旧版本的Nasm 默认接近jmp)。既然“THIS LINE”的全部目的就是把剩下的BPB变量放在正确的地方,不如就这么干吧!

    【讨论】:

    • 非常感谢,但我想更好地理解该声明(这条线)及其工作,如果可能的话,一步一步。请帮我。另外,操作系统名称的最大大小是多少?
    • 一步一步我的意思是我不明白 0bh-$+start 的评估结果。 0bh-($-start) 可能是一种方法,但 $ 是当前代码行的地址,并且 start 早于 1 行声明,因此它可能导致 1. 0bh(我不知道为什么这个随机十六进制是那里) - 1 =(将其视为十六进制 B,即 11 - 1)10(十进制)。但是怎么会导致11(我可能错了)。这是我想知道的。谢谢。
    • 还有为什么是 11 个字节?你的操作系统名称应该是 8 个字节长吧?
    • 对。 8 个字节的名称。 BPB 应该从引导扇区的 3 个字节开始。该表达式应占两个字节的jmp 或一个三个字节的jmp。忘记我所说的需要nopstart(或$$)是7C00h,$是2(应该是3)。只需将bpbBytesPerSector 放在正确的位置...
    • 如果您仍在为此制作项目,阅读Microsoft FAT/FAT32 file system specification 可能会对您有所帮助。它是从 2004 年开始的,但信息仍然相关。
    猜你喜欢
    • 2015-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-09
    • 1970-01-01
    • 2015-08-09
    • 2011-04-25
    相关资源
    最近更新 更多