Пояснение кода сборки - PullRequest
3 голосов
/ 05 ноября 2010

Я начал изучать сборку. Я наткнулся на эти строки.

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

TIMES 0Bh-$+start DB 0

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

Я запутался в первой строке декларации msgstr "bpbBytesPerSector: DW 512". Здесь я думаю, что DW это определение слова. Таким образом, DW 512 означает, что определение 512 слов означает 1024 байта. Теперь метка называется «bpbBytesPerSector». Байт на сектор должно быть 512 (это то, что я думаю). Точно так же я не могу понять следующие две строки. Я полностью запутался в этом. Кто-нибудь может мне объяснить. Заранее спасибо.

Ответы [ 2 ]

6 голосов
/ 05 ноября 2010

Нет, 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
0 голосов
/ 05 ноября 2010

Как уже указывал @paxdiablo, число - это просто значение слова.Когда / если вы хотите определить массив из 512 слов, как вы описали, вы должны использовать что-то вроде:

myarray dw 512 dup(?)

Здесь 512 - это количество повторений, а ? -значение для каждого («?» означает «не инициализировать», но вы можете указать значение, если хотите).

...