汇编代码说明

时间:2010-11-05 06:18:29

标签: assembly x86 bootloader floppy

我已经开始学习装配。我遇到过这些问题。

;*************************************************;
;   OEM Parameter block / BIOS Parameter Block
;*************************************************;

TIMES 0Bh-$+start DB 0

bpbBytesPerSector:      DW 512
bpbSectorsPerCluster:   DB 1
bpbReservedSectors:     DW 1

我对第一行宣言感到困惑  “bpbBytesPerSector:DW 512”。在这里我认为DW是定义单词。因此DW 512意味着定义512个字意味着1024个字节。现在标签是“bpbBytesPerSector”。每个扇区的字节数应为512(这是我的想法)。同样,我无法理解接下来的两行。 我对这完全感到困惑。任何人都可以解释一下。谢谢。

2 个答案:

答案 0 :(得分:6)

不,dw表示定义单个字512.这意味着在此处为一个字分配空间并将值设置为512.

这是创建BIOS参数块(BPB)并将其分解:

0000                         TIMES 0Bh-$+start DB 0     ; allocate 11 zero bytes.
000B  bpbBytesPerSector:     DW 512                     ; define one word 512
000D  bpbSectorsPerCluster:  DB 1                       ; define one byte 1
000E  bpbReservedSectors:    DW 1                       ; define one word 1
0010

答案 1 :(得分:0)

正如@paxdiablo已经指出的那样,这个数字只是这个词的值。当/如果你想要定义一个像你描述的512个单词的数组时,你会使用类似的东西:

myarray dw 512 dup(?)

此处512是重复次数,?是要放入每个值的值(“?”表示“保持未初始化状态”,但如果您指定值,则可以指定值喜欢)。