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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.06.2013, 17:59   #1
toshasm
 
Регистрация: 05.03.2013
Сообщений: 6
По умолчанию Выполнение кода из сектора. В чём ошибка?

Всем привет! У меня появилась необходимость выполнить код, лежащий во втором секторе дискеты. С чтением сектора всё нормально, но потом (как я понял, после jmp) всё зависает. Вот код на FASM'е:
Код:
org 0x7c00

start:

   cli             ;запрещаем прерывания
        xor ax,ax       ;обнуляем регистр ах 
        mov ds,ax       ;настраиваем сегмент данных на нулевой адрес 
        mov es,ax       ;настраиваем сегмент es на нулевой адрес 
        mov ss,ax       ;настраиваем сегмент стека на нулевой адрес 
        mov sp,07C00h   ;сегмент sp указывает на текущую вершину стека 
   sti         ;разрешаем прерывания


                        ;int 0x10-вывод,символ в al, настойка - 0x0e в ah
                        ;int 0x16-ввод, символ в al, настойка - 0 в ah
;-------------------
mov al,1
mov ah,0x0e      ; вывод радостной морды вместо сообщения о загрузке бута
int 0x10
;-------------------
mov al,1   ;читаем один сектор
mov dl,0  ;   первый диск,
mov ch,0  ;   первый цилиндр,
mov dh,0  ;   первая головка,
mov cl,2  ;   второй сектор.

mov bx,0x0500  ;адрес даты в мемори
mov ax,0000      ; обнуляем ES
mov es,ax        ;

mov ah,0x02; настройка
int 0x13; прерывание для чтения

jmp 0000:0x0500  ;передаём управление

    finish:

     times 0x1FE-finish+start db 0
     db   0x55, 0xAA ; сигнатура загрузочного сектора
В чем проблема? Помогите пожалуйста, если кто знает, в чём проблема.
toshasm вне форума Ответить с цитированием
Старый 18.06.2013, 18:47   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

я бы применил отладчик по типу Bochs.
возможно ваш второй сектор не способен работать по этому смещению.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 19.06.2013, 00:24   #3
toshasm
 
Регистрация: 05.03.2013
Сообщений: 6
По умолчанию

Что значит "сектор не способен работать по смещению"? А как исправить можно? В bochs я ничего не понял.
toshasm вне форума Ответить с цитированием
Старый 19.06.2013, 03:07   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Сообщение от toshasm Посмотреть сообщение
Что значит "сектор не способен работать по смещению"? А как исправить можно? В bochs я ничего не понял.
ну если вы скинете образ дискеты я могу посмотреть что там у вас происходит.
а я говорю то что у вас база для выполнению второго кода возможно иная, и потому при первом же прыжке, все улетает.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 19.06.2013, 03:09   #5
vadimych
Форумчанин
 
Регистрация: 16.01.2011
Сообщений: 325
По умолчанию

toshasm, код из второго сектора покажите.
vadimych вне форума Ответить с цитированием
Старый 19.06.2013, 16:48   #6
toshasm
 
Регистрация: 05.03.2013
Сообщений: 6
По умолчанию

vadimych, во втором секторе только вывод одного символа и больше ничего. Просто для проверки
toshasm вне форума Ответить с цитированием
Старый 19.06.2013, 17:14   #7
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

тем не менее покажите лучше.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 19.06.2013, 17:35   #8
toshasm
 
Регистрация: 05.03.2013
Сообщений: 6
По умолчанию

Код:

Код:
start:

mov al, 2
mov ah, 0x0e
int 0x10

finish:
times 0x1fe-finish+start+2 db 0
toshasm вне форума Ответить с цитированием
Старый 19.06.2013, 17:45   #9
vadimych
Форумчанин
 
Регистрация: 16.01.2011
Сообщений: 325
По умолчанию

Код:
mov ax,0000      ; обнуляем ES
mov es,ax        ;
Это лишнее. Затираете al.
vadimych вне форума Ответить с цитированием
Старый 19.06.2013, 18:00   #10
toshasm
 
Регистрация: 05.03.2013
Сообщений: 6
По умолчанию

Точно! Как сам не заметил! Теперь все работает! Спасибо огромное!!!!!!!
toshasm вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Выполнение кода по адресу pufystyj Общие вопросы C/C++ 2 08.09.2012 20:47
Ошибка при выполнение простого кода sherman Общие вопросы C/C++ 1 28.08.2012 22:36
В чём ошибка кода ???? GRIN Помощь студентам 1 30.08.2010 08:38
В чём ошибка кода? Richard22 Общие вопросы Delphi 2 16.05.2010 00:27
Ч чём ошибка моего кода сохранения и загрузки? AngelOfDeath Общие вопросы Delphi 3 08.04.2008 13:55