Форум программистов, компьютерный форум, киберфорум
Assembler, MASM, TASM
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
3 / 3 / 1
Регистрация: 21.04.2012
Сообщений: 76
1

Продолжать загрузку ядра при очередном помещении носителя в привод

21.10.2012, 23:57. Просмотров 831. Ответов 11
Метки нет (Все метки)

Здравствуйте,у меня след. проблема :
имеется загрузчик для дискетки,после того как загрузчик загрузился,нужно сделать так чтобы при вытаскивании дискетки система никак не реагировала,а после того как суешь обратно,то должна дальше грузить ядро.

Код:

Кликните здесь для просмотра всего текста

Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
.model Tiny
.code
org 100h
Start:
    call lbl
    lbl: pop ax 
        jmp begin
msg1 db 'Zagrujaem sistremu,podojdite :',10,13
len1 equ $-msg1
msg2 db 'ron don don',10,13
len2 equ $-msg2
 
 
begin:
mov bp,ax
mov ax,cs
mov es,ax
add bp,(offset lbl - offset Start)+1
 
;ot4istka ekrana, listati okno vniz
  mov ah,07
  mov al,0
  mov cx,0
  mov dl,79
  mov dh,24
  mov bh,0    
 
;mov ax,0600h
    ;mov bh,07
    ;xor cx,cx
    ;mov dl,79
    ;mov dh,24
    ;mov dx,184fh
    int 10h
 
;mes1
mov ax,1301h ;ah-13 strok tolika simvolov, al-01 sme6enie kursora
mov bx,0001h
mov cx,len1
mov dx,0a0ah
int 10h 
 
;mes2
add bp,len1
mov ax,1301h
mov bx,0005h
mov cx,len2
mov dx,0f0ah
int 10h
 
;ojidanie klavishi
xor ax,ax
int 16h
 
;4itati sektori
    mov ax,7f00h  
    mov es,ax
 
    mov ah,02h
    mov al,2
    mov ch,0
    mov cl,2
    xor dx,dx
    mov bx,0000h
    int 13h
 
;jump
    mov ax, 7f00h   ;adres core
    push ax
    mov ax, 0000h
    push ax
    retf
 
end start
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.10.2012, 23:57
Ответы с готовыми решениями:

БИОС не выполняет загрузку с Flash - носителя
Пытаюсь переустановить виндовс 7 на компе с флешки. Ставлю приоритет запуска USB-FDD (ставил так же...

SAMSUNG NP355V5C-SOERU (Win 8) выставить загрузку в БИОС с носителя
Всем доброго времени суток ! Люди добрые, подскажите плиз в какую сторону копать. Имею ноут...

Узнать загрузку ядра ?
Добрый день ! Простите за ламерский вопрос, но всё же... Как узнать загрузку ядер процессора ? топ...

Как поставить загрузку компьютера на внешний DVD-привод?
Хочу переустановить Windows,но проблема в том, что родной CD-ROM не работает и поэтому приходится...

11
649 / 336 / 37
Регистрация: 04.04.2012
Сообщений: 887
22.10.2012, 00:19 2
В сектор записать байт – индификатор, для каждой дискеты свой. Читать сектор и сравнивать этот байт. В стандартно отформатированной дискете есть свой уникальный номер тома.

INT 13 - прерывание гибкого диска - CHANGE OF DISK STATUS
- смена состояние диска - (для AT,XT2,XT286,CONV,PS)
AH = 16h
DL = проверяемый диск
Возвращает: AH = диск сменил состояние
00h = диск не сменил состояние
06h = диск сменён

Помоему эта функция и проверяет номер тома.
0
3 / 3 / 1
Регистрация: 21.04.2012
Сообщений: 76
25.10.2012, 01:10  [ТС] 3
mov ah,16h - создать файл через FCB

зачем это?
0
649 / 336 / 37
Регистрация: 04.04.2012
Сообщений: 887
25.10.2012, 01:30 4
Не путайте INT 21h – прерывание ДОС с INT 13h – прерывание БИОС.
На уровне загрузки вашего загрузчика int 21h не доступно. ДОС не загружена.
0
3 / 3 / 1
Регистрация: 21.04.2012
Сообщений: 76
25.10.2012, 20:11  [ТС] 5
да я не совсем вас понял.
16h(в 13ом прерывании) это "изменение статуса".


т.е. перед чтением секторов,нужно поставить проверу на изменение статуса?(только не совсем понятна структура 16h)
0
649 / 336 / 37
Регистрация: 04.04.2012
Сообщений: 887
25.10.2012, 21:56 6
Есть дискета с вашим кодом-ядром.
Дискета загружает часть ядра и загрузка останавливается.
Вынимаем дискету.
Вставляем эту же дискету в дисковод.
Ядро грузится дальше.
Так?
0
3 / 3 / 1
Регистрация: 21.04.2012
Сообщений: 76
25.10.2012, 23:41  [ТС] 7
AFP,
не совсем.
дискета загрузила загрузчик,вынимаем дискету,затем обратно вставляем(ту же дискету) и только тогда грузим ядро !
не совсем понятно,как в коде показать функцию 16h

Добавлено через 1 час 25 минут
UP!!!!
0
649 / 336 / 37
Регистрация: 04.04.2012
Сообщений: 887
25.10.2012, 23:43 8
Вы загрузили с дискеты ДОС и на экране появилось приглашение типа A:\
Да?
0
3 / 3 / 1
Регистрация: 21.04.2012
Сообщений: 76
25.10.2012, 23:53  [ТС] 9
Цитата Сообщение от AFP Посмотреть сообщение
Вы загрузили с дискеты ДОС и на экране появилось приглашение типа A:\
Да?
Нет,я не совсем понимаю структуру функции!
Все происходит не в виндос,а в дос. загрузке,то бишь при включении компьютера,я вставляю дискету,она грузит загрузчик,а затем ядро(после нажатия клавиши).
Нужно сделать так: после того как загрузился загрузчик,то при вытаскивании дискеты - система не реагирует ни на что,а если вернуть обратно(дискету),то она грузит ядро.

Как в моем примере корректно использовать 16h? (не получается)
0
649 / 336 / 37
Регистрация: 04.04.2012
Сообщений: 887
25.10.2012, 23:56 10
Наверное надо определиться с терминами.
Если дискета, Загрузчик – первый сектор дискеты, в котором есть исполняемый код и который выполняется при загрузке с данной дискеты. Этот загрузчик загружает ядро.
Ядро – в данном случае, наверное, ДОС без дополнительных программ (русификатор, файловый менеджер и т.д.)
0
3 / 3 / 1
Регистрация: 21.04.2012
Сообщений: 76
25.10.2012, 23:59  [ТС] 11
AFP,
ядро в моем случае это просто вывод одной строки.

Assembler
1
2
mov ah,16h
mov dl,0
не работает
0
649 / 336 / 37
Регистрация: 04.04.2012
Сообщений: 887
26.10.2012, 20:00 12
С дискетой в дисководе ждет пока не будет открыт дисковод, а затем ждет дискету. После обнаружения дискеты, программа завершается.
Без дискеты в дисководе, ждет дискету. После обнаружения дискеты, программа завершается.
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
;TASM, COM - файл
 
.model tiny
.code
.386
ORG 100h
START:
;Задержка чтобы не вылетел ФДД
    mov cx,4       ;4 секунды
    call pause       ;процедура задержки
 
    mov ah,16h   ;проверить замену диска
    mov dl,0       ;дисковод
    int 13h
    jnc short start ;если дисковод не открывался
m2:                ;открывался
    mov ax,0201h    ;читать первый сектор
    mov cx,1
    mov dx,0
    lea bx,buf             ;в буфер га границей проги
    int 13h
    jc short m1              ;ошибка чтения, то на задержку,
    ret                    ;иначе выход из проги
m1:
    mov cx,5
    call pause
    jmp short m2            ;снова читать сектор
;----------------------
;Процедура задержки
pause   proc    near
push cx
    mov ah,2ch      ;получить часы
    int 21h
    mov bl,dh       ;сохранить секунды
pop cx
 
pause1:
push cx
    mov ah,2ch
    int 21h
pop cx
    cmp bl,dh             ;сравнить сохраненные секунды с полученной
    jz short pause1          ;если не менялась, то снова получить часы
    mov bl,dh             ;иначе сохранить новую секунду
    loop pause1            ;повторить заданное число раз
    ret
pause   endp
;-------------------------
buf:    ;буфер за границей проги
;-------------------------
    end start
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.10.2012, 20:00

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

При очередном вызове функции сбрасывается значение указателя
Нужно вникнуть в указатели и написать структуру-очередь. Вот что я делаю: void main() {...

при очередном падении ноутбука сломался штекер миниджек от колонок
Доброго времени суток! У меня такая проблема, при очередном падении ноутбука сломался штекер...

СМА LG WD-10340ND не вращает прямой привод при загрузке, Прямой привод
После скачка напряжения(часный дом в деревне) сгорел модуль, заменил - машинка в холостую...

Чтение строк файла - остается лишний символ при очередном проходе
Здраствуйте. Есть функция которая циклично считывает строки и числа со стандартного потока. ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.