Код (Text): entry _start _start: ;-------------------------------------------------------------------------- ; настраиваем регистры, перносим код в другое адресное пространство ;-------------------------------------------------------------------------- cli ; Запретить прерывания xor ax,ax ; Инициализируем следующие mov ss,ax ; регистры: mov sp,#0x7C00 ; ax = 0 mov si,sp ; sp = 0x7C00h push ax ; si = 0x7C00h pop es ; es = 0 push ax ; ss = 0 pop ds ; ds = 0 sti ; Разрешить прерывания cld ; Установить repne по возрастанию mov di,#0x600 ; di = 0x600 mov cx,#0x100 ; cx = 0x100 repne ; Переслать 512 байт в 0:0x600 movsw ; эта пересылка кода нужна, т.к. по этому ; адресу будет грузится mbr mov ax,#_done ; Это странное преобразование add ax,#0x600 ; нужно только для того, чтобы push ax ; продожить выполнение программы, ret ; но уже по адресу (0x600 + _done) ;-------------------------------------------------------------------------- ; новая точка входа уже по адресу (0x600 + _done) ; настройка изображеныя, вывод сообщения на экран, ожидание нажатия ; клавиши пробел ;-------------------------------------------------------------------------- _done: mov ax,#0x0003 ; установить текстовый режим 80x25 int 0x10 ; одновременно это приводит к очистке экрана mov ah,#1 ; делаем невидимым курсор mov cx,#0x2000 int 0x10 mov si,#msg_hello + 0x600 ; выводим сообщение на экран call show_str press_key: mov ah,#0 ; вызывать прерывание обработки int 0x16 ; ввода данных с клавиатуры cmp ah,#0x39 ; это скан-код пробела? je load_mbr ; если да, то переходим к загрузке jmp press_key ; иначе, ждём следующего нажатия ;-------------------------------------------------------------------------- ; загрузка кода mbr жёсткого диска (master::ide0) по адресу 0:0x7c00 ;-------------------------------------------------------------------------- load_mbr: mov ah,#0x02 ; 0x02 - функция чтения с диска mov al,#0x01 ; 0x01 - кол-во считываемых секторов mov bx,#0x7c00 ; es:bx - адрес буфера для операции чтения mov ch,#0x00 ; 0x00 - номер дорожки (цилиндра) mov cl,#0x01 ; 0x1 - номер стартового сектора mov dh,#0 ; номер головки чтения/записи mov dl,#0x80 ; 0x80 - номер диска (master::ide0) int 0x13 jmp far 0:0x7c00 ; Передаем управление загруженному коду msg_hello: .byte 13,10 .ascii "Linux Gazette ... сделаем работу с Linux немного веселее!" .byte 13,10 .byte 0 show_str: lodsb ; вывод сообщения на экран cmp al,#0x00 ; в режиме телетайпа je end_show_str ; переход, если конец ; сообщения push si ; запоминаем указатель mov bx,#7 mov ah,#0x0e int 0x10 ; вывод на экран pop si ; восстанавливаем указатель jmp show_str ; продолжаем вывод сообщения end_show_str: ret и вывод сообщения непроисходит ошибку указывает.
s2004 а что ты еще ожидал? у тебя же: mov dh,#0 ; номер головки чтения/записи mov dl,#0x80 ; 0x80 - номер диска (master::ide0) это вообще откуда ты такой код откопал?! номер загрузочного устройства BIOS тебе уже в dl передаст щас взял кнопиха отрыл iso в hiew'е, вот код загрузчика: Код (Text): 0018895: 8816A572 mov [72A5],dl 0018899: B8014B mov ax,04B01 ;"K" 001889C: 8A16A572 mov dl,[72A5] 00188A0: BE9080 mov si,08090 ;"АР" 00188A3: CD13 int 013 00188A5: 725C jb 000018903 ---↓ (3) надеюсь, принцип ясен?
в догонку. кури "Bootable CD-ROM Format Specification" http://bochs.sourceforge.net/techspec/el-torito.pdf.gz на cd/dvd нет mbr
s2004 в твоем коде строка: mov dl,#0x80 ; 0x80 - номер диска (master::ide0) принудительно грузиться с ide0, хотя у меня например загрузочный хард совсем не ide0 номер устройства BIOS сама передаст тебе в регистре dx, так что париться с этим не нужно но вообще в твоем коде прорва ошибок если интересно пришлю свою статью о том, как писать загрузчики
http://nezumi.org.ru/zq-asm.MBR.zip она не совсем о загрузке c CD, точнее, даже совсем не об этом но... а так... бери любой загрузочный CD/DVD и дери оттуда загрузчик. он очень просто дизасмится. сам загрузчик (без знания формата CD) ищется по сигнатуре int 13/jc xx
kaspersky А можно выложить на сервак неархивированные документы? А то у нас на работе прокся блокирует zip, rar, exe. txt, pdf и прочие доки качать могу. gz вроде не блокирует, можно было бы и его.