Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Помогите найти ошыбку в коде

13K
23 августа 2005 года
Vermilion
3 / / 20.08.2005
Незнал в какую тему записать, создал эту

Хотел я бут-сектор написать, на асме, примитивный такой, думал ничего сложного не будет. Пишу я на fasm'е, вот код над которым я ломал голову целую неделю, и переписывал не раз:

Код:
org 7c00h
start:
 cli
 mov ax,cs
 mov ss,ax
 mov sp,start
 mov es,ax
 sti


 mov cl,[BYBOB_Lenght]
 mov bx,[BYBOB_Dest]
 mov ax,[BYBOB_Sector]
 call Load_Block
ret

Load_Block:
  ;cx - kolvo sectorov
  ;bx - kuda gruzit
  ;ax - N 1go sectora
 Load_Loop:
  cmp cx,0
  je Load_End
  push cx
  push ax
  Call Load_Absolut_Sector
  pop ax
  pop cx
  inc ax
  dec cx
  jmp Load_Loop
 Load_End:
ret

Load_Absolut_SectorE:
   pop ax
   push ax
Load_Absolut_Sector:
   ;ax - absolutniy N sectora [0..2879]
   ;es:bx - kuda pisat
   mov dx,36
   div dl    ; ah[0..35] al[0..79]
   mov ch,al ; ch - N dorojki
   xchg al,ah
   xor ah,ah
   mov dl,18
   div dl    ;[0..17][0..1]
   mov dh,al
   xor dl,dl
   inc dh    ; dh - N golovki
   mov cl,ah
   inc cl    ; cl - N sectora
   mov ax,201h
   int 13h
   jc Load_Absolut_SectorE
   add bx,512
ret

BYBOB_Sector dw 2
BYBOB_Lenght db 12
BYBOB_Dest dw 800h

KERNEL_Sector dw 13
KERNEL_Lenght db 100
KERNEL_Dest dw 2000h

fin:
rb 7dFEh-fin
dw 0AA55h


Реализацыя мне не ужна, я хочю понять что в этом коде не так
4.2K
23 августа 2005 года
nvm
40 / / 24.12.2003
Запусти под Bochs.
В чем вообще симптомы, что что-то не так?
13K
25 августа 2005 года
Vermilion
3 / / 20.08.2005
Цитата:
Originally posted by nvm
Запусти под Bochs.
В чем вообще симптомы, что что-то не так?

Bochs ошыбку не находит. когда тестил на дискете, то она прочитала 1 сектор и замолчала, когда нада чтоб она хрюкала секунд 5 минимум. Тестил процедуру загрузки в фаре, прога вылетела с ошыбкой, типа ошыбка защиты памяти код ошыбки xxxx:FFFF

4.2K
25 августа 2005 года
nvm
40 / / 24.12.2003
Цитата:
Originally posted by Vermilion
Bochs ошыбку не находит.


в каком смысле не находит: он загружает 1 сектор или все, что надо?
В нем есть дебаггер - можешь пройти пошагово..

3.8K
25 августа 2005 года
Supervisor
158 / / 29.05.2005
Vermilion, я не пойму, что ты хочешь от этот кода?? Чтобы он загрузил несколько секторов и повесил машину?

Цитата:
Тестил процедуру загрузки в фаре, прога вылетела с ошыбкой, типа ошыбка защиты памяти код ошыбки xxxx:FFFF


:D Это что-то новое - тестировать загрузочный сектор в Windows :)

Цитата:
org 7c00h
start:
cli
mov ax,cs
mov ss,ax
mov sp,start
mov es,ax
sti


mov cl,[BYBOB_Lenght]
mov bx,[BYBOB_Dest]
mov ax,[BYBOB_Sector]
call Load_Block
ret


Посмотри внимательно на этот отрывок кода. Ничего странного не находишь?
Проблема "зарыта" в команде "ret". Точка входа Start - это же не подпрограмма!!! Куда ты пытаешься вернуть управление?

Вместо ret должно быть:

 
Код:
cli
hlt
jmp $
4.2K
25 августа 2005 года
nvm
40 / / 24.12.2003
Цитата:
Originally posted by Supervisor
Проблема "зарыта" в команде "ret".


Это в конце, а до этого должна 5 секунд хрюкать..

2Vermilion:
Поставь вместо
int 13h
выдачу на экран регистров - увидишь, что не так.
Еще нужно учитывать, что сектора, считываемые за раз, должны находиться на одной дорожке.

13K
25 августа 2005 года
Vermilion
3 / / 20.08.2005
2Supervisor:
Тестил в досес я только процедуру загрузки цепочки секторов, она и не пашет правильно.
А вместо рет там и был другой код, просто уже запарился немного с ней... там должен быть jmp far

А не знаете как вывести число (переменную) на экран без функцый доса?
4.2K
25 августа 2005 года
nvm
40 / / 24.12.2003
Цитата:
Originally posted by Vermilion
А не знаете как вывести число (переменную) на экран без функцый доса?


Перевести в строку:
static void conv16(char* s, unsigned long addr)
{
int i;
unsigned char c;
for (i=0; i<8; i++){
c=(unsigned char)((addr>>(4*(7-i)))&0xf);
if (c<10) s=c+'0';
else s=c-10+'A';
}
s[8]=0;
}
Затем на экран через BIOS или прямо в видеобуфер.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог