608 / 406 / 8
Регистрация: 26.04.2012
Сообщений: 2,065
|
||||||
1 | ||||||
небольшой загузчик30.01.2013, 15:11. Показов 6022. Ответов 70
Метки нет (Все метки)
набросал загрузчик, через Hex Editor Neo загнал его в самое начало ima-образа дискеты, но он не работает... как правильно его туда записать, чтобы загрузка проходила нормально?
Код
//hex-dump загрузчика eb 3c 90 46 45 6c 6f 61 64 65 72 00 02 01 01 00 02 e0 00 40 0b f0 09 00 12 00 02 00 00 00 00 00 00 00 00 00 00 00 29 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 46 41 54 31 32 20 20 20 8c c8 8e d8 be 55 01 fc b4 0e b7 00 ac 84 c0 74 04 cd 10 eb f7 eb fe 48 65 6c 6c 6f 20 57 6f 72 6c 64 21 00
0
|
30.01.2013, 15:11 | |
Ответы с готовыми решениями:
70
Нужен небольшой совет Небольшой загрузчик Небольшой ступор Небольшой Converter |
608 / 406 / 8
Регистрация: 26.04.2012
Сообщений: 2,065
|
|
30.01.2013, 15:14 [ТС] | 2 |
пускаю в виртуал боксе, машина просто встает. ничего не делает...
0
|
639 / 482 / 12
Регистрация: 10.01.2011
Сообщений: 1,045
|
||||||
30.01.2013, 15:23 | 3 | |||||
Fatal Error, вот, писал как-то на досуге. Попробуй этот код.
1
|
608 / 406 / 8
Регистрация: 26.04.2012
Сообщений: 2,065
|
|
30.01.2013, 16:05 [ТС] | 4 |
да, текст есть, но какой-то не тот... я наверное что-то не так делаю... как правильно забить его в корень образа?
0
|
64 / 64 / 0
Регистрация: 06.10.2011
Сообщений: 299
|
|
30.01.2013, 16:21 | 5 |
http://ziplib.com/emu8086/
вот тут в эммуляторе есть работающий пример мини оси, загрузчик и утилита для его записи на дискету, подключи образ как флоппи диск виртуальным драйвером и запиши туда. на железе работает и на виртуалке тоже
1
|
639 / 482 / 12
Регистрация: 10.01.2011
Сообщений: 1,045
|
|
30.01.2013, 16:30 | 6 |
Fatal Error, com файл переименуй в .img. Подключи к VirtualBox. Убери загрузку с остальных носителей.
1
|
608 / 406 / 8
Регистрация: 26.04.2012
Сообщений: 2,065
|
|
30.01.2013, 17:10 [ТС] | 7 |
все сделал!!! через фасм норм, тасм не дает сделать org 7C00h
0
|
1127 / 261 / 9
Регистрация: 11.06.2010
Сообщений: 1,049
|
|
30.01.2013, 17:24 | 8 |
Дает. Просто указывай расширение BIN у выходного файла, ибо он(TASM) вредный
0
|
639 / 482 / 12
Регистрация: 10.01.2011
Сообщений: 1,045
|
|
30.01.2013, 17:29 | 9 |
Fatal Error, я masm32 собирал.
c:\Program Files\Bochs-2.4.6>ml /omf /Zm c.asm Microsoft (R) Macro Assembler Version 10.00.30319.01 Copyright (C) Microsoft Corporation. All rights reserved. Assembling: c.asm c:\Program Files\Bochs-2.4.6>link16 /t c.obj,c.img; Microsoft (R) Segmented Executable Linker Version 5.60.339 Dec 5 1994 Copyright (C) Microsoft Corp 1984-1993. All rights reserved. LINK : warning L4055: start address not equal to 0x100 for /TINY
0
|
Ушел с форума
16281 / 7605 / 1066
Регистрация: 11.11.2010
Сообщений: 13,618
|
|
30.01.2013, 17:34 | 10 |
sh2ezo,
а как в masm создать com-файл, чтобы в начале стояло "org 400000h"?
0
|
608 / 406 / 8
Регистрация: 26.04.2012
Сообщений: 2,065
|
|
30.01.2013, 17:41 [ТС] | 11 |
Vadimych, тасм не дает. он говорит мол неверная точка входа в ком-проге. а фасм без проблем съел код!!!
0
|
639 / 482 / 12
Регистрация: 10.01.2011
Сообщений: 1,045
|
|
30.01.2013, 18:06 | 12 |
Fatal Error, я тебе об masm32, ты мне об tasm. И тасм даёт, ты просто просить не умеешь.
d:\DOSPROG\TASM>tasm 5 Turbo Assembler Version 4.1 Copyright (c) 1988, 1996 Borland International Assembling file: 5.ASM Error messages: None Warning messages: None Passes: 1 Remaining memory: 451k d:\DOSPROG\TASM>tlink /t 5.obj,5.bin Turbo Link Version 7.1.30.1. Copyright (c) 1987, 1996 Borland International sh2ezo писал же тебе.
0
|
64 / 64 / 0
Регистрация: 06.10.2011
Сообщений: 299
|
|
30.01.2013, 18:32 | 13 |
Создание загрузочного сектора
так же как ком программу похоже надо компилировать с /TINY
0
|
sh2ezo
|
30.01.2013, 18:46
#14
|
0
|
64 / 64 / 0
Регистрация: 06.10.2011
Сообщений: 299
|
|
30.01.2013, 18:51 | 15 |
вот я взял пример из эмулятора. ядро системы скомпилил на эмуляторе, а бут сектор на масме. там пришлось кое что подправлять в синтаксисе, возможно чета накосячил потому что ядро не грузится, но бутсектор скомпилился и грузится. надо проверять что я там напрвил. проверял подключив образ флоппи диска виртуальным драйвером записал туда бутсектор и ядро, а запускал на виртуалке
0
|
64 / 64 / 0
Регистрация: 06.10.2011
Сообщений: 299
|
|
30.01.2013, 19:20 | 16 |
Код
cmp byte ptr es:[0000h],0E9h ; first byte of kernel must be 0E9 (jmp). Добавлено через 11 минут поковыряйтесь кто нибудь свежим взглядом. на три байта код отличается а не могу ошибки найти
0
|
608 / 406 / 8
Регистрация: 26.04.2012
Сообщений: 2,065
|
||||||
30.01.2013, 23:31 [ТС] | 17 | |||||
bomz, в приведенном архиве в файле micro-os_loader 75 строка
0
|
64 / 64 / 0
Регистрация: 06.10.2011
Сообщений: 299
|
|
31.01.2013, 00:30 | 18 |
хм не готов ответить. но в эмуляторе естественно все копилится. можно код побайтно сравнить в 16 ричном редакторе или дезассемблировать в одном дезасемблере
Добавлено через 32 минуты Код
; boot record is loaded at 0000:7c00 org 7c00h ; initialize the stack: mov ax, 07c0h mov ss, ax mov sp, 03feh ; top of the stack. Добавлено через 3 минуты надо дезасемблировать найти ошибку. ну сделайте кто нибудь. компилируется скорее всего правильно потому что на несколько байт различается, так что ошибка в смене синтаксиса, у эммулятора есть даже свои примочки - указания компилятору через директивы, и еще вот это w. = word ptr , b. = byte ptr Добавлено через 17 минут дезассемблировал - дело все таки в компиляции
0
|
64 / 64 / 0
Регистрация: 06.10.2011
Сообщений: 299
|
|
31.01.2013, 01:26 | 19 |
не получается ни хрена, только добился что org 0h делается.
0
|
64 / 64 / 0
Регистрация: 06.10.2011
Сообщений: 299
|
|
31.01.2013, 02:11 | 20 |
зделал дурацкая ошбка как обычно.
Кликните здесь для просмотра всего текста
Код
name "loader" ; this is a very basic example of a tiny operating system. ; directive to create boot file: ; #make_boot# ; this is an os loader only! ; ; it can be loaded at the first sector of a floppy disk: ; cylinder: 0 ; sector: 1 ; head: 0 ;================================================= ; how to test micro-operating system: ; 1. compile micro-os_loader.asm ; 2. compile micro-os_kernel.asm ; 3. compile writebin.asm ; 4. insert empty floppy disk to drive a: ; 5. from command prompt type: ; writebin loader.bin ; writebin kernel.bin /k ;================================================= ; ; The code in this file is supposed to load ; the kernel (micro-os_kernel.asm) and to pass control over it. ; The kernel code should be on floppy at: ; cylinder: 0 ; sector: 2 ; head: 0 ; memory table (hex): ; ------------------------------- ; 07c0:0000 | boot sector ; 07c0:01ff | (512 bytes) ; ------------------------------- ; 07c0:0200 | stack ; 07c0:03ff | (255 words) ; ------------------------------- ; 0800:0000 | kernel ; 0800:1400 | ; | (currently 5 kb, ; | 10 sectors are ; | loaded from ; | floppy) ; ------------------------------- ; To test this program in real envirinment write it to floppy ; disk using compiled writebin.asm ; After sucessfully compilation of both files, ; type this from command prompt: writebin loader.bin ; Note: floppy disk boot record will be overwritten. ; the floppy will not be useable under windows/dos until ; you reformat it, data on floppy disk may be lost. ; use empty floppy disks only. ; micro-os_loader.asm file produced by this code should be less or ; equal to 512 bytes, since this is the size of the boot sector. ;.model tiny CSEG segment assume CS:CSEG ; boot record is loaded at 0000:7c00 org 7c00h start: ; initialize the stack: mov ax, 07c0h mov ss, ax mov sp, 03feh ; top of the stack. ; set data segment: xor ax, ax mov ds, ax ; set default video mode 80x25: mov ah, 00h mov al, 03h int 10h ; print welcome message: lea si, msg call print_string ;=================================== ; load the kernel at 0800h:0000h ; 10 sectors starting at: ; cylinder: 0 ; sector: 2 ; head: 0 ; BIOS passes drive number in dl, ; so it's not changed: mov ah, 02h ; read function. mov al, 10 ; sectors to read. mov ch, 0 ; cylinder. mov cl, 2 ; sector. mov dh, 0 ; head. ; dl not changed! - drive number. ; es:bx points to receiving ; data buffer: mov bx, 0800h mov es, bx mov bx, 0 ; read! int 13h ;=================================== ; integrity check: cmp byte ptr es:[0000h],0E9h ; first byte of kernel must be 0E9 (jmp). je integrity_check_ok ; integrity check error lea si, err call print_string ; wait for any key... mov ah, 0 int 16h ; store magic value at 0040h:0072h: ; 0000h - cold boot. ; 1234h - warm boot. mov ax, 0040h mov ds, ax mov word ptr ds:[0072h], 0000h ; cold boot. ;jmp 0ffffh:0000h ; reboot! db 0EAh, 0h, 0h, 0ffh, 0ffh ;=================================== integrity_check_ok: ; pass control to kernel: ;jmp 0800h:0000h db 0EAh, 0h, 0h, 0h, 08h ;=========================================== print_string proc near push ax ; store registers... push si ; next_char: mov al, [si] cmp al, 0 jz printed inc si mov ah, 0eh ; teletype function. int 10h jmp next_char printed: pop si ; re-store registers... pop ax ; ret print_string endp ;==== data section ===================== msg db "Loading...",0Dh,0Ah, 0 err db "invalid data at sector: 2, cylinder: 0, head: 0 - integrity check failed.", 0Dh,0Ah db "refer to tutorial 11 - making your own operating system.", 0Dh,0Ah db "System will reboot now. Press any key...", 0 ;====================================== codeend: db 510-(codeend-start) dup (?) db 055h,0AAh CSEG ends end start Код
@ECHO OFF COLOR 9F cd /d %~dp1 C:\masm32\bin\ml.exe /omf %~s1 C:\masm32\bin\LINK16.EXE /tiny %~sn1.obj,%~sn1.bin,nul,,, del %~sn1.obj pause Код
CSEG segment assume CS:CSEG org 7c00h start: mov ax, 07c0h mov ss, ax mov sp, 03feh ............................ CSEG ends end start
0
|
31.01.2013, 02:11 | |
31.01.2013, 02:11 | |
Помогаю со студенческими работами здесь
20
Небольшой баг Небольшой тест Небольшой шифровальщик небольшой вопрос..... Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |