Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.03.2015, 20:39   #1
Berlioz
Изучающий C и ASM
Пользователь
 
Регистрация: 25.05.2012
Сообщений: 89
По умолчанию Передача управления на PBR(VBR)

Всех приветствую! Возникли проблемы с передачей управления на PBR.

На MBR и первый раздел установлена загрузочная запись от загрузчика Chimera (Chameleon).

Структура разделов следующая:
1 раздел - 100МБ, FAT32, активный
2 раздел - все остальное, NTFS, установлена Win 7

Где могут быть ошибки в следующем коде?

Код:
	mov ax,0x0201 ;читаем MBR
	mov ch,0
	mov cl,1
	mov dh,0
	mov dl,[diskn]
	push 0x2000; мы были загружены по адресу 0x2000:0x200
	pop es
	mov bx,diskmbr
	int 0x13

	mov ax,0x0201; diskmbr+0x01DE - адрес второй партиции
	mov ch,[diskmbr+0x01DE+3]
	mov cl,[diskmbr+0x01DE+2]
	mov dh,[diskmbr+0x01DE+1]
	mov dl,[diskn]
	push 0
	pop es
	mov bx,0x7c00
	int 0x13

	mov dl,[diskn] ;какой у нас диск

	cli
	;открываю A20
	in al,0x92
	or al,2
	out 0x92,al
	sti

	jmp far 0:0x7C00
P.S. Подозреваю, что проблема в том, что диск неактивен, но на 100% не уверен
Berlioz вне форума Ответить с цитированием
Старый 22.03.2015, 09:01   #2
Berlioz
Изучающий C и ASM
Пользователь
 
Регистрация: 25.05.2012
Сообщений: 89
По умолчанию

Одну ошибку нашел - неверный адрес партиции. Надо было 0x01CE писать, но проблема осталась.
Berlioz вне форума Ответить с цитированием
Старый 23.03.2015, 23:54   #3
R71MT
Участник клуба
 
Аватар для R71MT
 
Регистрация: 16.06.2011
Сообщений: 1,428
По умолчанию

Скелет загрузчика выглядит приблизительно так:
Код:
Format Binary          ; получаем бинарник
Use16                  ; 16-разрядный код
ORG 7С00h              ; адрес расположения в памяти

CLD                    ; копируем слева/направо
MOV SI,7C00h           ; откуда копировать
MOV DI,7E00h           ; куда копировать
MOV CX,200h            ; сколько копировать (длина сектора)
REP MOVSB              ; копируем

; *********************************************************
; * ищем раздел с флагом 80h, который мы хотим загрузить, *
; *********************************************************

JMP 0000:7C00h         ; передаем управление на boot-сектор
Цитата:
Сообщение от Berlioz Посмотреть сообщение
Подозреваю, что диск неактивен
..так надо было искать активный раздел диска начиная с 01ВЕh, а потом с него копировать.

Типичный вариант проверки активного раздела в памяти:
Код:
 
MOV  SI,07FBEh        ; SI указывает на начало "partition1"
MOV  BL,4                ; макс. кол-во разделов - 4

; ===[* проверяем на флаг 80h *]===

_chk_partition:            ; поиск активного раздела..
CMP  byte [SI],80h       ; это активный раздел?
JE   _active_part        ; если да, то переход на метку

CMP  byte [si],0         ; это не активный раздел?
JNE  _invalid_part       ; если ни 0, ни 80h, то мессага с ошибкой

ADD  SI,10h              ; переходим на следующий раздел
DEC  BL                  ; уменьшаем счётчик разделов
JNZ  _chk_partition      ; если нет активных разделов (т.е. BL = 0),
INT  18h                 ; то запускаем ROM-SCAN
Нашедшего выход - затаптывают первым..
R71MT вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Некорректная передача управления из Sysenter. constant_ural Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 0 25.06.2013 08:34
VS 2008 C++ передача управления Windows из длинных циклов Dikar Помощь студентам 3 20.05.2013 17:03
PHP Forward (передача управления) S-HaCK XORitY PHP 3 08.02.2012 22:11
Передача управления между компонентами DeKot Общие вопросы Delphi 2 06.09.2010 15:38
Передача управления по SetFocus promer Компоненты Delphi 6 11.03.2010 13:47