Code: Select all
SectorsPerTrack dw 0
...
ReadSectorsCHSLoop:
pushad
xor edx,edx ; EDX = 0
movzx ecx,WORD [BYTE bp+SectorsPerTrack] ; ECX = кол-во секторов на дорожке (0)
div ecx
Code: Select all
SectorsPerTrack dw 0
...
ReadSectorsCHSLoop:
pushad
xor edx,edx ; EDX = 0
movzx ecx,WORD [BYTE bp+SectorsPerTrack] ; ECX = кол-во секторов на дорожке (0)
div ecx
Ну хорошо, но в bp точно ненулевое значение, это ж вторичный указатель стека! Хотя вся операция какая-то странная, зачем делить номер логического сектора, который необходимо прочитать, на фактически адрес стека?GLeBaTi wrote:SectorsPerTrack dw 0
...
ReadSectorsCHSLoop:
pushad
xor edx,edx ; EDX = 0
movzx ecx,WORD [BYTE bp+SectorsPerTrack] ; ECX = кол-во секторов на дорожке (0)-первая строчка. В коде она не меняется
div ecx ; EAX = EAX / ECX
Code: Select all
movzx ecx,WORD [BYTE bp+SectorsPerTrack]
Code: Select all
main:
xor ax,ax ; Setup segment registers
mov ds,ax ; Make DS correct
mov es,ax ; Make ES correct
mov ss,ax ; Make SS correct
mov bp,7c00h
mov sp,7c00h ; Setup a stack
Конечно ноль! Если в исходнике ноль, то и в скомпилированном из него бинарнике тоже будет ноль! Вот если этот бинарник специальной утилитой (такой как sys в DOS или средствами установщика ReactOS) записать загрузочный сектор, а потом прочитать содержимое этого сектора в файл (сдампить), то там будет уже не ноль, потому что sys адаптировала BPB (Bios Parameter Block - так называется тот самый набор констант) в бинарнике под геометрию конкретного диска.GLeBaTi wrote:Но там, как видите, тоже ноль
GLeBaTi wrote:Но ей передаются параметры командной строки. Подскажите пожалуйста, где в arch.s передается строка ф-ие BootMain?
Code: Select all
/* GO! */
pushl %eax
call _BootMain
Users browsing this forum: No registered users and 8 guests