Другие языки программирования и технологии

программа "вне системы" на ассемблере...

В книге вычетал что-то вроде прерывание ввода-вывода может работать и не из под windows . Как же можно было бы заставить выполняться программу ещё до загрузки системы? Ну как-то же выполняются программы установки ОС на комп? Как заставить компьютер вывести элементарный "Hello,WORLD!" ещё до загрузки ос? любопытство покоя не даёт ...
Отличный вопрос! Хотя.. .не совсем отличный.
Что значит прерывания ввода-вывода? Вероятно имеется в виду BIOS сервис int 10h.

Немного о BIOS сервисе прочитать можно здесь: http://www.codenet.ru/progr/dos/int_0009.php

Вывести строку "Hello World" до загрузки ОС невозможно, но можно вывести "Hello World" _вместо_ загрузки ОС. Причём, программа на ассемблере, которая выводит строку, легко помещается в начальный загрузчик. (512 байт) .

А можно встречный вопрос? Откуда такое любопытство?
Александр Стрижнев
Александр Стрижнев
2 060
Лучший ответ
не так давно тож заморачивался ...результатом того что не давало покоя было) )
пример для fasm:
org 7c00h
use16
start:
jmp main

nop
db 'bootsect'
SectSize dw 00200h
ClustSize db 001h
ResSecs dw 00001h
FatCnt db 002h;\
RootSiz dw 000E0h; ;+4\\
TotSecs dw 00B40h;;+5// разметка fat ...c hakep.ru
Media db 0F0h;/
FatSize dw 00009h
TrkSecs dw 00012h
HeadCnt dw 00002h
HidnSec dw 00000h

main:
cli
mov ax, cs
mov ds, ax
mov es, ax
mov ss, ax
mov sp, 7c00h
sti
jmp resume_code
resume_code:
mov al,3h
int 10h
mov dx,0904h
xor al,al
mov ah,2h
int 10h
mov bx,00011111b
mov si,msg_size
mov cx,1
writen_loop:
push bx
push dx
mov bx,msg
mov dx,[s4]
add bx,dx
mov al,[bx]
mov ah,9h
pop dx
pop bx
int 10h
mov ah,2h
xor al,al
inc dl
inc word [s4]
;inc bl
;inc bh
int 10h
rsm_loop:
dec si
jnz writen_loop
exit:
mov ah,0
int 16h
mov al,3
int 10h
push 0ffffh
push 0000h
retf
msg db "messaga!!!"
msg_size equ $-msg
s4 dw 0h

finish:
times 512-2-finish+start db 0 ;
db 055H,0AAH; +512b

;org 01FEh
;dw 055aah

;бутблок дискеты с корректной разметкой fat ) // выводит сообщение messaga!!! ожилает нажатия клавиши и ребутится

===
записать на образ дискеты можно если в линухе коммандой
dd if=бинарник. bin of=дискета. img conv=notrunc
// за место дискета. img .. может быть и файл устройства дискеты типо /dev/fd0
Эта тема конечно очень сложная, но постараюсь объяснить в краце один из способов:

После подачи питания на мат. плату весь стартовый код BIOS копируется в оперативную память. Далее процессор инициализируется определенными значениями регистров. После этого начинается выполнение основного кода BIOS, который инициализирует всю аппаратуру, находит устройства загрузки и т. д. Далее загрузчик читает нулевой сектор жесткого диска. Этот нулевой сектор жесткого диска содержит так называемую "главную загрузочную запись (MBR)". Эта запись в себе содержит код, исполняемый процессором. Код MBR прлверяет работоспособность жесткого диска, затем ищет раздел с установленным признаком активности, просматривая таблицу разделов, и передает управление на нулевой байт этого раздела. Так вот, для того, что бы какая-либо программа стартанула еще до загрузк ОС, необходимо написать модель который перепишет MBR на свой собственный код, который после следующий перезагрузки ПК выполнится. Например это будет вывод на экран "Hello world!!!". Конечно это все очень сокращено, для получения более подробной информации тебе в помощь как всегда интернет.