{"id":334143,"date":"2022-06-07T09:00:15","date_gmt":"2022-06-07T09:00:15","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=334143"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=334143","title":{"rendered":"<span>\u041d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u041e\u0421 \u0441 \u043d\u0443\u043b\u044f: \u0427\u0430\u0441\u0442\u044c 1 \u2014 \u0417\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a<\/span>"},"content":{"rendered":"<div><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<h2>\u0414\u0438\u0441\u043a\u043b\u0435\u0439\u043c\u0435\u0440?<\/h2>\n<p>\u0425\u0430\u0439 \u0425\u0430\u0431\u0440! \u042d\u0442\u043e \u0441\u0435\u0440\u0438\u044f \u0441\u0442\u0430\u0442\u0435\u0439 \u043f\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044e \u043c\u043e\u0435\u0439 \u041e\u0421 \u0441 \u043d\u0443\u043b\u044f. \u042f \u043b\u044e\u0442\u044b\u0439 \u0444\u0430\u043d\u0430\u0442 \u0440\u0435\u0442\u0440\u043e\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u043c\u0433\u043d\u043e\u0432\u0435\u043d\u043d\u043e \u0437\u0430\u0431\u0443\u0434\u0443 \u043f\u0440\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u0438\u0435  ED\u041a. \u041f\u0440\u043e\u0441\u044c\u0431\u0430 \u043d\u0435 \u043f\u0438\u0441\u0430\u0442\u044c \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u044b \u043f\u043e \u0442\u0438\u043f\u0443 &#171;BIOS \u0434\u0430\u0432\u043d\u043e \u0443\u0441\u0442\u0430\u0440\u0435\u043b\u0430 \u0433\u0434\u0435 UEFI?&#187;. \u041f\u0438\u0448\u0443 \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0447\u0442\u043e\u0431\u044b \u0431\u044b\u043b\u043e, \u0447\u0442\u043e \u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0432\u0435\u0447\u0435\u0440\u043e\u043c \u0438 \u043f\u043e\u0440\u0435\u043b\u0430\u043a\u0441\u0438\u0442\u044c. \u0421\u043f\u0430\u0441\u0438\u0431\u043e.<\/p>\n<h2>\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0434\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c\u0441\u044f<\/h2>\n<p>\u0415\u0441\u043b\u0438  \u0432\u044b \u043d\u0435 \u0432\u043b\u0430\u0434\u0435\u0435\u0442\u0435 \u044f\u0437\u044b\u043a\u043e\u043c \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u0430, \u0442\u043e \u043c\u043e\u0436\u0435\u0442\u0435 \u0438\u0441\u043f\u044b\u0442\u0430\u0442\u044c \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0432 \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u0438 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u044f\u0449\u0435\u0433\u043e. \u041f\u043e\u043b\u044c\u0437\u0443\u044e\u0441\u044c \u044f \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u043e\u043c &lt;a href=&#187;https:\/\/flatassembler.net&#187;>FASM&lt;\/a><\/p>\n<h2>\u0412\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u041f\u041a<\/h2>\n<p>\u041f\u0440\u0438 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438 \u041f\u041a, \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442 \u0432 \u041e\u0417\u0423 \u0411\u0418\u041e\u0421, \u043e\u043d\u0430 (\u0411\u0418\u041e\u0421) \u0432 \u0441\u0432\u043e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442 \u043d\u043e\u0441\u0438\u0442\u0435\u043b\u0438 \u043d\u0430 \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u0437\u0430\u0433\u0440\u0443\u0437\u043e\u0447\u043d\u043e\u0439 \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u044b &#8212; \u0441\u043b\u043e\u0432\u0430 0\u044555\u0410\u0410 \u043f\u043e \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044e 0x1FE. \u0415\u0441\u043b\u0438 \u043e\u043d\u0430 (\u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u0430) \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442, \u0442\u043e \u043f\u0435\u0440\u0432\u044b\u0435 512 \u0431\u0430\u0439\u0442 \u0441 \u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044f \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442\u0441\u044f \u0432 \u041e\u0417\u0423 \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443 0\u04457\u042100 \u0438 \u0411\u0418\u041e\u0421 \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u044d\u0442\u043e\u043c\u0443 \u043a\u043e\u0434\u0443.<\/p>\n<h2>\u041a \u0434\u0435\u043b\u0443<\/h2>\n<p>\u041d\u0430\u043f\u0438\u0448\u0435\u043c \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0447\u0438\u0441\u0442\u0438\u0442 \u044d\u043a\u0440\u0430\u043d \u0438 \u043d\u0430\u043f\u0435\u0447\u0430\u0442\u0430\u0435\u0442 &#171;\u041f\u0440\u0438\u0432\u0435\u0442, \u043c\u0438\u0440!&#187;:<\/p>\n<pre><code class=\"assembly\">format binary as \"sec\" use16 org 0x7C00  jmp boot nop  db      'HEXOS   '      ; db 8 dw      512             ; bytes per sector db      1               ; sectors per cluster dw      1               ; number of reserver sectors db      2               ; count of FAT data structures dw      224             ; count of 32-byte dir. entries (224*32 = 14 sectors) dw      2880            ; count of sectors on the volume (2880 for 1.44 mbytes disk) db      0f0h            ; f0 - used for removable media dw      9               ; count of sectors by one copy of FAT dw      18              ; sectors per track dw      2               ; number of heads dd      0               ; count of hidden sectors dd      0               ; count of sectors on the volume (if > 65535) db      0               ; int 13h drive number db      0               ; reserved db      29h             ; Extended boot signature db      0               ; Volume serial number db      'HEXOS      '   ; Volume label (db 11) db      'HAT16   '      ; file system type (db 8)  msg db \"Hello, World!!\", 0x0D, 0x0A, 0x00  printsz: mov ah, 0x0E   .cycle:   lodsb     test al, al     jz .end     int 0x10     jmp .cycle   .end:   ret   ; ;  boot: mov ax, 0x0003   int 0x10   mov si, msg   call printsz   ;   cli   hlt ;  times 512-$+$$-2 db 0x00  db 0x55, 0xAA<\/code><\/pre>\n<p>\u0418\u0442\u0430\u043a, \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u044d\u0442\u043e \u0447\u0443\u0434\u043e \u0432 qemu \u0438 \u0432\u0438\u0434\u0438\u043c:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/925\/096\/d2b\/925096d2bfc7c075ce2bf566022fa636.png\" alt=\"\u0420\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u0439 &quot;\u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a&quot;\" title=\"\u0420\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u0439 &quot;\u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a&quot;\" width=\"994\" height=\"816\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/925\/096\/d2b\/925096d2bfc7c075ce2bf566022fa636.png\"\/><figcaption>\u0420\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u0439 &#171;\u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a&#187;<\/figcaption><\/figure>\n<p>\u0423\u0440\u0430! \u0412\u0441\u0451 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442. \u041d\u043e \u044f \u043d\u0430\u0437\u044b\u0432\u0430\u044e \u044d\u0442\u043e &#171;\u0417\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a&#187;, \u043d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u043e\u043d \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442. \u041d\u0435\u0445\u043e\u0440\u043e\u0448\u043e. \u041d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0442\u0430\u043a\u0436\u0435 \u0438\u0437\u0431\u0430\u0432\u0438\u0442\u0441\u044f \u043e\u0442 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u0432 512 \u0431\u0430\u0439\u0442. \u0432 \u0442\u0430\u043a\u043e\u0439 \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0439 \u043e\u0431\u044c\u0435\u043c \u043c\u0430\u043b\u043e-\u043b\u0438 \u0447\u0442\u043e \u0443\u043c\u0435\u0441\u0442\u0438\u0442\u0441\u044f.<\/p>\n<h2>\u041f\u043e\u0434\u0445\u043e\u0434\u0438\u043c \u043a \u0434\u0435\u043b\u0443 \u0441\u0435\u0440\u044c\u0435\u0437\u043d\u043e<\/h2>\n<p>\u0418\u0442\u0430\u043a, \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0438\u0437\u0431\u0430\u0432\u0438\u0442\u044c\u0441\u044f \u043e\u0442 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u0432 512 \u0431\u0430\u0439\u0442. \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u0432\u0430\u0440\u0438\u0430\u043d\u0442, \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0432\u0435\u0441\u044c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u044e\u0449\u0438\u0439 \u043d\u0430\u0441 \u043a\u043e\u0434 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e, \u0430 \u043f\u043e\u0442\u043e\u043c \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u043e\u0434\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0435\u0433\u043e. \u0414\u0430, \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0438 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442 \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a\u0438.<\/p>\n<h2>\u041a \u0434\u0435\u043b\u0443 2<\/h2>\n<p>\u041d\u0430\u043f\u0438\u0448\u0435\u043c \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0442\u044c \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0439 \u043a\u043e\u0434 \u0441 \u0434\u0438\u0441\u043a\u0430 \u0432 \u041e\u0417\u0423 \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443 0\u04457\u041500(\u0438\u043b\u0438 \u0436\u0435 0\u04457\u042100+512):<\/p>\n<details class=\"spoiler\">\n<summary>boot.asm<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"assembly\">;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;                                                              ;; ;; Copyright (C) HexOS author 2019-2022. All rights reserved.   ;; ;; Distributed under terms of the GNU General Public License    ;; ;;                                                              ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;  format binary as \"sec\"  use16  org 7C00h  jmp boot_entry  nop  include \"bpb.inc\"  msg db \"HexOS bootloader v2.1.3 by Ivan Chetchasov\", 0Dh, 0Ah, 0x00  log db \"Loading second stage...\", 0Dh, 0Ah, 0x00  include \"boot.inc\"  boot_entry:  cls  printsz msg  printsz log  mov  ah, 02h mov  al, 10h mov  cx, 0002h mov  bx, 7E00h movs es, 0000h int 13h  mov sp, 7E0h movs ds, 7E00h jmp 0000:7E00h  cli hlt jmp $-2  times 200h-2h-$+$$ db 00h  dw 0AA55h<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>boot.inc<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"assembly\">;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;                                                              ;; ;; Copyright (C) HexOS author 2019-2022. All rights reserved.   ;; ;; Distributed under terms of the GNU General Public License    ;; ;;                                                              ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;  __print_stringz__: mov ah, 0x0E __print_stringz__.__print_loop__: lodsb test al, al jz __print_stringz__.__print_ending__ int 10h jmp __print_stringz__.__print_loop__ __print_stringz__.__print_ending__: ret macro printsz charptr {     push ax si     mov si, charptr     call __print_stringz__     pop si ax } macro cls {     push ax     mov ax, 0003h     int 10h     pop ax }  macro movs reg, src {     push ax     mov ax, src     mov es, ax     pop ax }<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>second.asm<\/summary>\n<div class=\"spoiler__content\">\n<p>;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br \/> ;;                                                              ;;<br \/> ;; Copyright (C) HexOS author 2019-2022. All rights reserved.   ;;<br \/> ;; Distributed under terms of the GNU General Public License    ;;<br \/> ;;                                                              ;;<br \/> ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<\/p>\n<p>format binary as &#171;sec&#187;<\/p>\n<p>org 7E00h<br \/> start:<br \/> use16<\/p>\n<p>; header zone<\/p>\n<p>jmp second_entry<\/p>\n<p>nop<\/p>\n<p>; import zone<\/p>\n<p>include &#171;second.inc&#187;<\/p>\n<p>; executable zone<\/p>\n<p>second_entry:<\/p>\n<p>cls<\/p>\n<p>;printsz msg0<\/p>\n<p>mov ah, 02h<br \/> mov al, 08h<br \/> mov cx, 0012h; 0012h is correct<br \/> ; dl was not modified<br \/> mov bx, 8100h<br \/> movs es, 0000h<br \/> int 13h<\/p>\n<p>jc err0<\/p>\n<p>mov sp, 810h<br \/> movs ds, 8100h<br \/> jmp 0000:8100h<\/p>\n<p>err0:<\/p>\n<p>; construct BSOD stylish<br \/> cls<br \/> MOV AH, 06h<br \/> XOR AL, AL<br \/> XOR CX, CX<br \/> MOV DX, 184Fh<br \/> MOV BH, 17h<br \/> INT 10h<\/p>\n<p>; print data<br \/> printsz bsod0<\/p>\n<p>jmp endall<\/p>\n<p>endall:<\/p>\n<p>cli<br \/> hlt<br \/> jmp $-2<\/p>\n<p>; data zone<\/p>\n<p>msg0 db &#171;HexOS Second-stage Bootloader v2.2.1 by Ivan Chetchasov&#187;, newline<br \/> db &#171;LOG: Loading HAT16 filetable&#187;, newline, 00h<\/p>\n<p>bsod0:<br \/> db newline<br \/> db newline<br \/> db &#187;             ((((((&#171;, newline<br \/> db &#187;           ((::::::(   ERROR OCCURRED&#187;, newline<br \/> db &#187;         ((:::::::(    At position:  00007E32h&#187;, newline<br \/> db &#187;        (:::::::((&#171;, newline<br \/> db &#187;        (::::::(       Reason: cannot load kernel&#187;, newline<br \/> db &#187; :::::: (:::::(        Maybe your disk is corrupted&#187;, newline<br \/> db &#187; :::::: (:::::(        So try to re-install system&#187;, newline<br \/> db &#187; :::::: (:::::(        Or append file &#8216;System\/kernel.hex'&#187;, newline<br \/> db &#187;        (:::::(        To your disk with other PC&#187;, newline<br \/> db &#187;        (:::::(        (be careful, maybe virus killed&#187;, newline<br \/> db &#187;        (:::::(        your PC, don`t infect other one!)&#187;, newline<br \/> db &#187; :::::: (::::::(    &#171;, newline<br \/> db &#187; :::::: (:::::::((  &#171;, newline<br \/> db &#187; ::::::  ((:::::::( &#171;, newline<br \/> db &#187;           ((::::::(&#171;, newline<br \/> db &#187;             ((((((&#171;, newline<br \/> db newline<br \/> db &#171;Errcode: 0000000Dh Errname: ERROR_CANNOT_LOAD_KERNEL&#187;, newline, 00h<\/p>\n<p>; filler<\/p>\n<p>times 200h*16-1+start-$ db 00h<\/p>\n<p>; magic<\/p>\n<p>db EOF<\/p>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>second.inc<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"assembly\"> ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;                                                              ;; ;; Copyright (C) HexOS author 2019-2022. All rights reserved.   ;; ;; Distributed under terms of the GNU General Public License    ;; ;;                                                              ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;  __print_stringz__: mov ah, 0x0E __print_stringz__.__print_loop__: lodsb test al, al jz __print_stringz__.__print_ending__ int 10h jmp __print_stringz__.__print_loop__ __print_stringz__.__print_ending__: ret macro printsz charptr {     push ax si     mov si, charptr     call __print_stringz__     pop si ax } macro cls {     push ax     mov ax, 0003h     int 10h     pop ax }  macro movs reg, src {     push ax     mov ax, src     mov es, ax     pop ax }  newline equ 0Dh, 0Ah  EOF equ 128<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>kernel.asm<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"assembly\">format binary as \"hex\"  org 8100h  mov ah, 0x0E mov al, \"X\" int 0x10  cli hlt  times 0E0h*200h+$$-$ db 0x00<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>image.asm<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"assembly\">;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;                                                              ;; ;; Copyright (C) HexOS author 2019-2022. All rights reserved.   ;; ;; Distributed under terms of the GNU General Public License    ;; ;;                                                              ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;  file \"boot\\boot.sec\" file \"boot\\second.sec\" file \"kernel\\kernel.hex\"<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u043f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u0432 qemu, \u043c\u044b \u0432\u0438\u0434\u0438\u043c \u0432\u043e-\u0442\u0430\u043a\u0443\u044e \u0431\u0443\u043a\u0432\u0443 &#171;\u0425&#187;:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/ca9\/ca7\/fc4\/ca9ca7fc4a385c1fad06e8fc49f88dbf.png\" alt=\"X\" title=\"X\" width=\"1175\" height=\"735\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/ca9\/ca7\/fc4\/ca9ca7fc4a385c1fad06e8fc49f88dbf.png\"\/><figcaption>X<\/figcaption><\/figure>\n<p>\u0414\u0443\u043c\u0430\u044e, \u043d\u0430 \u044d\u0442\u043e\u043c \u043f\u043e\u043a\u0430 \u0432\u0441\u0435. \u0421\u043f\u0430\u0441\u0438\u0431\u043e \u0437\u0430 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435!<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"v-portal\" style=\"display:none;\"><\/div>\n<\/div>\n<p> <!----> <!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/post\/670030\/\"> https:\/\/habr.com\/ru\/post\/670030\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<h2>\u0414\u0438\u0441\u043a\u043b\u0435\u0439\u043c\u0435\u0440?<\/h2>\n<p>\u0425\u0430\u0439 \u0425\u0430\u0431\u0440! \u042d\u0442\u043e \u0441\u0435\u0440\u0438\u044f \u0441\u0442\u0430\u0442\u0435\u0439 \u043f\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044e \u043c\u043e\u0435\u0439 \u041e\u0421 \u0441 \u043d\u0443\u043b\u044f. \u042f \u043b\u044e\u0442\u044b\u0439 \u0444\u0430\u043d\u0430\u0442 \u0440\u0435\u0442\u0440\u043e\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u043c\u0433\u043d\u043e\u0432\u0435\u043d\u043d\u043e \u0437\u0430\u0431\u0443\u0434\u0443 \u043f\u0440\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u0438\u0435  ED\u041a. \u041f\u0440\u043e\u0441\u044c\u0431\u0430 \u043d\u0435 \u043f\u0438\u0441\u0430\u0442\u044c \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u044b \u043f\u043e \u0442\u0438\u043f\u0443 &#171;BIOS \u0434\u0430\u0432\u043d\u043e \u0443\u0441\u0442\u0430\u0440\u0435\u043b\u0430 \u0433\u0434\u0435 UEFI?&#187;. \u041f\u0438\u0448\u0443 \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0447\u0442\u043e\u0431\u044b \u0431\u044b\u043b\u043e, \u0447\u0442\u043e \u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0432\u0435\u0447\u0435\u0440\u043e\u043c \u0438 \u043f\u043e\u0440\u0435\u043b\u0430\u043a\u0441\u0438\u0442\u044c. \u0421\u043f\u0430\u0441\u0438\u0431\u043e.<\/p>\n<h2>\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0434\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c\u0441\u044f<\/h2>\n<p>\u0415\u0441\u043b\u0438  \u0432\u044b \u043d\u0435 \u0432\u043b\u0430\u0434\u0435\u0435\u0442\u0435 \u044f\u0437\u044b\u043a\u043e\u043c \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u0430, \u0442\u043e \u043c\u043e\u0436\u0435\u0442\u0435 \u0438\u0441\u043f\u044b\u0442\u0430\u0442\u044c \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0432 \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u0438 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u044f\u0449\u0435\u0433\u043e. \u041f\u043e\u043b\u044c\u0437\u0443\u044e\u0441\u044c \u044f \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u043e\u043c &lt;a href=&#187;https:\/\/flatassembler.net&#187;>FASM&lt;\/a><\/p>\n<h2>\u0412\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u041f\u041a<\/h2>\n<p>\u041f\u0440\u0438 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438 \u041f\u041a, \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442 \u0432 \u041e\u0417\u0423 \u0411\u0418\u041e\u0421, \u043e\u043d\u0430 (\u0411\u0418\u041e\u0421) \u0432 \u0441\u0432\u043e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442 \u043d\u043e\u0441\u0438\u0442\u0435\u043b\u0438 \u043d\u0430 \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u0437\u0430\u0433\u0440\u0443\u0437\u043e\u0447\u043d\u043e\u0439 \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u044b &#8212; \u0441\u043b\u043e\u0432\u0430 0\u044555\u0410\u0410 \u043f\u043e \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044e 0x1FE. \u0415\u0441\u043b\u0438 \u043e\u043d\u0430 (\u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u0430) \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442, \u0442\u043e \u043f\u0435\u0440\u0432\u044b\u0435 512 \u0431\u0430\u0439\u0442 \u0441 \u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044f \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442\u0441\u044f \u0432 \u041e\u0417\u0423 \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443 0\u04457\u042100 \u0438 \u0411\u0418\u041e\u0421 \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u044d\u0442\u043e\u043c\u0443 \u043a\u043e\u0434\u0443.<\/p>\n<h2>\u041a \u0434\u0435\u043b\u0443<\/h2>\n<p>\u041d\u0430\u043f\u0438\u0448\u0435\u043c \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0447\u0438\u0441\u0442\u0438\u0442 \u044d\u043a\u0440\u0430\u043d \u0438 \u043d\u0430\u043f\u0435\u0447\u0430\u0442\u0430\u0435\u0442 &#171;\u041f\u0440\u0438\u0432\u0435\u0442, \u043c\u0438\u0440!&#187;:<\/p>\n<pre><code class=\"assembly\">format binary as \"sec\" use16 org 0x7C00  jmp boot nop  db      'HEXOS   '      ; db 8 dw      512             ; bytes per sector db      1               ; sectors per cluster dw      1               ; number of reserver sectors db      2               ; count of FAT data structures dw      224             ; count of 32-byte dir. entries (224*32 = 14 sectors) dw      2880            ; count of sectors on the volume (2880 for 1.44 mbytes disk) db      0f0h            ; f0 - used for removable media dw      9               ; count of sectors by one copy of FAT dw      18              ; sectors per track dw      2               ; number of heads dd      0               ; count of hidden sectors dd      0               ; count of sectors on the volume (if > 65535) db      0               ; int 13h drive number db      0               ; reserved db      29h             ; Extended boot signature db      0               ; Volume serial number db      'HEXOS      '   ; Volume label (db 11) db      'HAT16   '      ; file system type (db 8)  msg db \"Hello, World!!\", 0x0D, 0x0A, 0x00  printsz: mov ah, 0x0E   .cycle:   lodsb     test al, al     jz .end     int 0x10     jmp .cycle   .end:   ret   ; ;  boot: mov ax, 0x0003   int 0x10   mov si, msg   call printsz   ;   cli   hlt ;  times 512-$+$$-2 db 0x00  db 0x55, 0xAA<\/code><\/pre>\n<p>\u0418\u0442\u0430\u043a, \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u044d\u0442\u043e \u0447\u0443\u0434\u043e \u0432 qemu \u0438 \u0432\u0438\u0434\u0438\u043c:<\/p>\n<figure class=\"full-width\"><figcaption>\u0420\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u0439 &#171;\u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a&#187;<\/figcaption><\/figure>\n<p>\u0423\u0440\u0430! \u0412\u0441\u0451 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442. \u041d\u043e \u044f \u043d\u0430\u0437\u044b\u0432\u0430\u044e \u044d\u0442\u043e &#171;\u0417\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a&#187;, \u043d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u043e\u043d \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442. \u041d\u0435\u0445\u043e\u0440\u043e\u0448\u043e. \u041d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0442\u0430\u043a\u0436\u0435 \u0438\u0437\u0431\u0430\u0432\u0438\u0442\u0441\u044f \u043e\u0442 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u0432 512 \u0431\u0430\u0439\u0442. \u0432 \u0442\u0430\u043a\u043e\u0439 \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0439 \u043e\u0431\u044c\u0435\u043c \u043c\u0430\u043b\u043e-\u043b\u0438 \u0447\u0442\u043e \u0443\u043c\u0435\u0441\u0442\u0438\u0442\u0441\u044f.<\/p>\n<h2>\u041f\u043e\u0434\u0445\u043e\u0434\u0438\u043c \u043a \u0434\u0435\u043b\u0443 \u0441\u0435\u0440\u044c\u0435\u0437\u043d\u043e<\/h2>\n<p>\u0418\u0442\u0430\u043a, \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0438\u0437\u0431\u0430\u0432\u0438\u0442\u044c\u0441\u044f \u043e\u0442 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u0432 512 \u0431\u0430\u0439\u0442. \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u0432\u0430\u0440\u0438\u0430\u043d\u0442, \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0432\u0435\u0441\u044c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u044e\u0449\u0438\u0439 \u043d\u0430\u0441 \u043a\u043e\u0434 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e, \u0430 \u043f\u043e\u0442\u043e\u043c \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u043e\u0434\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0435\u0433\u043e. \u0414\u0430, \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0438 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442 \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a\u0438.<\/p>\n<h2>\u041a \u0434\u0435\u043b\u0443 2<\/h2>\n<p>\u041d\u0430\u043f\u0438\u0448\u0435\u043c \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0442\u044c \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0439 \u043a\u043e\u0434 \u0441 \u0434\u0438\u0441\u043a\u0430 \u0432 \u041e\u0417\u0423 \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443 0\u04457\u041500(\u0438\u043b\u0438 \u0436\u0435 0\u04457\u042100+512):<\/p>\n<details class=\"spoiler\">\n<summary>boot.asm<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"assembly\">;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;                                                              ;; ;; Copyright (C) HexOS author 2019-2022. All rights reserved.   ;; ;; Distributed under terms of the GNU General Public License    ;; ;;                                                              ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;  format binary as \"sec\"  use16  org 7C00h  jmp boot_entry  nop  include \"bpb.inc\"  msg db \"HexOS bootloader v2.1.3 by Ivan Chetchasov\", 0Dh, 0Ah, 0x00  log db \"Loading second stage...\", 0Dh, 0Ah, 0x00  include \"boot.inc\"  boot_entry:  cls  printsz msg  printsz log  mov  ah, 02h mov  al, 10h mov  cx, 0002h mov  bx, 7E00h movs es, 0000h int 13h  mov sp, 7E0h movs ds, 7E00h jmp 0000:7E00h  cli hlt jmp $-2  times 200h-2h-$+$$ db 00h  dw 0AA55h<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>boot.inc<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"assembly\">;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;                                                              ;; ;; Copyright (C) HexOS author 2019-2022. All rights reserved.   ;; ;; Distributed under terms of the GNU General Public License    ;; ;;                                                              ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;  __print_stringz__: mov ah, 0x0E __print_stringz__.__print_loop__: lodsb test al, al jz __print_stringz__.__print_ending__ int 10h jmp __print_stringz__.__print_loop__ __print_stringz__.__print_ending__: ret macro printsz charptr {     push ax si     mov si, charptr     call __print_stringz__     pop si ax } macro cls {     push ax     mov ax, 0003h     int 10h     pop ax }  macro movs reg, src {     push ax     mov ax, src     mov es, ax     pop ax }<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>second.asm<\/summary>\n<div class=\"spoiler__content\">\n<p>;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br \/> ;;                                                              ;;<br \/> ;; Copyright (C) HexOS author 2019-2022. All rights reserved.   ;;<br \/> ;; Distributed under terms of the GNU General Public License    ;;<br \/> ;;                                                              ;;<br \/> ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<\/p>\n<p>format binary as &#171;sec&#187;<\/p>\n<p>org 7E00h<br \/> start:<br \/> use16<\/p>\n<p>; header zone<\/p>\n<p>jmp second_entry<\/p>\n<p>nop<\/p>\n<p>; import zone<\/p>\n<p>include &#171;second.inc&#187;<\/p>\n<p>; executable zone<\/p>\n<p>second_entry:<\/p>\n<p>cls<\/p>\n<p>;printsz msg0<\/p>\n<p>mov ah, 02h<br \/> mov al, 08h<br \/> mov cx, 0012h; 0012h is correct<br \/> ; dl was not modified<br \/> mov bx, 8100h<br \/> movs es, 0000h<br \/> int 13h<\/p>\n<p>jc err0<\/p>\n<p>mov sp, 810h<br \/> movs ds, 8100h<br \/> jmp 0000:8100h<\/p>\n<p>err0:<\/p>\n<p>; construct BSOD stylish<br \/> cls<br \/> MOV AH, 06h<br \/> XOR AL, AL<br \/> XOR CX, CX<br \/> MOV DX, 184Fh<br \/> MOV BH, 17h<br \/> INT 10h<\/p>\n<p>; print data<br \/> printsz bsod0<\/p>\n<p>jmp endall<\/p>\n<p>endall:<\/p>\n<p>cli<br \/> hlt<br \/> jmp $-2<\/p>\n<p>; data zone<\/p>\n<p>msg0 db &#171;HexOS Second-stage Bootloader v2.2.1 by Ivan Chetchasov&#187;, newline<br \/> db &#171;LOG: Loading HAT16 filetable&#187;, newline, 00h<\/p>\n<p>bsod0:<br \/> db newline<br \/> db newline<br \/> db &#187;             ((((((&#171;, newline<br \/> db &#187;           ((::::::(   ERROR OCCURRED&#187;, newline<br \/> db &#187;         ((:::::::(    At position:  00007E32h&#187;, newline<br \/> db &#187;        (:::::::((&#171;, newline<br \/> db &#187;        (::::::(       Reason: cannot load kernel&#187;, newline<br \/> db &#187; :::::: (:::::(        Maybe your disk is corrupted&#187;, newline<br \/> db &#187; :::::: (:::::(        So try to re-install system&#187;, newline<br \/> db &#187; :::::: (:::::(        Or append file &#8216;System\/kernel.hex'&#187;, newline<br \/> db &#187;        (:::::(        To your disk with other PC&#187;, newline<br \/> db &#187;        (:::::(        (be careful, maybe virus killed&#187;, newline<br \/> db &#187;        (:::::(        your PC, don`t infect other one!)&#187;, newline<br \/> db &#187; :::::: (::::::(    &#171;, newline<br \/> db &#187; :::::: (:::::::((  &#171;, newline<br \/> db &#187; ::::::  ((:::::::( &#171;, newline<br \/> db &#187;           ((::::::(&#171;, newline<br \/> db &#187;             ((((((&#171;, newline<br \/> db newline<br \/> db &#171;Errcode: 0000000Dh Errname: ERROR_CANNOT_LOAD_KERNEL&#187;, newline, 00h<\/p>\n<p>; filler<\/p>\n<p>times 200h*16-1+start-$ db 00h<\/p>\n<p>; magic<\/p>\n<p>db EOF<\/p>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>second.inc<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"assembly\"> ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;                                                              ;; ;; Copyright (C) HexOS author 2019-2022. All rights reserved.   ;; ;; Distributed under terms of the GNU General Public License    ;; ;;                                                              ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;  __print_stringz__: mov ah, 0x0E __print_stringz__.__print_loop__: lodsb test al, al jz __print_stringz__.__print_ending__ int 10h jmp __print_stringz__.__print_loop__ __print_stringz__.__print_ending__: ret macro printsz charptr {     push ax si     mov si, charptr     call __print_stringz__     pop si ax } macro cls {     push ax     mov ax, 0003h     int 10h     pop ax }  macro movs reg, src {     push ax     mov ax, src     mov es, ax     pop ax }  newline equ 0Dh, 0Ah  EOF equ 128<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>kernel.asm<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"assembly\">format binary as \"hex\"  org 8100h  mov ah, 0x0E mov al, \"X\" int 0x10  cli hlt  times 0E0h*200h+$$-$ db 0x00<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>image.asm<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"assembly\">;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;                                                              ;; ;; Copyright (C) HexOS author 2019-2022. All rights reserved.   ;; ;; Distributed under terms of the GNU General Public License    ;; ;;                                                              ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;  file \"boot\\boot.sec\" file \"boot\\second.sec\" file \"kernel\\kernel.hex\"<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u043f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u0432 qemu, \u043c\u044b \u0432\u0438\u0434\u0438\u043c \u0432\u043e-\u0442\u0430\u043a\u0443\u044e \u0431\u0443\u043a\u0432\u0443 &#171;\u0425&#187;:<\/p>\n<figure class=\"full-width\"><figcaption>X<\/figcaption><\/figure>\n<p>\u0414\u0443\u043c\u0430\u044e, \u043d\u0430 \u044d\u0442\u043e\u043c \u043f\u043e\u043a\u0430 \u0432\u0441\u0435. \u0421\u043f\u0430\u0441\u0438\u0431\u043e \u0437\u0430 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435!<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"v-portal\" style=\"display:none;\"><\/div>\n<\/div>\n<p> <!----> <!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/post\/670030\/\"> https:\/\/habr.com\/ru\/post\/670030\/<\/a><br \/><\/br><\/br><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-334143","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/334143","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=334143"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/334143\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=334143"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=334143"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=334143"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}