рдПрдХ рдмрд╛рд░ рдлрд┐рд░, рдореИрдВрдиреЗ рдПрдХ рдпреВрдПрд╕рдмреА-рдбреНрд░рд╛рдЗрд╡ рдореЗрдВ рд▓рд┐рдирдХреНрд╕-рдЫрд╡рд┐ рдХреЛ рддреИрдирд╛рдд рдХрд┐рдпрд╛ (рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рдпрд╣ рдордВрдЬреВрд░реЛ рдирд┐рдХрд▓рд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рдХрд╣рд╛рдиреА рд╣реИ), рдФрд░ рдЕрдЬреАрдм рд╡рд┐рдЪрд╛рд░ рдореЗрд░реЗ рд╕рд┐рд░ рдореЗрдВ рдШреВрдорддреЗ рд╣реИрдВ: BIOS рдиреЗ рдпреВрдПрд╕рдмреА рдлреНрд▓реИрд╢ рдбреНрд░рд╛рдЗрд╡ рджреЗрдЦрд╛, рдФрд░ рдлрд┐рд░ рдХреНрдпрд╛? рдЦреИрд░, рд╣рд╛рдБ, рдПрдХ MBR рд╣реИ, рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ GRUB, рдФрд░ ... рдФрд░ MBR рдореЗрдВ рдПрдХ рдмрд╛рд░ рдХрд┐рд╕реА рдФрд░ рдХреЗ рдХрд╕реНрдЯрдо рдХреЛрдб рдХреЛ рдкреЙрдк рдЕрдк рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ Adygea рдХрд╛ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд╡реНрдпрдХреНрддрд┐ "рдмрдбрд╝реЗ" рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░ рдХреБрдЫ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдмрд╛рд╣рд░ред
рдФрд░ рдЪреВрдВрдХрд┐ рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдРрд╕реЗ рдХрд╛рдо рдХрд░рдирд╛ рдмрд╣реБрдд рд╣реА рд╕рд╛рд╣рд╕рд┐рдХ рд╣реИ, рдФрд░ рд╣рдо рдЕрд╕реЗрдВрдмрд▓рд░реЛрдВ рдХреЛ рдирд╣реАрдВ рдЬрд╛рдирддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдо рд╕реАрдзреЗ 8086 рдХреЗ рд▓рд┐рдП opcodes рдкрд░ рдЦрд░реНрдЪ рдХрд░реЗрдВрдЧреЗред

рдкрд░рд┐рдЪрдп
рдпреЛрдЬрдирд╛:
- рдирд┐рдХрд╛рд▓рдирд╛ 
# - рдирд┐рдХрд╛рд▓рдирд╛ 
Hello, Habrauser! - рдЗрдирдкреБрдЯ рд╡рд░реНрдг рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдВ (рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдмрдЪреНрдЪреЛрдВ рдХрд╛ рдордиреЛрд░рдВрдЬрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ)ред
 
рдЕрд╕реНрд╡реАрдХрд░рдг рдФрд░ рдЕрд╕реНрд╡реАрдХрд░рдг
рдлреНрд▓рд╛рдкрд░ рдХреА рдЧрд░реНрдЬрдирд╛ рд╕реЗ рдкрд░реЗрд╢рд╛рди рди рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдкреНрд░рд╢рд┐рдХреНрд╖рдг рджреЗрдВрдЧреЗ рдмрд┐рд▓реНрд▓реА рдХреА QEMU. , , dd x86- . .
MBR, - (?) (?) тАФ , Enter. .
тАФ , ( !) - . ( .) ! .
MBR
:
- , 
Bootstrap Area . - , ( ) 
0x7c00 ( Compaq). - , , ( , --). : 640KB, . ( , .)
 
, тАФ , .
, , , , (sic!) . , ( - ), , .
, - ┬л┬╗ 80- ┬л-┬╗ 90-, : ┬л┬╗ ┬л┬╗. ┬л┬╗, Lode Runner, ┬л┬╗.
┬л┬╗ +
!
 -, , , , , тАФ errata.
, , , .
:
- , 
MOV, INT, ADD, DIV тАФ , , , . , , , . - , , , : 
imm8, r16, r/m32, rel8. , , (, ) , , DIV BL F6 F3 (DIV r/m8, , , тАФ .) F6 тАФ DIV, NEG, ( opcode extension тАФ .) 
, , dd, , , , , тАФ , , -. -, тАж , POSIX , !
тЮЬ  $ echo "48 65 6c 6c 6f 2c 20 48 61 62 72 21" | xxd -r -p 
Hello, Habr!%    
:
тЮЬ  $ echo -e "# Comment\n48 65 6c 6c 6f 2c 20  # First line\n48 61 62 72 21        # Last line" | sed 's/#.*$//g' | xxd -r -p
Hello, Habr!%  
( sed-, xxd , hex-dump. ?)
, , .
, sh-#!/bin/sh
IN="${1:-/dev/stdin}"
OUT="${2:-/dev/stdout}"
> $OUT
while read line
do
    echo "$line" | sed 's/#.*$//' | xxd -r -p >> $OUT
done < $IN
 
: LF (aka \n), . , , , , - , тАФ .
тАФ , !
тЮЬ  $ ./build loader.mbr loader.img && stat -f %z loader.img
512
512 тАФ , . , .
, bin- 512B, . ┬л dd /dev/zero, !┬╗ тАФ . , c ( , ipython) !
,
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
 
, , , QEMU, Exception'.

, , ( ), MBR.
,...
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00
 
, :
55 AA
:
$ qemu-system-i386 -nic none loader.img
-nic none , PXE, тАФ .

, BIOS , ! , !
PRINT "#"
, !
, . :
B4 0E                      
B0 23                      
CD 10                      
00 00
00 00 00 00 00 00 00 00
( , 512).
, QEMU !

, , , , :
B4 0E тАФ AH 0E ( mov ah, 0e), BIOS ( ), , .B0 23 тАФ : AL #. ? ┬л┬╗? тАФ ASCII- man ascii!CD 10 тАФ : BIOS-, . , AL AH, , : .
, AL :
$ (B0 24)% (B0 25)├б (B0 A0, )
PRINT "Hello, Habrauser!"
, , . .
- . тАФ printf('Hell of word') .
, , :
,
B4 0E    
B0 0A    
CD 10
B0 48    
CD 10    
B0 65    
CD 10
B0 6C    
CD 10
B0 6C
CD 10
B0 6F    
CD 10
B0 2C    
CD 10
B0 20    
CD 10
B0 48    
CD 10
B0 61    
CD 10
B0 62    
CD 10
B0 72    
CD 10
B0 61    
CD 10
B0 75    
CD 10
B0 73    
CD 10
B0 65    
CD 10
B0 72    
CD 10
B0 21    
CD 10
00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
 ,
, , :

:
- ,
 - , ,
 - , BIOS' тАФ - , 
Booting from Hard Disk.... 
, :
B8 00 06          
CD 10
B4 0E             
BE 80 7C          
AC                
3C 00             
74 06             
CD 10             
EB F7             
00 00 00 00 00
00 00 00 00 00 00 00 00
...
48 65 6C 6C 6F 2C 20 48   
61 62 72 61 75 73 65 72   
21                        
00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
:
- : , 
0x7c00, . ? data- ( ), ( !), SI тАФ . SI AC ( LODS). , SI AL, SI! , !- . , . , , ?
 AL, , тАФ ( , 6 ), 00 .AL - , BIOS-...- тАж 7 тАФ 
LODS! 
, . , .
, - . : BIOS- . тАж . тАФ ( , тАФ ).
, . printer.mbr typewriter.mbr.
, :
B4 07   
B0 00   
CD 10   
B4 00   
CD 16   
3C 0D   
75 06   
B4 0E   
CD 10   
B0 0A   
B4 0E   
CD 10   
EB EC   
1
:
- ( QEMU) .
 AH = 00h 16h, , , AL.- , : 
OD (aka CR aka ), Return/Enter, , ( -), . CR CR, LF, , Enter.AL OD, , .- : -- , ! 20 .
 
, :

, :
- , ┬л┬╗ ,
 - , ,
 - ┬л┬╗: 
Backspace , . 
. emacs- .
, .
, - :

, . , :
B8 12 00          
CD 10
B4 0E             
B3 00             
FE C3             
BE 80 7C          
AC                
3C 00             
74 F6             
CD 10             
EB F7             
00
00 00 00 00 00 00 00 00
...
48 65 6C 6C 6F 2C 20 48   
61 62 72 61 68 61 62 72   
21 20                     
00 00 00 00 00 00
00 00 00 00 00 00 00 00
color-printer.mbr
- (? ? BIOS?) , ,
 BL (. , .)FE BL- : , , , .
 
.
, .
, :
тАФ !
тАФ .
, Sublime Text :
тАФ --, ! !
.
- .
UPD: eisaev, Andrew_Pinkerton, MrSmith33, Anthony1025 , , .