Пояснение кода сборки

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

;*************************************************;
;   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 ответа

Решение

Нет, 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

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

myarray dw 512 dup(?)

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

Другие вопросы по тегам