Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей.
Здесь обсуждаются безопасность, программирование, технологии и многое другое.
Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
 |

24.05.2008, 15:02
|
|
Новичок
Регистрация: 09.05.2008
Сообщений: 7
Провел на форуме: 4367
Репутация:
10
|
|
Загрузчик
Здравствуйте форумчане!
Помогите разобраться, необходимо загрузить программу в оперативную память при включении компьютера. Программа работает без операционной системы. Она должна загрузиться не в тот сегмент в который БИОС загрузит мой загрузчик, т.к. БИОС грузит загрузчик в нулевой сегмент по смещению 7C00h это где-то 32 кбайта, а моя программа 40кбайт поэтому в этот сегмент она не поместиться, загрузчик я написал. Вопрос как осуществить дальний прыжок в другой сегмент командой jmp что-бы передать управление моей программе, у меня что-то ничего не получается, и в какой сегмент загружать мою программу, повторяю программа работает без операционной системы, да забыл написать загружаюсь я с дискеты, загрузчик и п программа находятся на дискете.
Привожу код загрузчика, там где вопросы непонятно что писать.
; zagr.asm - Загрузчик.
Код:
cseg segment para 'code'
org 100h
begin proc near
assume cs:cseg, ds:cseg, ss:cseg
org 7c00h
jmp start
start:
cli
push ax
push dx
push cx
push bx
push es
mov ax,cs
mov ds,ax
;--------------Сброс дисковой системы.--------------------
mov cx,3d
pov:
mov ah,0h
mov dl,0h
int 13h
cmp ah,0h
jz povtor1
loop pov
pop es
pop bx
pop cx
pop dx
pop ax
sti
;--------------Чтение с дискеты.--------------------------
povtor1:
mov ax,??????h
mov es,ax
mov ch,0h
mov ah,2h
mov al,8d
mov cl,2h
mov dh,0h
mov dl,0h
mov bx,??????h
int 13h
pop es
pop bx
pop cx
pop dx
pop ax
jmp dword ptr [perex]
perex dd ???????h
begin endp
cseg ends
end begin
В регистр ax а потом и в es заносится адрес сегмента в bx смещение, и осуществляется дальний переход, собственно что писать вместо вопросов какие адреса?
Форумчане помогите пожалуйста, за помощь заранее благодарен.
Последний раз редактировалось De-visible; 25.05.2008 в 12:48..
Причина: Теги [code][/code] для чего придумали???
|
|
|

24.05.2008, 16:24
|
|
Постоянный
Регистрация: 30.04.2008
Сообщений: 323
Провел на форуме: 379101
Репутация:
136
|
|
Interrupt List by Ralf Brown, скачай.
Код:
povtor1:
mov ax,??????h
mov es,ax
mov ch,0h
mov ah,2h
mov al,8d
mov cl,2h
mov dh,0h
mov dl,0h
mov bx,??????h
int 13h
Прерывание int 13h http://www.ctyme.com/intr/int-13.htm
|
|
|

24.05.2008, 17:22
|
|
Новичок
Регистрация: 09.05.2008
Сообщений: 7
Провел на форуме: 4367
Репутация:
10
|
|
Не про список прерываний я спрашивал, мне непонятно как осуществить дальний прыжок в другой сегмент и в какой сегмент грузить мою программу.
|
|
|

24.05.2008, 17:30
|
|
Постоянный
Регистрация: 30.04.2008
Сообщений: 323
Провел на форуме: 379101
Репутация:
136
|
|
Сообщение от v4567
Не про список прерываний я спрашивал, мне непонятно как осуществить дальний прыжок в другой сегмент и в какой сегмент грузить мою программу.
Там написано, что ложить в AX/AH, ты это место отметил в коде ??????
http://www.ctyme.com/intr/int-13.htm
|
|
|

24.05.2008, 18:16
|
|
Новичок
Регистрация: 09.05.2008
Сообщений: 7
Провел на форуме: 4367
Репутация:
10
|
|
[B]Overbreak, спасибо что помогаешь. Я посмотрел эту страницу и в своей программе я записал далее в ah 2h тоесть прерывание 13 функчия 2 чтение с дискеты сектора далее для этой функции указал какие и сколько секторов читать, понял свою первую ошибку указал мало секторов, моя программа занимает больше.
У меня в начале загрузчика записывается в es адрес сектора вот какой сектор записать я и не знаю и как сделать дальний прыжок не знаю, то что написано на этой странице я знаю оно в загрузчике отражено вопрос не в этом.
|
|
|

24.05.2008, 20:52
|
|
Постоянный
Регистрация: 30.04.2008
Сообщений: 323
Провел на форуме: 379101
Репутация:
136
|
|
дальний прыжок всмысле jmp far/qword адрес
Прочти доки по файловой системе FAT*, здесь обсуждалось устройство дискеты
http://wasm.ru/forum/viewtopic.php?id=26488
|
|
|

24.05.2008, 21:13
|
|
Новичок
Регистрация: 09.05.2008
Сообщений: 7
Провел на форуме: 4367
Репутация:
10
|
|
Да именно jmp far/dword
Я сделал так, косвенный дальний переход:
jmp dword ptr [perex]
perex dd 11170000h
1117 - сектор
0000 - смещение
не знаю правильно или нет 0verbreaK если знаешь подскажи правильно так будет или нет.
|
|
|

25.05.2008, 12:39
|
|
Постоянный
Регистрация: 30.04.2008
Сообщений: 323
Провел на форуме: 379101
Репутация:
136
|
|
Загрузка сектора:
- получаем номер сектора dx:ax
- преобразуем его к CSH (цилиндр, сектор, сторона)
- используем прерывание BIOS int 13h
Пишем свой загрузочный сектор http://www.cyberguru.ru/programming/assembler/assembler-boot-sector.html
Код:
PB_BytsPerSec dw 0x200 ; Байт на сектор
BPB_SecPerClus db 1 ; Секторов на кластер
BPB_RsvdSecCnt dw 1 ; Число резервных секторов
BPB_NumFATs db 2 ; Количектво копий FAT
BPB_RootEntCnt dw 224 ; Элементов в корневом катологе (max)
BPB_TotSec16 dw 2880 ; Всего секторов или 0
BPB_Media db 0xF0 ; код типа устройства
BPB_FATsz16 dw 9 ; Секторов на элемент таблицы FAT
BPB_SecPerTrk dw 18 ; Секторов на дорожку
BPB_NumHeads dw 2 ; Число головок
BPB_HiddSec dd 0 ; Скрытых секторов
BPB_TotSec32 dd 0 ; Всего секторов или 0
Все зависит от файловой системы, на дискетах по моему FAT12/16
|
|
|

26.05.2008, 07:36
|
|
Флудер
Регистрация: 27.12.2005
Сообщений: 2,372
Провел на форуме: 5339610
Репутация:
4360
|
|
>> мне непонятно как осуществить дальний прыжок в другой сегмент
push _segment
push _offset
retf
|
|
|
|
 |
Похожие темы
|
| Тема |
Автор |
Раздел |
Ответов |
Последнее сообщение |
|
ОС с нуля
|
z01b |
С/С++, C#, Delphi, .NET, Asm |
36 |
03.07.2008 15:30 |
|
Загрузчик VirusTotal
|
baltazar |
Soft - Windows |
0 |
17.05.2008 20:41 |
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|