Advertisement
Guest User

Untitled

a guest
Jan 31st, 2016
114
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 72.01 KB | None | 0 0
  1. ;---{ ЗАГРУЗЧИК
  2.  
  3. ;---{ Описание
  4. ; В блоке ЗАГРУЗОЧНЫЙ_СЕКТОР устанавлвиаеться видеорежим в котром будет запущена программа
  5. ; Через ES достапна вся память [ES:0B8000h] Адрес видеопамяти
  6. ; DS и программа сама начинаеться с адреса 0 в блоке ЗАЩИЩЕННЫЙ_РЕЖИМ
  7. ; Все что ниже уже пишеться в 32 битном режиме сама программа
  8. ; Сама програмам распологаеться кажися по адресу 0x8000
  9. ; Количество загружаемых секторов не забывем указывать в разделе ЗАГРУЗОЧНЫЙ_СЕКТОР
  10. ; НЕ азбываем конце программы ставить секцию ЗАВЕРШАЮЩАЯ ЧАСТЬ ПРОГРАММЫ
  11. ; Между секцией ЗАГРУЗЧИК и ЗАВЕРШАЮЩАЯ ЧАСТЬ ПРОГРАММЫ размещаем свой код
  12. ;---}
  13. ;---{ Загрузчик
  14. ORG 0;{Абдулов Тимур Рифович 2015 год Email hostingurifa@gmail.com .
  15. ;INFO Кодировка файла должна быть CP 866
  16. ;Site https://sites.google.com/site/timpascallib/
  17. ;Youtube https://www.youtube.com/channel/UCUhQNuTAQ933YBTy6awC0Pw
  18. ;Google+ https://plus.google.com/u/0/+%D0%A2%D0%B8%D0%BC%D1%83%D1%80%D0%90%D0%B1%D0%B4%D1%83%D0%BB%D0%BE%D0%B2/posts
  19. ;GIST https://gist.github.com/MisterTimur/4910f31a1a60459461b8
  20. ;------------------------------------------------------------------------------}
  21. ЗАГРУЗОЧНЫЙ_СЕКТОР:;{
  22. ;----------------------;
  23. mov ah,00h ; // Функция установки видео режима 80 на 25
  24. mov al,03h ; // Устаналиваем Видео режим
  25. int 10h ; // Вызываем функцию биос
  26. ;----------------------;
  27.  
  28. ;----------------------;
  29. mov ah,05h ; // Выбираем видео страницу
  30. mov al,0 ;
  31. int 10h ;
  32. ;----------------------;
  33.  
  34. ;----------------------;
  35. mov bx,0 ; // Номер видеостраницы
  36. mov dl,0 ; // Координата по X
  37. mov dh,25 ; // уст. позицию курсора. установка на строку 25 делает курсор невидимым.
  38. mov ah,02h ; // ПОдпрограмма установки курсора
  39. int 10h ;
  40. ;----------------------;
  41.  
  42. cli
  43. cld
  44.  
  45. xor ax, ax
  46. mov ds, ax
  47. mov es, ax
  48. mov ss, ax
  49. mov sp, 0x8000
  50. sti
  51.  
  52. mov dh,0 ; головка
  53. mov ch,0 ; дорожка
  54. mov cl,2 ; 2-й сектор
  55. ;-----------------;
  56. mov ax, 0000h ;
  57. mov es, ax ; Адрес куда загружаем
  58. mov bx, 0x8000 ; Адрес куда загружаем
  59. ;-----------------;
  60. mov al, 30 ; кол-во читаемых секторов Не забываем указывать
  61. mov ah, 2h
  62. int 13h
  63. jmp far 0:8000h
  64.  
  65. times 0x200 - 2 - ($ - ЗАГРУЗОЧНЫЙ_СЕКТОР) db 0x90
  66. db 055h, 0AAh
  67.  
  68.  
  69.  
  70. ;==============================================================================}
  71. org 0x8000
  72. РЕАЛЬНЫЙ_РЕЖИМ :; { Реальный режим
  73.  
  74. Start:
  75. mov bp,Font
  76. mov dx, 128
  77. mov cx, 48
  78. mov bx, 1000h
  79. mov ax, 1100h
  80. int 10h;
  81.  
  82.  
  83. mov bp,Font2
  84. mov dx, 224
  85. mov cx, 18
  86. mov bx, 1000h
  87. mov ax, 1100h
  88. int 10h;
  89.  
  90.  
  91. call СОЗДАТЬ_GDT
  92. cli
  93. mov eax, cr0
  94. or al, 1
  95. mov cr0, eax
  96. jmp 0x0008:0x0000
  97.  
  98. Font:
  99. ;-----------;А
  100. DB 00000000b ;0
  101. DB 00000000b ;1
  102. DB 00011100b ;2
  103. DB 00010100b ;3
  104. DB 00010100b ;4
  105. DB 00010110b ;5
  106. DB 00100010b ;6
  107. DB 00100010b ;7
  108. DB 00100010b ;8
  109. DB 01111111b ;9
  110. DB 01000001b ;10
  111. DB 01000001b ;11
  112. DB 00000000b ;12
  113. DB 00000000b ;13
  114. DB 00000000b ;14
  115. DB 00000000b ;15
  116. ;-----------;Б
  117. DB 00000000b ;0
  118. DB 00000000b ;1
  119. DB 01111100b ;2
  120. DB 01000000b ;3
  121. DB 01000000b ;4
  122. DB 01000000b ;5
  123. DB 01111100b ;6
  124. DB 01000110b ;7
  125. DB 01000010b ;8
  126. DB 01000010b ;9
  127. DB 01000110b ;10
  128. DB 01111100b ;11
  129. DB 00000000b ;12
  130. DB 00000000b ;13
  131. DB 00000000b ;14
  132. DB 00000000b ;15
  133. ;-----------;В
  134. DB 00000000b ;0
  135. DB 00000000b ;1
  136. DB 01111100b ;2
  137. DB 01000010b ;3
  138. DB 01000010b ;4
  139. DB 01000110b ;5
  140. DB 01111100b ;6
  141. DB 01000110b ;7
  142. DB 01000010b ;8
  143. DB 01000010b ;9
  144. DB 01000110b ;10
  145. DB 01111100b ;11
  146. DB 00000000b ;12
  147. DB 00000000b ;13
  148. DB 00000000b ;14
  149. DB 00000000b ;15
  150. ;-----------;Г
  151. DB 00000000b ;0
  152. DB 00000000b ;1
  153. DB 00111111b ;2
  154. DB 00100000b ;3
  155. DB 00100000b ;4
  156. DB 00100000b ;5
  157. DB 00100000b ;6
  158. DB 00100000b ;7
  159. DB 00100000b ;8
  160. DB 00100000b ;9
  161. DB 00100000b ;10
  162. DB 00100000b ;11
  163. DB 00000000b ;12
  164. DB 00000000b ;13
  165. DB 00000000b ;14
  166. DB 00000000b ;15
  167. ;-----------;Д
  168. DB 00000000b ;0
  169. DB 00000000b ;1
  170. DB 00111111b ;2
  171. DB 00100001b ;3
  172. DB 00100001b ;4
  173. DB 00100001b ;5
  174. DB 00100001b ;6
  175. DB 00100001b ;7
  176. DB 00100001b ;8
  177. DB 00100001b ;9
  178. DB 01000001b ;10
  179. DB 11111111b ;11
  180. DB 10000000b ;12
  181. DB 10000000b ;13
  182. DB 00000000b ;14
  183. DB 00000000b ;15
  184. ;-----------;Е
  185. DB 00000000b ;0
  186. DB 00000000b ;1
  187. DB 00111111b ;2
  188. DB 00100000b ;3
  189. DB 00100000b ;4
  190. DB 00100000b ;5
  191. DB 00111111b ;6
  192. DB 00100000b ;7
  193. DB 00100000b ;8
  194. DB 00100000b ;9
  195. DB 00100000b ;10
  196. DB 00111111b ;11
  197. DB 00000000b ;12
  198. DB 00000000b ;13
  199. DB 00000000b ;14
  200. DB 00000000b ;15
  201. ;-----------;Ж
  202. DB 00000000b ;0
  203. DB 00000000b ;1
  204. DB 10001000b ;2
  205. DB 01001001b ;3
  206. DB 00101010b ;4
  207. DB 00101010b ;5
  208. DB 00011100b ;6
  209. DB 00011100b ;7
  210. DB 00101010b ;8
  211. DB 01001001b ;9
  212. DB 01001001b ;10
  213. DB 10001000b ;11
  214. DB 00000000b ;12
  215. DB 00000000b ;13
  216. DB 00000000b ;14
  217. DB 00000000b ;15
  218. ;-----------;З
  219. DB 00000000b ;0
  220. DB 00000000b ;1
  221. DB 00111100b ;2
  222. DB 01000010b ;3
  223. DB 00000010b ;4
  224. DB 00000010b ;5
  225. DB 00111100b ;6
  226. DB 00000110b ;7
  227. DB 00000010b ;8
  228. DB 00000010b ;9
  229. DB 01000110b ;10
  230. DB 00111100b ;11
  231. DB 00000000b ;12
  232. DB 00000000b ;13
  233. DB 00000000b ;14
  234. DB 00000000b ;15
  235. ;-----------;И
  236. DB 00000000b ;0
  237. DB 00000000b ;1
  238. DB 01000001b ;2
  239. DB 01000011b ;3
  240. DB 01000111b ;4
  241. DB 01000101b ;5
  242. DB 01001101b ;6
  243. DB 01011001b ;7
  244. DB 01010001b ;8
  245. DB 01110001b ;9
  246. DB 01100001b ;10
  247. DB 01000001b ;11
  248. DB 00000000b ;12
  249. DB 00000000b ;13
  250. DB 00000000b ;14
  251. DB 00000000b ;15
  252. ;-----------;Й
  253. DB 00111000b ;0
  254. DB 00000000b ;1
  255. DB 01000001b ;2
  256. DB 01000011b ;3
  257. DB 01000111b ;4
  258. DB 01000101b ;5
  259. DB 01001101b ;6
  260. DB 01011001b ;7
  261. DB 01010001b ;8
  262. DB 01110001b ;9
  263. DB 01100001b ;10
  264. DB 01000001b ;11
  265. DB 00000000b ;12
  266. DB 00000000b ;13
  267. DB 00000000b ;14
  268. DB 00000000b ;15
  269. ;-----------;К
  270. DB 00000000b ;0
  271. DB 00000000b ;1
  272. DB 01000010b ;2
  273. DB 01000100b ;3
  274. DB 01001100b ;4
  275. DB 01011000b ;5
  276. DB 01110000b ;6
  277. DB 01110000b ;7
  278. DB 01011000b ;8
  279. DB 01001100b ;9
  280. DB 01000100b ;10
  281. DB 01000010b ;11
  282. DB 00000000b ;12
  283. DB 00000000b ;13
  284. DB 00000000b ;14
  285. DB 00000000b ;15
  286. ;-----------;Л
  287. DB 00000000b ;0
  288. DB 00000000b ;1
  289. DB 00111110b ;2
  290. DB 00100010b ;3
  291. DB 00100010b ;4
  292. DB 00100010b ;5
  293. DB 00100010b ;6
  294. DB 00100010b ;7
  295. DB 01100010b ;8
  296. DB 01000010b ;9
  297. DB 01000010b ;10
  298. DB 11000010b ;11
  299. DB 00000000b ;12
  300. DB 00000000b ;13
  301. DB 00000000b ;14
  302. DB 00000000b ;15
  303. ;-----------;М
  304. DB 00000000b ;0
  305. DB 00000000b ;1
  306. DB 11000001b ;2
  307. DB 11100011b ;3
  308. DB 11100011b ;4
  309. DB 11110101b ;5
  310. DB 11010101b ;6
  311. DB 11010101b ;7
  312. DB 11001001b ;8
  313. DB 11000001b ;9
  314. DB 11000001b ;10
  315. DB 11000001b ;11
  316. DB 00000000b ;12
  317. DB 00000000b ;13
  318. DB 00000000b ;14
  319. DB 00000000b ;15
  320. ;-----------;Н
  321. DB 00000000b ;0
  322. DB 00000000b ;1
  323. DB 01000001b ;2
  324. DB 01000001b ;3
  325. DB 01000001b ;4
  326. DB 01000001b ;5
  327. DB 01111111b ;6
  328. DB 01000001b ;7
  329. DB 01000001b ;8
  330. DB 01000001b ;9
  331. DB 01000001b ;10
  332. DB 01000001b ;11
  333. DB 00000000b ;12
  334. DB 00000000b ;13
  335. DB 00000000b ;14
  336. DB 00000000b ;15
  337. ;-----------;О
  338. DB 00000000b ;0
  339. DB 00000000b ;1
  340. DB 00111100b ;2
  341. DB 01000010b ;3
  342. DB 11000001b ;4
  343. DB 10000001b ;5
  344. DB 10000001b ;6
  345. DB 10000001b ;7
  346. DB 10000001b ;8
  347. DB 10000011b ;9
  348. DB 01000010b ;10
  349. DB 00111100b ;11
  350. DB 00000000b ;12
  351. DB 00000000b ;13
  352. DB 00000000b ;14
  353. DB 00000000b ;15
  354. ;-----------;П
  355. DB 00000000b ;0
  356. DB 00000000b ;1
  357. DB 01111111b ;2
  358. DB 01000001b ;3
  359. DB 01000001b ;4
  360. DB 01000001b ;5
  361. DB 01000001b ;6
  362. DB 01000001b ;7
  363. DB 01000001b ;8
  364. DB 01000001b ;9
  365. DB 01000001b ;10
  366. DB 01000001b ;11
  367. DB 00000000b ;12
  368. DB 00000000b ;13
  369. DB 00000000b ;14
  370. DB 00000000b ;15
  371. ;-----------;Р
  372. DB 00000000b ;0
  373. DB 00000000b ;1
  374. DB 01111100b ;2
  375. DB 01000110b ;3
  376. DB 01000010b ;4
  377. DB 01000010b ;5
  378. DB 01000110b ;6
  379. DB 01111000b ;7
  380. DB 01000000b ;8
  381. DB 01000000b ;9
  382. DB 01000000b ;10
  383. DB 01000000b ;11
  384. DB 00000000b ;12
  385. DB 00000000b ;13
  386. DB 00000000b ;14
  387. DB 00000000b ;15
  388. ;-----------;С
  389. DB 00000000b ;0
  390. DB 00000000b ;1
  391. DB 00011110b ;2
  392. DB 00110001b ;3
  393. DB 00100000b ;4
  394. DB 01000000b ;5
  395. DB 01000000b ;6
  396. DB 01000000b ;7
  397. DB 01000000b ;8
  398. DB 01100000b ;9
  399. DB 00100001b ;10
  400. DB 00011110b ;11
  401. DB 00000000b ;12
  402. DB 00000000b ;13
  403. DB 00000000b ;14
  404. DB 00000000b ;15
  405. ;-----------;Т
  406. DB 00000000b ;0
  407. DB 00000000b ;1
  408. DB 01111111b ;2
  409. DB 00001000b ;3
  410. DB 00001000b ;4
  411. DB 00001000b ;5
  412. DB 00001000b ;6
  413. DB 00001000b ;7
  414. DB 00001000b ;8
  415. DB 00001000b ;9
  416. DB 00001000b ;10
  417. DB 00001000b ;11
  418. DB 00000000b ;12
  419. DB 00000000b ;13
  420. DB 00000000b ;14
  421. DB 00000000b ;15
  422. ;-----------;У
  423. DB 00000000b ;0
  424. DB 00000000b ;1
  425. DB 01000001b ;2
  426. DB 01100011b ;3
  427. DB 00100010b ;4
  428. DB 00110110b ;5
  429. DB 00010100b ;6
  430. DB 00011100b ;7
  431. DB 00001000b ;8
  432. DB 00001000b ;9
  433. DB 00011000b ;10
  434. DB 01110000b ;11
  435. DB 00000000b ;12
  436. DB 00000000b ;13
  437. DB 00000000b ;14
  438. DB 00000000b ;15
  439. ;-----------;Ф
  440. DB 00000000b ;0
  441. DB 00000000b ;1
  442. DB 00001000b ;2
  443. DB 00011110b ;3
  444. DB 00101010b ;4
  445. DB 01001001b ;5
  446. DB 01001001b ;6
  447. DB 01001001b ;7
  448. DB 01001001b ;8
  449. DB 01101010b ;9
  450. DB 00111100b ;10
  451. DB 00001000b ;11
  452. DB 00000000b ;12
  453. DB 00000000b ;13
  454. DB 00000000b ;14
  455. DB 00000000b ;15
  456. ;-----------;Х
  457. DB 00000000b ;0
  458. DB 00000000b ;1
  459. DB 11000011b ;2
  460. DB 01100110b ;3
  461. DB 00110100b ;4
  462. DB 00011100b ;5
  463. DB 00011000b ;6
  464. DB 00011100b ;7
  465. DB 00110100b ;8
  466. DB 00100110b ;9
  467. DB 01100011b ;10
  468. DB 11000001b ;11
  469. DB 00000000b ;12
  470. DB 00000000b ;13
  471. DB 00000000b ;14
  472. DB 00000000b ;15
  473. ;-----------;Ц
  474. DB 00000000b ;0
  475. DB 00000000b ;1
  476. DB 01000001b ;2
  477. DB 01000001b ;3
  478. DB 01000001b ;4
  479. DB 01000001b ;5
  480. DB 01000001b ;6
  481. DB 01000001b ;7
  482. DB 01000001b ;8
  483. DB 01000001b ;9
  484. DB 01000001b ;10
  485. DB 01111111b ;11
  486. DB 00000000b ;12
  487. DB 00000000b ;13
  488. DB 00000000b ;14
  489. DB 00000000b ;15
  490. ;-----------;Ч
  491. DB 00000000b ;0
  492. DB 00000000b ;1
  493. DB 01000001b ;2
  494. DB 01000001b ;3
  495. DB 01000001b ;4
  496. DB 01000001b ;5
  497. DB 01100001b ;6
  498. DB 00111111b ;7
  499. DB 00000001b ;8
  500. DB 00000001b ;9
  501. DB 00000001b ;10
  502. DB 00000001b ;11
  503. DB 00000000b ;12
  504. DB 00000000b ;13
  505. DB 00000000b ;14
  506. DB 00000000b ;15
  507. ;-----------;Ш
  508. DB 00000000b ;0
  509. DB 00000000b ;1
  510. DB 01001001b ;2
  511. DB 01001001b ;3
  512. DB 01001001b ;4
  513. DB 01001001b ;5
  514. DB 01001001b ;6
  515. DB 01001001b ;7
  516. DB 01001001b ;8
  517. DB 01001001b ;9
  518. DB 01001001b ;10
  519. DB 01111111b ;11
  520. DB 00000000b ;12
  521. DB 00000000b ;13
  522. DB 00000000b ;14
  523. DB 00000000b ;15
  524. ;-----------;Щ
  525. DB 00000000b ;0
  526. DB 00000000b ;1
  527. DB 01001001b ;2
  528. DB 01001001b ;3
  529. DB 01001001b ;4
  530. DB 01001001b ;5
  531. DB 01001001b ;6
  532. DB 01001001b ;7
  533. DB 01001001b ;8
  534. DB 01001001b ;9
  535. DB 01001001b ;10
  536. DB 01111111b ;11
  537. DB 00000000b ;12
  538. DB 00000000b ;13
  539. DB 00000000b ;14
  540. DB 00000000b ;15
  541. ;-----------;Ъ
  542. DB 00000000b ;0
  543. DB 00000000b ;1
  544. DB 11100000b ;2
  545. DB 00100000b ;3
  546. DB 00100000b ;4
  547. DB 00100000b ;5
  548. DB 00111110b ;6
  549. DB 00100011b ;7
  550. DB 00100001b ;8
  551. DB 00100001b ;9
  552. DB 00100011b ;10
  553. DB 00111110b ;11
  554. DB 00000000b ;12
  555. DB 00000000b ;13
  556. DB 00000000b ;14
  557. DB 00000000b ;15
  558. ;-----------;Ы
  559. DB 00000000b ;0
  560. DB 00000000b ;1
  561. DB 01000001b ;2
  562. DB 01000001b ;3
  563. DB 01000001b ;4
  564. DB 01000001b ;5
  565. DB 01111001b ;6
  566. DB 01000101b ;7
  567. DB 01000101b ;8
  568. DB 01000101b ;9
  569. DB 01001101b ;10
  570. DB 01111001b ;11
  571. DB 00000000b ;12
  572. DB 00000000b ;13
  573. DB 00000000b ;14
  574. DB 00000000b ;15
  575. ;-----------;Ь
  576. DB 00000000b ;0
  577. DB 00000000b ;1
  578. DB 01000000b ;2
  579. DB 01000000b ;3
  580. DB 01000000b ;4
  581. DB 01000000b ;5
  582. DB 01111100b ;6
  583. DB 01000110b ;7
  584. DB 01000010b ;8
  585. DB 01000010b ;9
  586. DB 01000110b ;10
  587. DB 01111100b ;11
  588. DB 00000000b ;12
  589. DB 00000000b ;13
  590. DB 00000000b ;14
  591. DB 00000000b ;15
  592. ;-----------;Э
  593. DB 00000000b ;0
  594. DB 00000000b ;1
  595. DB 00111100b ;2
  596. DB 01000010b ;3
  597. DB 00000001b ;4
  598. DB 00000001b ;5
  599. DB 00111111b ;6
  600. DB 00000001b ;7
  601. DB 00000001b ;8
  602. DB 00000011b ;9
  603. DB 01000010b ;10
  604. DB 00111100b ;11
  605. DB 00000000b ;12
  606. DB 00000000b ;13
  607. DB 00000000b ;14
  608. DB 00000000b ;15
  609. ;-----------;Ю
  610. DB 00000000b ;0
  611. DB 00000000b ;1
  612. DB 01001111b ;2
  613. DB 01011001b ;3
  614. DB 01010000b ;4
  615. DB 01010000b ;5
  616. DB 01110000b ;6
  617. DB 01010000b ;7
  618. DB 01010000b ;8
  619. DB 01010000b ;9
  620. DB 01001001b ;10
  621. DB 01001111b ;11
  622. DB 00000000b ;12
  623. DB 00000000b ;13
  624. DB 00000000b ;14
  625. DB 00000000b ;15
  626. ;-----------;Я
  627. DB 00000000b ;0
  628. DB 00000000b ;1
  629. DB 00011110b ;2
  630. DB 00100010b ;3
  631. DB 00100010b ;4
  632. DB 00100010b ;5
  633. DB 00110010b ;6
  634. DB 00011110b ;7
  635. DB 00110010b ;8
  636. DB 00100010b ;9
  637. DB 01100010b ;10
  638. DB 01100010b ;11
  639. DB 00000000b ;12
  640. DB 00000000b ;13
  641. DB 00000000b ;14
  642. DB 00000000b ;15
  643. ;-----------;а
  644. DB 00000000b ;0
  645. DB 00000000b ;1
  646. DB 00000000b ;2
  647. DB 00000000b ;3
  648. DB 00000000b ;4
  649. DB 00011100b ;5
  650. DB 00100010b ;6
  651. DB 00000010b ;7
  652. DB 00111110b ;8
  653. DB 01000010b ;9
  654. DB 01000110b ;10
  655. DB 00111010b ;11
  656. DB 00000000b ;12
  657. DB 00000000b ;13
  658. DB 00000000b ;14
  659. DB 00000000b ;15
  660. ;-----------;б
  661. DB 00000000b ;0
  662. DB 00011110b ;1
  663. DB 00100000b ;2
  664. DB 00100000b ;3
  665. DB 01011110b ;4
  666. DB 01100010b ;5
  667. DB 01000001b ;6
  668. DB 01000001b ;7
  669. DB 01000001b ;8
  670. DB 01000001b ;9
  671. DB 00100010b ;10
  672. DB 00011100b ;11
  673. DB 00000000b ;12
  674. DB 00000000b ;13
  675. DB 00000000b ;14
  676. DB 00000000b ;15
  677. ;-----------;в
  678. DB 00000000b ;0
  679. DB 00000000b ;1
  680. DB 00000000b ;2
  681. DB 00000000b ;3
  682. DB 00000000b ;4
  683. DB 01111100b ;5
  684. DB 01000010b ;6
  685. DB 01000010b ;7
  686. DB 01111100b ;8
  687. DB 01000010b ;9
  688. DB 01000010b ;10
  689. DB 01111100b ;11
  690. DB 00000000b ;12
  691. DB 00000000b ;13
  692. DB 00000000b ;14
  693. DB 00000000b ;15
  694. ;-----------;г
  695. DB 00000000b ;0
  696. DB 00000000b ;1
  697. DB 00000000b ;2
  698. DB 00000000b ;3
  699. DB 00000000b ;4
  700. DB 00111111b ;5
  701. DB 00100000b ;6
  702. DB 00100000b ;7
  703. DB 00100000b ;8
  704. DB 00100000b ;9
  705. DB 00100000b ;10
  706. DB 00100000b ;11
  707. DB 00000000b ;12
  708. DB 00000000b ;13
  709. DB 00000000b ;14
  710. DB 00000000b ;15
  711. ;-----------;д
  712. DB 00000000b ;0
  713. DB 00000000b ;1
  714. DB 00000000b ;2
  715. DB 00000000b ;3
  716. DB 00000000b ;4
  717. DB 00111110b ;5
  718. DB 00100010b ;6
  719. DB 00100010b ;7
  720. DB 00100010b ;8
  721. DB 01100010b ;9
  722. DB 01000010b ;10
  723. DB 11111111b ;11
  724. DB 10000001b ;12
  725. DB 10000001b ;13
  726. DB 00000000b ;14
  727. DB 00000000b ;15
  728. ;-----------;е
  729. DB 00000000b ;0
  730. DB 00000000b ;1
  731. DB 00000000b ;2
  732. DB 00000000b ;3
  733. DB 00000000b ;4
  734. DB 00011110b ;5
  735. DB 00100011b ;6
  736. DB 01000001b ;7
  737. DB 01111111b ;8
  738. DB 01000000b ;9
  739. DB 01100000b ;10
  740. DB 00011111b ;11
  741. DB 00000000b ;12
  742. DB 00000000b ;13
  743. DB 00000000b ;14
  744. DB 00000000b ;15
  745. ;-----------;ж
  746. DB 00000000b ;0
  747. DB 00000000b ;1
  748. DB 00000000b ;2
  749. DB 00000000b ;3
  750. DB 00000000b ;4
  751. DB 10001000b ;5
  752. DB 01001001b ;6
  753. DB 00101010b ;7
  754. DB 00011100b ;8
  755. DB 00101010b ;9
  756. DB 01101011b ;10
  757. DB 11001001b ;11
  758. DB 00000000b ;12
  759. DB 00000000b ;13
  760. DB 00000000b ;14
  761. DB 00000000b ;15
  762. ;-----------;з
  763. DB 00000000b ;0
  764. DB 00000000b ;1
  765. DB 00000000b ;2
  766. DB 00000000b ;3
  767. DB 00000000b ;4
  768. DB 01111100b ;5
  769. DB 00000010b ;6
  770. DB 00000010b ;7
  771. DB 00111100b ;8
  772. DB 00000010b ;9
  773. DB 00000010b ;10
  774. DB 01111100b ;11
  775. DB 00000000b ;12
  776. DB 00000000b ;13
  777. DB 00000000b ;14
  778. DB 00000000b ;15
  779. ;-----------;и
  780. DB 00000000b ;0
  781. DB 00000000b ;1
  782. DB 00000000b ;2
  783. DB 00000000b ;3
  784. DB 00000000b ;4
  785. DB 01000010b ;5
  786. DB 01000110b ;6
  787. DB 01001110b ;7
  788. DB 01011010b ;8
  789. DB 01110010b ;9
  790. DB 01100010b ;10
  791. DB 01000010b ;11
  792. DB 00000000b ;12
  793. DB 00000000b ;13
  794. DB 00000000b ;14
  795. DB 00000000b ;15
  796. ;-----------;й
  797. DB 00000000b ;0
  798. DB 00000000b ;1
  799. DB 00100100b ;2
  800. DB 00111000b ;3
  801. DB 00000000b ;4
  802. DB 01000010b ;5
  803. DB 01000110b ;6
  804. DB 01001110b ;7
  805. DB 01011010b ;8
  806. DB 01110010b ;9
  807. DB 01100010b ;10
  808. DB 01000010b ;11
  809. DB 00000000b ;12
  810. DB 00000000b ;13
  811. DB 00000000b ;14
  812. DB 00000000b ;15
  813. ;-----------;к
  814. DB 00000000b ;0
  815. DB 00000000b ;1
  816. DB 00000000b ;2
  817. DB 00000000b ;3
  818. DB 00000000b ;4
  819. DB 01000010b ;5
  820. DB 01001100b ;6
  821. DB 01010000b ;7
  822. DB 01100000b ;8
  823. DB 01011000b ;9
  824. DB 01001100b ;10
  825. DB 01000110b ;11
  826. DB 00000000b ;12
  827. DB 00000000b ;13
  828. DB 00000000b ;14
  829. DB 00000000b ;15
  830. ;-----------;л
  831. DB 00000000b ;0
  832. DB 00000000b ;1
  833. DB 00000000b ;2
  834. DB 00000000b ;3
  835. DB 00000000b ;4
  836. DB 00111110b ;5
  837. DB 00100010b ;6
  838. DB 00100010b ;7
  839. DB 00100010b ;8
  840. DB 00100010b ;9
  841. DB 01000010b ;10
  842. DB 11000010b ;11
  843. DB 00000000b ;12
  844. DB 00000000b ;13
  845. DB 00000000b ;14
  846. DB 00000000b ;15
  847. ;-----------;м
  848. DB 00000000b ;0
  849. DB 00000000b ;1
  850. DB 00000000b ;2
  851. DB 00000000b ;3
  852. DB 00000000b ;4
  853. DB 01100011b ;5
  854. DB 01010101b ;6
  855. DB 01010101b ;7
  856. DB 01010101b ;8
  857. DB 01001001b ;9
  858. DB 01000001b ;10
  859. DB 01000001b ;11
  860. DB 00000000b ;12
  861. DB 00000000b ;13
  862. DB 00000000b ;14
  863. DB 00000000b ;15
  864. ;-----------;н
  865. DB 00000000b ;0
  866. DB 00000000b ;1
  867. DB 00000000b ;2
  868. DB 00000000b ;3
  869. DB 00000000b ;4
  870. DB 01000010b ;5
  871. DB 01000010b ;6
  872. DB 01000010b ;7
  873. DB 01111110b ;8
  874. DB 01000010b ;9
  875. DB 01000010b ;10
  876. DB 01000010b ;11
  877. DB 00000000b ;12
  878. DB 00000000b ;13
  879. DB 00000000b ;14
  880. DB 00000000b ;15
  881. ;-----------;о
  882. DB 00000000b ;0
  883. DB 00000000b ;1
  884. DB 00000000b ;2
  885. DB 00000000b ;3
  886. DB 00000000b ;4
  887. DB 00011110b ;5
  888. DB 00100011b ;6
  889. DB 01000001b ;7
  890. DB 01000001b ;8
  891. DB 01000001b ;9
  892. DB 01100010b ;10
  893. DB 00111100b ;11
  894. DB 00000000b ;12
  895. DB 00000000b ;13
  896. DB 00000000b ;14
  897. DB 00000000b ;15
  898. ;-----------;п
  899. DB 00000000b ;0
  900. DB 00000000b ;1
  901. DB 00000000b ;2
  902. DB 00000000b ;3
  903. DB 00000000b ;4
  904. DB 01111110b ;5
  905. DB 01000010b ;6
  906. DB 01000010b ;7
  907. DB 01000010b ;8
  908. DB 01000010b ;9
  909. DB 01000010b ;10
  910. DB 01000010b ;11
  911. DB 00000000b ;12
  912. DB 00000000b ;13
  913. DB 00000000b ;14
  914. DB 00000000b ;15
  915. Font2: ;-----------;р
  916. DB 00000000b ;0
  917. DB 00000000b ;1
  918. DB 00000000b ;2
  919. DB 00000000b ;3
  920. DB 00000000b ;4
  921. DB 01011110b ;5
  922. DB 01100011b ;6
  923. DB 01000001b ;7
  924. DB 01000001b ;8
  925. DB 01000001b ;9
  926. DB 01000010b ;10
  927. DB 01111100b ;11
  928. DB 01000000b ;12
  929. DB 01000000b ;13
  930. DB 01000000b ;14
  931. DB 00000000b ;15
  932. ;-----------;с
  933. DB 00000000b ;0
  934. DB 00000000b ;1
  935. DB 00000000b ;2
  936. DB 00000000b ;3
  937. DB 00000000b ;4
  938. DB 00011110b ;5
  939. DB 00100000b ;6
  940. DB 01000000b ;7
  941. DB 01000000b ;8
  942. DB 01000000b ;9
  943. DB 01100000b ;10
  944. DB 00011110b ;11
  945. DB 00000000b ;12
  946. DB 00000000b ;13
  947. DB 00000000b ;14
  948. DB 00000000b ;15
  949. ;-----------;т
  950. DB 00000000b ;0
  951. DB 00000000b ;1
  952. DB 00000000b ;2
  953. DB 00000000b ;3
  954. DB 00000000b ;4
  955. DB 01111111b ;5
  956. DB 00001000b ;6
  957. DB 00001000b ;7
  958. DB 00001000b ;8
  959. DB 00001000b ;9
  960. DB 00001000b ;10
  961. DB 00001000b ;11
  962. DB 00000000b ;12
  963. DB 00000000b ;13
  964. DB 00000000b ;14
  965. DB 00000000b ;15
  966. ;-----------;у
  967. DB 00000000b ;0
  968. DB 00000000b ;1
  969. DB 00000000b ;2
  970. DB 00000000b ;3
  971. DB 00000000b ;4
  972. DB 01000001b ;5
  973. DB 01100011b ;6
  974. DB 00100010b ;7
  975. DB 00100110b ;8
  976. DB 00010100b ;9
  977. DB 00010100b ;10
  978. DB 00011000b ;11
  979. DB 00011000b ;12
  980. DB 00010000b ;13
  981. DB 11100000b ;14
  982. DB 00000000b ;15
  983. ;-----------;ф
  984. DB 00000000b ;0
  985. DB 00001000b ;1
  986. DB 00001000b ;2
  987. DB 00001000b ;3
  988. DB 00011110b ;4
  989. DB 00101011b ;5
  990. DB 01001001b ;6
  991. DB 01001001b ;7
  992. DB 01001001b ;8
  993. DB 01001001b ;9
  994. DB 01101010b ;10
  995. DB 00111100b ;11
  996. DB 00001000b ;12
  997. DB 00001000b ;13
  998. DB 00001000b ;14
  999. DB 00000000b ;15
  1000. ;-----------;х
  1001. DB 00000000b ;0
  1002. DB 00000000b ;1
  1003. DB 00000000b ;2
  1004. DB 00000000b ;3
  1005. DB 00000000b ;4
  1006. DB 01100011b ;5
  1007. DB 00110110b ;6
  1008. DB 00011100b ;7
  1009. DB 00001100b ;8
  1010. DB 00010110b ;9
  1011. DB 00110011b ;10
  1012. DB 01100001b ;11
  1013. DB 00000000b ;12
  1014. DB 00000000b ;13
  1015. DB 00000000b ;14
  1016. DB 00000000b ;15
  1017. ;-----------;ц
  1018. DB 00000000b ;0
  1019. DB 00000000b ;1
  1020. DB 00000000b ;2
  1021. DB 00000000b ;3
  1022. DB 00000000b ;4
  1023. DB 01000010b ;5
  1024. DB 01000010b ;6
  1025. DB 01000010b ;7
  1026. DB 01000010b ;8
  1027. DB 01000010b ;9
  1028. DB 01000010b ;10
  1029. DB 01111111b ;11
  1030. DB 00000001b ;12
  1031. DB 00000001b ;13
  1032. DB 00000000b ;14
  1033. DB 00000000b ;15
  1034. ;-----------;ч
  1035. DB 00000000b ;0
  1036. DB 00000000b ;1
  1037. DB 00000000b ;2
  1038. DB 00000000b ;3
  1039. DB 00000000b ;4
  1040. DB 01000010b ;5
  1041. DB 01000010b ;6
  1042. DB 01000010b ;7
  1043. DB 00111110b ;8
  1044. DB 00000010b ;9
  1045. DB 00000010b ;10
  1046. DB 00000010b ;11
  1047. DB 00000000b ;12
  1048. DB 00000000b ;13
  1049. DB 00000000b ;14
  1050. DB 00000000b ;15
  1051. ;-----------;ш
  1052. DB 00000000b ;0
  1053. DB 00000000b ;1
  1054. DB 00000000b ;2
  1055. DB 00000000b ;3
  1056. DB 00000000b ;4
  1057. DB 01001001b ;5
  1058. DB 01001001b ;6
  1059. DB 01001001b ;7
  1060. DB 01001001b ;8
  1061. DB 01001001b ;9
  1062. DB 01001001b ;10
  1063. DB 01111111b ;11
  1064. DB 00000000b ;12
  1065. DB 00000000b ;13
  1066. DB 00000000b ;14
  1067. DB 00000000b ;15
  1068. ;-----------;щ
  1069. DB 00000000b ;0
  1070. DB 00000000b ;1
  1071. DB 00000000b ;2
  1072. DB 00000000b ;3
  1073. DB 00000000b ;4
  1074. DB 01001001b ;5
  1075. DB 01001001b ;6
  1076. DB 01001001b ;7
  1077. DB 01001001b ;8
  1078. DB 01001001b ;9
  1079. DB 01001001b ;10
  1080. DB 01111111b ;11
  1081. DB 00000000b ;12
  1082. DB 00000000b ;13
  1083. DB 00000000b ;14
  1084. DB 00000000b ;15
  1085. ;-----------;ъ
  1086. DB 00000000b ;0
  1087. DB 00000000b ;1
  1088. DB 00000000b ;2
  1089. DB 00000000b ;3
  1090. DB 00000000b ;4
  1091. DB 11100000b ;5
  1092. DB 00100000b ;6
  1093. DB 00100000b ;7
  1094. DB 00111100b ;8
  1095. DB 00100010b ;9
  1096. DB 00100010b ;10
  1097. DB 00111100b ;11
  1098. DB 00000000b ;12
  1099. DB 00000000b ;13
  1100. DB 00000000b ;14
  1101. DB 00000000b ;15
  1102. ;-----------;ы
  1103. DB 00000000b ;0
  1104. DB 00000000b ;1
  1105. DB 00000000b ;2
  1106. DB 00000000b ;3
  1107. DB 00000000b ;4
  1108. DB 01000001b ;5
  1109. DB 01000001b ;6
  1110. DB 01000001b ;7
  1111. DB 01111001b ;8
  1112. DB 01000101b ;9
  1113. DB 01000101b ;10
  1114. DB 01111001b ;11
  1115. DB 00000000b ;12
  1116. DB 00000000b ;13
  1117. DB 00000000b ;14
  1118. DB 00000000b ;15
  1119. ;-----------;ь
  1120. DB 00000000b ;0
  1121. DB 00000000b ;1
  1122. DB 00000000b ;2
  1123. DB 00000000b ;3
  1124. DB 00000000b ;4
  1125. DB 01000000b ;5
  1126. DB 01000000b ;6
  1127. DB 01000000b ;7
  1128. DB 01111100b ;8
  1129. DB 01000010b ;9
  1130. DB 01000010b ;10
  1131. DB 01111100b ;11
  1132. DB 00000000b ;12
  1133. DB 00000000b ;13
  1134. DB 00000000b ;14
  1135. DB 00000000b ;15
  1136. ;-----------;э
  1137. DB 00000000b ;0
  1138. DB 00000000b ;1
  1139. DB 00000000b ;2
  1140. DB 00000000b ;3
  1141. DB 00000000b ;4
  1142. DB 01111100b ;5
  1143. DB 00000110b ;6
  1144. DB 00000010b ;7
  1145. DB 01111110b ;8
  1146. DB 00000010b ;9
  1147. DB 00000110b ;10
  1148. DB 01111000b ;11
  1149. DB 00000000b ;12
  1150. DB 00000000b ;13
  1151. DB 00000000b ;14
  1152. DB 00000000b ;15
  1153. ;-----------;ю
  1154. DB 00000000b ;0
  1155. DB 00000000b ;1
  1156. DB 00000000b ;2
  1157. DB 00000000b ;3
  1158. DB 00000000b ;4
  1159. DB 01001111b ;5
  1160. DB 01011001b ;6
  1161. DB 01010000b ;7
  1162. DB 01110000b ;8
  1163. DB 01010000b ;9
  1164. DB 01011001b ;10
  1165. DB 01001111b ;11
  1166. DB 00000000b ;12
  1167. DB 00000000b ;13
  1168. DB 00000000b ;14
  1169. DB 00000000b ;15
  1170. ;-----------;я
  1171. DB 00000000b ;0
  1172. DB 00000000b ;1
  1173. DB 00000000b ;2
  1174. DB 00000000b ;3
  1175. DB 00000000b ;4
  1176. DB 00011110b ;5
  1177. DB 00100010b ;6
  1178. DB 00100010b ;7
  1179. DB 00011110b ;8
  1180. DB 00110010b ;9
  1181. DB 00100010b ;10
  1182. DB 01100010b ;11
  1183. DB 00000000b ;12
  1184. DB 00000000b ;13
  1185. DB 00000000b ;14
  1186. DB 00000000b ;15
  1187. Font3: ;-----------;Ё
  1188. DB 00100100b ;0
  1189. DB 00000000b ;1
  1190. DB 00111111b ;2
  1191. DB 00100000b ;3
  1192. DB 00100000b ;4
  1193. DB 00100000b ;5
  1194. DB 00111111b ;6
  1195. DB 00100000b ;7
  1196. DB 00100000b ;8
  1197. DB 00100000b ;9
  1198. DB 00100000b ;10
  1199. DB 00111111b ;11
  1200. DB 00000000b ;12
  1201. DB 00000000b ;13
  1202. DB 00000000b ;14
  1203. DB 00000000b ;15
  1204. ;-----------;ё
  1205. DB 00000000b ;0
  1206. DB 00110110b ;1
  1207. DB 00110110b ;2
  1208. DB 00000000b ;3
  1209. DB 00000000b ;4
  1210. DB 00011110b ;5
  1211. DB 00100011b ;6
  1212. DB 01000001b ;7
  1213. DB 01111111b ;8
  1214. DB 01000000b ;9
  1215. DB 01100000b ;10
  1216. DB 00011111b ;11
  1217. DB 00000000b ;12
  1218. DB 00000000b ;13
  1219. DB 00000000b ;14
  1220. DB 00000000b ;15
  1221.  
  1222.  
  1223. СОЗДАТЬ_GDT:;{ Создание первичной таблицы GDT
  1224.  
  1225. mov ax, 0x0400
  1226. mov es, ax
  1227.  
  1228. ; Очистить GDT (1024 элементов)
  1229. xor di, di
  1230. mov cx, 0x2000
  1231. xor ax, ax
  1232. rep stosb
  1233.  
  1234. mov di, 8
  1235.  
  1236. ; ~600 kb кода, который может быть загружен
  1237. mov eax, 0x93FFF
  1238. mov ebx, ЗАЩИЩЕННЫЙ_РЕЖИМ ; начало
  1239. mov cx, 0x90 + 0x8 + 0x4000 ; DPL=0, PRESENT=0x80, BIT_SYSTEM=0x10, CODE_EXEC_ONLY=0x8, BIT_DEFAULT_SIZE_32=0x4000
  1240. call СОЗДАТЬ_ДЕСКРИПТОР
  1241.  
  1242. ; повтор сегмента, но уже для данных
  1243. mov eax, 0x93FFF
  1244. mov ebx, ЗАЩИЩЕННЫЙ_РЕЖИМ ; начало
  1245. mov cx, 0x90 + 0x2 + 0x4000 ; DATA_READ_WRITE=0x2
  1246. call СОЗДАТЬ_ДЕСКРИПТОР
  1247.  
  1248. ; сегмент стека (256 кб)
  1249. mov eax, 0x3FFFF
  1250. mov ebx, 0x100000 ; Начало в HI-mem
  1251. mov cx, 0x90 + 0x2 + 0x4000 ; DATA_READ_WRITE=0x2
  1252. call СОЗДАТЬ_ДЕСКРИПТОР
  1253.  
  1254. ; Память в целом (es)
  1255. mov eax, 0xFFFFF
  1256. xor ebx, ebx
  1257. mov cx, 0x90 + 0x2 + 0x8000 + 0x4000 ; GRANUL=0x8000
  1258. call СОЗДАТЬ_ДЕСКРИПТОР
  1259.  
  1260. ; Загрузка GDT [0x4000]
  1261. mov word [0x7C00], 0x1FFF
  1262. mov dword [0x7C02], 0x4000
  1263. lgdt [0x7C00]
  1264.  
  1265. ; Загрузка IDT
  1266. mov word [0x7C06], 0x7FF
  1267. mov dword [0x7C08], 0x6000
  1268. lidt [0x7C06]
  1269. ret
  1270. ;==============================================================================}
  1271. СОЗДАТЬ_ДЕСКРИПТОР:;{Создание дескриптора в реальном режиме
  1272. ; --------------------------------------------------------
  1273. ; EAX - Лимит 24
  1274. ; EBX - Адрес 32
  1275. ; CX - Конфигурация
  1276. ; ES:DI - Указатель на элемент GDT
  1277. ; ------------------------------------------------------
  1278.  
  1279. stosw ; limit
  1280.  
  1281. xchg eax, ebx
  1282. stosw ; address 0..15
  1283.  
  1284. shr eax, 16
  1285. stosb ; addr 16..23
  1286.  
  1287. xchg eax, ebx
  1288. mov al, cl
  1289. stosb ; config low
  1290.  
  1291. shr eax, 16
  1292. or al, ch
  1293. stosb ; config + limit
  1294.  
  1295. xchg eax, ebx
  1296. shr ax, 8
  1297. stosb ; addr 24..31
  1298.  
  1299. ret
  1300. ;==============================================================================}
  1301. РАЗМЕР_КОДА_РЕАЛЬНОГО_РЕЖИМА = $ - РЕАЛЬНЫЙ_РЕЖИМ
  1302. ;=============================================================================;}
  1303. ЗАЩИЩЕННЫЙ_РЕЖИМ :; { Защищенный режим
  1304.  
  1305. org 0
  1306. use32
  1307.  
  1308. .СТАРТ:
  1309.  
  1310. mov ax, 0x10
  1311. mov ds, ax
  1312.  
  1313. mov ax, 0x18
  1314. mov ss, ax
  1315. mov esp, 0x40000
  1316.  
  1317. mov ax, 0x20
  1318. mov es, ax
  1319.  
  1320. mov ax, 0
  1321. mov fs, ax
  1322. mov gs, ax
  1323.  
  1324. ; [ES:0B8000h] Адрес видеопамяти
  1325.  
  1326. ;==============================================================================}
  1327. ;---}
  1328.  
  1329. ;---}
  1330. ;===============================================================================
  1331. ;---{ ОСНОВНОЕ ТЕЛО ПРОГРАММЫ -ПРОГРАМИРОВАНИЕ:
  1332. ;-ЖШРИФТ:
  1333. ;-clGreen:
  1334. ;---{ Описание
  1335. ;---}
  1336. ;---{ ПРограмма
  1337. Call ЭКРАН_80_25_ОЧИСТКА;
  1338. call МЫШ_ИНИЦИАЛИЗАЦИЯ;
  1339. .ПОВТОР:
  1340.  
  1341.  
  1342. mov ecx,37;
  1343. mov edx,10;
  1344. call ЭКРАН_80_25_КУРСОР_ECX_EDX;
  1345. mov esi,ЭКРАН_80_25_ПРИВЕСТВИЕ;
  1346. call ЭКРАН_80_25_ВЫВОД_СТРОКИ_ESI;
  1347.  
  1348. call МЫШ_ЧТЕНИЕ;
  1349.  
  1350.  
  1351.  
  1352. ;------------------------------;{ Вывод Информации кнопки
  1353. mov ecx,35 ;
  1354. mov edx,11 ;
  1355. call ЭКРАН_80_25_КУРСОР_ECX_EDX ;
  1356. mov ESI,.TEXTMOUSEI ;
  1357. call ЭКРАН_80_25_ВЫВОД_СТРОКИ_ESI;
  1358. mov EAX,[МЫШКА_I1] ;
  1359. call ЭКРАН_80_25_ВЫВОД_ЧИСЛА_EAX ;
  1360. mov ESI,.TEXTPROBEL ;
  1361. call ЭКРАН_80_25_ВЫВОД_СТРОКИ_ESI;
  1362. ;------------------------------;}
  1363. ;------------------------------;{ Вывод координат по X
  1364. mov ecx,35 ;
  1365. mov edx,12 ;
  1366. call ЭКРАН_80_25_КУРСОР_ECX_EDX ;
  1367. mov ESI,.TEXTMOUSEX ;
  1368. call ЭКРАН_80_25_ВЫВОД_СТРОКИ_ESI;
  1369. mov EAX,[МЫШКА_X1] ;
  1370. call ЭКРАН_80_25_ВЫВОД_ЧИСЛА_EAX ;
  1371. mov ESI,.TEXTPROBEL ;
  1372. call ЭКРАН_80_25_ВЫВОД_СТРОКИ_ESI;
  1373. ;------------------------------;}
  1374. ;------------------------------;{ Вывод координат по Y
  1375. mov ecx,35 ;
  1376. mov edx,13 ;
  1377. call ЭКРАН_80_25_КУРСОР_ECX_EDX ;
  1378. mov ESI,.TEXTMOUSEY ;
  1379. call ЭКРАН_80_25_ВЫВОД_СТРОКИ_ESI;
  1380. mov EAX,[МЫШКА_Y1] ;
  1381. call ЭКРАН_80_25_ВЫВОД_ЧИСЛА_EAX ;
  1382. mov ESI,.TEXTPROBEL ;
  1383. call ЭКРАН_80_25_ВЫВОД_СТРОКИ_ESI;
  1384. ;------------------------------;}
  1385.  
  1386. ;------------------------------;{ Скан код нажатый
  1387. mov ecx,35 ;
  1388. mov edx,14 ;
  1389. call ЭКРАН_80_25_КУРСОР_ECX_EDX ;
  1390. mov ESI,.TEXTKEY1 ;
  1391. call ЭКРАН_80_25_ВЫВОД_СТРОКИ_ESI;
  1392. mov EAX,[КНОПКА_1] ;
  1393. call ЭКРАН_80_25_ВЫВОД_ЧИСЛА_EAX ;
  1394. mov ESI,.TEXTPROBEL ;
  1395. call ЭКРАН_80_25_ВЫВОД_СТРОКИ_ESI;
  1396. ;------------------------------;}
  1397. ;------------------------------;{ Скан код предыдущий
  1398. mov ecx,35 ;
  1399. mov edx,15 ;
  1400. call ЭКРАН_80_25_КУРСОР_ECX_EDX ;
  1401. mov ESI,.TEXTKEY2 ;
  1402. call ЭКРАН_80_25_ВЫВОД_СТРОКИ_ESI;
  1403. mov EAX,[КНОПКА_2] ;
  1404. call ЭКРАН_80_25_ВЫВОД_ЧИСЛА_EAX ;
  1405. mov ESI,.TEXTPROBEL ;
  1406. call ЭКРАН_80_25_ВЫВОД_СТРОКИ_ESI;
  1407. ;------------------------------;}
  1408.  
  1409. ;------------------------------;{ Нажатый символ
  1410. mov ecx,35 ;
  1411. mov edx,16 ;
  1412. call ЭКРАН_80_25_КУРСОР_ECX_EDX ;
  1413. mov ESI,.TEXTKEY2 ;
  1414. call ЭКРАН_80_25_ВЫВОД_СТРОКИ_ESI;
  1415. mov al,[БУКВА_1] ;
  1416. mov ah,[ЭКРАН_80_25_ФОН] ;
  1417. call ЭКРАН_80_25_ВЫВОД_БУКВЫ_AL ;
  1418. mov ESI,.TEXTPROBEL ;
  1419. call ЭКРАН_80_25_ВЫВОД_СТРОКИ_ESI;
  1420. ;------------------------------;}
  1421.  
  1422.  
  1423. jmp .ПОВТОР;
  1424. ;---}
  1425. ;---{ Переменные
  1426.  
  1427. .TEXTPROBEL: db ' ',0;
  1428. .TEXTMOUSEX: db 'Mouse X=',0;
  1429. .TEXTMOUSEY: db 'Mouse Y=',0;
  1430. .TEXTMOUSEI: db 'Mouse Info=',0;
  1431. .TEXTKEY1 : db 'KEY1 Info=',0;
  1432. .TEXTKEY2 : db 'KEY2 Info=',0;
  1433. ;---}
  1434.  
  1435. ;==============================================================================}
  1436. ;---{ ФУНКЦИИ ДЛЯ РАБОТЫ C ВСТРОЕНЫМ ЯЗКОМ ПРОГРАМИРОВАНИЯ
  1437.  
  1438.  
  1439. ;---}
  1440. ;---{ ФУНКЦИИ ДЛЯ РАБОТЫ C ЭЛЕМЕНТАМИ
  1441.  
  1442. ;---{ Описание
  1443. ; Универсальный элемент для создания окон и различных обьектов
  1444. ; Базовый класс для разработки OS
  1445. ;
  1446. ;---}
  1447. ;---{ Чтение значения полей элементов
  1448.  
  1449. ЭЛЕ_ТИП:;{ Возвращает в EAX Тип элемента EDI
  1450. push EDI ;
  1451. xor EAX,EAX ;
  1452. add EDI,ЭЛ_ТИП;
  1453. mov AL,[EDI] ;
  1454. pop DI ;
  1455. ret ;
  1456. ;==============================================================================}
  1457. ЭЛЕ_ФУН:;{ Возвращает в EAX Являеться ли элемента EDI функцией устанавливает флаг Z если это функция
  1458. push EDI ;
  1459. xor EAX,EAX ;
  1460. add EDI,ЭЛ_ФУН;
  1461. mov AL,[EDI] ;
  1462. test AL,AL ;
  1463. pop DI ;
  1464. ret ;
  1465. ;==============================================================================}
  1466. ЭЛЕ_ИМЯ:;{ Возвращает в EAX ИМЯ элемента EDI
  1467. push EDI ;
  1468. add EDI,ЭЛ_ИМЯ;
  1469. mov EAX,[EDI] ;
  1470. pop EDI ;
  1471. ret ;
  1472. ;==============================================================================}
  1473. ЭЛЕ_БУК:;{ Возвращает в EAX первую букву ИМЯ элемента EDI
  1474. push EDI ;
  1475. call ЭЛЕ_ИМЯ ;
  1476. mov EDI,EAX ;
  1477. mov AL,[EDI];
  1478. pop EDI ;
  1479. ret;
  1480. ;==============================================================================}
  1481. ЭЛЕ_ЗНА:;{ Возвращает в EAX Значение элемента EDI
  1482. push EDI ;
  1483. add EDI,ЭЛ_ЗНА;
  1484. mov EAX,[EDI] ;
  1485. test EAX,EAX ;
  1486. pop EDI ;
  1487. ret ;
  1488. ;==============================================================================}
  1489. ЭЛЕ_ПРЕ:;{ Возвращает в EAX Предыдущий элемент элемента EDI
  1490. push EDI ;
  1491. add EDI,ЭЛ_ПРЕ;
  1492. mov EAX,[EDI] ;
  1493. test EAX,EAX ;
  1494. pop EDI ;
  1495. ret ;
  1496. ;==============================================================================}
  1497. ЭЛЕ_СЛЕ:;{ Возвращает в EAX Следующий элемент элемента EDI
  1498. push EDI ;
  1499. add EDI,ЭЛ_СЛЕ;
  1500. mov EAX,[EDI] ;
  1501. test EAX,EAX ;
  1502. pop EDI ;
  1503. ret ;
  1504. ;==============================================================================}
  1505. ЭЛЕ_РОД:;{ Возвращает в EAX Родительский элемент элемента EDI
  1506. push EDI ;
  1507. add EDI,ЭЛ_РОД;
  1508. mov EAX,[EDI] ;
  1509. test EAX,EAX ;
  1510. pop EDI ;
  1511. ret ;
  1512. ;==============================================================================}
  1513. ЭЛЕ_ВЛО:;{ Возвращает в EAX Первый вложеный элемент элемента EDI
  1514. push EDI ;
  1515. add EDI,ЭЛ_ВЛО;
  1516. mov EAX,[EDI] ;
  1517. test EAX,EAX ;
  1518. pop Edi ;
  1519. ret ;
  1520. ;==============================================================================}
  1521. ЭЛЕ_КОД:;{ Возвращает в EAX Код элемент элемента EDI
  1522. push di ;
  1523. add DI,ЭЛ_КОД;
  1524. mov ax,[di] ;
  1525. test ax,ax ;
  1526. pop di ;
  1527. ret ;
  1528. ;==============================================================================}
  1529.  
  1530. ;---}
  1531. ;---{ Функции для работы с элементами
  1532.  
  1533.  
  1534.  
  1535. ;---}
  1536. ;---{ СТРУКТУРА ЭЛЕМЕНТА
  1537. ЭЛ_ТИП = 0 ;// ТИп элементы
  1538. ЭЛ_ФУН = 1 ;// Если это функция Участвует ли в поиске
  1539.  
  1540. ЭЛ_ИМЯ = 4 ;// Название элемента
  1541. ЭЛ_ЗНА = 8 ;// Адрес значения
  1542. ЭЛ_КОД = 12;// Код имени элемента
  1543. ЭЛ_РОД = 16;// Адрес родительского элемента
  1544. ЭЛ_ПРЕ = 20;// Адрес предыдущего элемента
  1545. ЭЛ_СЛЕ = 24;// Адрес Следующего элемента
  1546. ЭЛ_ВЛО = 28;// Адрес первого элемента вложеного списка
  1547. ;---}
  1548.  
  1549. ;---}
  1550. ;---{ ФУНКЦИИ ДЛЯ РАБОТЫ С СТРОКАМИ
  1551.  
  1552. ВЕРНУТЬ_КОНЕЦ_СТРОКИ_ESI_В_ESI :;{
  1553. push Ecx;
  1554. .ЦИКЛ: mov cl,[Esi];
  1555. test cl,cl ;// Если конец строки то выход
  1556. JZ .КЦИКЛ ;
  1557. inc EsI ;// Увеличиывкем указатель на читаемый символ
  1558. Jmp .ЦИКЛ ;
  1559. .КЦИКЛ:
  1560. pop Ecx;
  1561. ret ;
  1562. ;==============================================================================}
  1563. ДОБАВИТЬ_БУКВУ_AL_В_КОНЕЦ_СТРОКИ_ESI :;{
  1564. push ESi ;
  1565. Call ВЕРНУТЬ_КОНЕЦ_СТРОКИ_ESI_В_ESI;// Перемещаемся в конец строки
  1566. mov [ESI],AL ;// Записываем символ вместо 0 конца строки
  1567. inc ESI ;// Увеличиваем указатель на читаемый символ
  1568. mov byte [ESI],0 ;// Дописываем ноль в конец строки
  1569. pop ESi ;
  1570. ret ;
  1571. ;==============================================================================}
  1572. ДОБАВИТЬ_ЧИСЛО_EAX_В_КОНЕЦ_СТРОКИ_ESI:;{
  1573. pushad
  1574. MOV BX,10 ;// 10 система счисления
  1575. xor ecx,ecx ;
  1576.  
  1577. .ЦИКЛ1: ;----------
  1578. xor eDX,eDX;
  1579. DIV eBX ;
  1580. push edx ;// Сохраняем остаток от деления в стек
  1581. inc ecx ;
  1582. test eax,eax;
  1583. jnz .ЦИКЛ1 ;
  1584. ;----------
  1585.  
  1586.  
  1587. .ЦИКЛ2: ;---------;
  1588. pop edx ;
  1589. add dl,'0' ;
  1590. mov al,dl ;
  1591. call ДОБАВИТЬ_БУКВУ_AL_В_КОНЕЦ_СТРОКИ_ESI;
  1592. dec ecx ;
  1593. test ecx,ecx;
  1594. jnz .ЦИКЛ2 ;
  1595. ;---------;
  1596.  
  1597. popad
  1598. ret;
  1599. ;==============================================================================}
  1600.  
  1601. ;---}
  1602. ;---{ ФУНКЦИИ ДЛЯ РАБОТЫ С МЫШКОЙ И КЛАВИТУРОЙ PS2 НА НИЗКОМ УРОВНЕ
  1603.  
  1604. ;---{ Описание
  1605. ; Мудуль для работы с клавиатурой и мышкой PS2
  1606. ; Сперва запускаем инициализацию МЫШ_ИНИЦИАЛИЗАЦИЯ
  1607. ; затем можно использовать МЫШ_ЧТЕНИЕ для чтения данных с мышки и клавиатуры
  1608. ; Результат чтения записываеться в переменные их 2 копии предыдущие и новое значение для удобства
  1609. ;---}
  1610. ;---{ Функции для работы с PS2
  1611. МЫШ_ИНИЦИАЛИЗАЦИЯ:;{
  1612. pushad;
  1613.  
  1614. ; Включает мыш
  1615. mov al,0A8h;
  1616. Call PS2_ЗАПИСЬ_AL_В_ПОРТ_64;
  1617.  
  1618. ; Установка стандартных настроек
  1619. mov al,0xD4
  1620. Call PS2_ЗАПИСЬ_AL_В_ПОРТ_64;
  1621. mov al,0xF6
  1622. Call PS2_ЗАПИСЬ_AL_В_ПОРТ_60;
  1623.  
  1624. ; Включение отправки отчетов
  1625. mov al,0xD4
  1626. Call PS2_ЗАПИСЬ_AL_В_ПОРТ_64;
  1627. mov al,0xF4
  1628. Call PS2_ЗАПИСЬ_AL_В_ПОРТ_60;
  1629. popad;
  1630. ret;
  1631. ;==============================================================================}
  1632. МЫШ_ЧТЕНИЕ :;{
  1633. pushad;
  1634. call PS2_ЧТЕНИЕ_64ПОРТА_В_AL;
  1635. test al,100000b;
  1636. jnz .ЧИТАТЬ_МЫШ;
  1637.  
  1638. mov eax,[КНОПКА_1];
  1639. mov [КНОПКА_2],eax;
  1640.  
  1641. call PS2_ЧТЕНИЕ_60ПОРТА_В_AL
  1642. mov [КНОПКА_1],al;
  1643. call СКАНКОД_В_БУКВУ;
  1644. mov [БУКВА_1],al;
  1645. jmp .ВЫХОД;
  1646.  
  1647. .ЧИТАТЬ_МЫШ:
  1648. ;{ Запоминаем предыдущие координаты
  1649. mov eax,[МЫШКА_I1];
  1650. mov [МЫШКА_I2],eax;
  1651.  
  1652. mov eax,[МЫШКА_X1];
  1653. mov [МЫШКА_X2],eax;
  1654.  
  1655. mov eax,[МЫШКА_Y1];
  1656. mov [МЫШКА_Y2],eax;
  1657. ;-----------------}
  1658. call PS2_ЧТЕНИЕ_60ПОРТА_В_AL; // Чтение информационого байта от мышки
  1659. mov [МЫШКА_I1],al;
  1660. ;{Вычисление координаты по X
  1661. ;------------;
  1662. not al ;
  1663. mov cl,al ; // Запоминаем в CL состтояние инфоромационго байта мышки
  1664. SHL al,3 ;
  1665. SHR al,7 ;
  1666. mov ah,al ;
  1667. ;------------;
  1668. call PS2_ЧТЕНИЕ_60ПОРТА_В_AL;
  1669.  
  1670. sub ax,128;
  1671. mov dl,3;
  1672. div dl;
  1673. mov ah,0
  1674.  
  1675. mov [МЫШКА_X1],eax;
  1676. ;---------------------------}
  1677. ;{Вычисление координаты по Y
  1678. ;------------;
  1679. mov al,cl ;
  1680. SHL al,2 ;
  1681. SHR al,7 ;
  1682. mov ah,al ;
  1683. ;------------;
  1684. call PS2_ЧТЕНИЕ_60ПОРТА_В_AL;
  1685. sub ax,128;
  1686. mov dl,10;
  1687. div dl;
  1688. mov ah,0
  1689. mov edx,0;
  1690. mov edx,25
  1691. sub dx,ax;
  1692. mov eax,edx;
  1693. mov [МЫШКА_Y1],eax;
  1694. ;----------------------------}
  1695. ;{Вырисовка Мышки
  1696. ;// Стираем предыдущее положение мышки
  1697. mov ecx,[МЫШКА_X2];
  1698. mov edx,[МЫШКА_Y2];
  1699. mov Ah,[ЭКРАН_80_25_ФОН];
  1700. mov Al,0;
  1701. call ЭКРАН_80_25_ВЫВОД_AX_ECX_EDX;
  1702.  
  1703. ;// РИсуем мышку
  1704. mov ecx,[МЫШКА_X1];
  1705. mov edx,[МЫШКА_Y1];
  1706. mov Ah,10110000b;
  1707. mov Al,0;
  1708. call ЭКРАН_80_25_ВЫВОД_AX_ECX_EDX;
  1709. ;--------------------------------}
  1710.  
  1711. .ВЫХОД:
  1712. popad;
  1713. ret;
  1714. ;==============================================================================}
  1715. PS2_ЗАПИСЬ_AL_В_ПОРТ_64 :;{
  1716. pushad;
  1717. mov cl,al;
  1718. .ЦИКЛ:
  1719. in AL,0x64
  1720. test AL,2; // 000 000 10 b
  1721. jz .ВЫХОД;
  1722. jmp .ЦИКЛ;
  1723. .ВЫХОД:
  1724. mov al,cl;
  1725. out 0x64,al;
  1726. popad;
  1727. ret;
  1728. ;==============================================================================}
  1729. PS2_ЗАПИСЬ_AL_В_ПОРТ_60 :;{
  1730. pushad;
  1731. MOV CL,AL;
  1732. .ЦИКЛ:
  1733. in AL,64h
  1734. test AL,2;
  1735. jz .ВЫХОД;
  1736. jmp .ЦИКЛ;
  1737. .ВЫХОД:
  1738. mov al,CL;
  1739. out 0x60,al;
  1740. popad;
  1741. ret;
  1742. ;==============================================================================}
  1743. PS2_ЧТЕНИЕ_60ПОРТА_В_AL :;{
  1744. ;.ЦИКЛ:
  1745. ; in aL,64h;
  1746. ; test aL,1;
  1747. ; jnz .ВЫХОД;
  1748. ; jmp .ЦИКЛ;
  1749. ;.ВЫХОД:
  1750. in al,60h
  1751. ret;
  1752. ;==============================================================================}
  1753. PS2_ЧТЕНИЕ_64ПОРТА_В_AL :;{
  1754.  
  1755. .ЦИКЛ:
  1756. in aL,64h;
  1757. test aL,1;
  1758. jnz .ВЫХОД;
  1759. jmp .ЦИКЛ;
  1760. .ВЫХОД:
  1761. ret;
  1762. ;==============================================================================}
  1763. ;---}
  1764. ;---{ Переменные для работы с PS2
  1765. ;---{ ДЛя работы со скан кодами
  1766. СКАНКОД_В_БУКВУ:;{
  1767. ;{Описание
  1768. ; На входе получаем AL скан код возырвщвем в Al код буквы
  1769. ;}
  1770. push ESI;
  1771. Push ecx;
  1772. mov Cl,al;
  1773. xor eax,eax;
  1774. mov al,cl;
  1775. pop ECX;
  1776. cmp al,130;
  1777. jb .НЕ_ИЗВЕТНЫЙ;
  1778. cmp al,182;
  1779. ja .НЕ_ИЗВЕТНЫЙ;
  1780. mov esi,.SCANCOD;
  1781. sub eax,130
  1782. add ESI,eax;
  1783. Mov al,[ESI];
  1784. jmp .ВЫХОД;
  1785. .НЕ_ИЗВЕТНЫЙ: mov al,0 ;
  1786. .ВЫХОД:
  1787. pop ESI ;
  1788. ret
  1789. .SCANCOD:;{// Скан коды
  1790. db "1234567890-=",12 ;//Скан коды с 130 до 142 включительно 12 это DEL
  1791. db 9,"qwertyuiop[]",13 ;//Скан коды с 143 до 156 включительно Первй это там послдений это Enter
  1792. db 0,"asdfghjkl;'" ;//Скан коды с 157 до 168 Включительно Первый неизвестно
  1793. db "`",1,"\zxcvbnm,./",2;//Скан коды с 169 до 182 включительно 1 это лев сшифт 2 это правй сшифт
  1794. ;}
  1795. ;}
  1796. ;// переменные для работы с мышкой на низком уровне
  1797. БУКВА_1 : DD 0; // Символ нажатой кнопки клавиатуры
  1798. КНОПКА_1 : DD 0; // Скан код нажатой кнопки клавиатуры
  1799. МЫШКА_I1 : DD 0; // Информация о мышке Нажатые кнопки и так далее
  1800. МЫШКА_X1 : DD 0;
  1801. МЫШКА_Y1 : DD 0;
  1802. ;// ПРедыдущие значение данных от PS/2
  1803. БУКВА_2 : DD 0; // Символ Ранее нажатой кнопки клавиатуры
  1804. КНОПКА_2 : DD 0; // Скан код нажатой кнопки клавиатуры
  1805. МЫШКА_I2 : DD 0; // Информация о мышке Нажатые кнопки и так далее
  1806. МЫШКА_X2 : DD 0;
  1807. МЫШКА_Y2 : DD 0;
  1808. ;---}
  1809.  
  1810.  
  1811. ;---}
  1812.  
  1813. ;---}
  1814. ;---{ ФУНКЦИИ ДЛЯ РАБОТЫ С ЭКРАНОМ НА НИЗКОМ УРОВНЕ
  1815.  
  1816. ;---{ Описание
  1817. ; Модуль для работы с экраном 80 на 25
  1818. ; процедура ЭКРАН_80_25_ВЫВОД_ЧИСЛА_EAX использет модуль для работы со строками
  1819. ; Функция перевода числа в строку ЗАВИСИМОСТИ
  1820. ; Использет 3 Функции из модуля для работы со строками
  1821. ; ДОБАВИТЬ_ЧИСЛО_EAX_В_КОНЕЦ_СТРОКИ_ESI
  1822. ; ДОБАВИТЬ_БУКВУ_AL_В_КОНЕЦ_СТРОКИ_ESI
  1823. ; ВЕРНУТЬ_КОНЕЦ_СТРОКИ_ESI_В_ESI
  1824. ;---}
  1825. ;---{ Функции для работы с экраном в текстовом режиме 80 на 25
  1826. ЭКРАН_80_25_КУРСОР_ECX_EDX :;{ Устанавливает курсор в заданую позицию
  1827. pushad;
  1828.  
  1829. cmp ecx,79;
  1830. jb .ДАЛЕЕ1;
  1831. mov ecx,0;
  1832. .ДАЛЕЕ1:
  1833. cmp edx,24;
  1834. jb .ДАЛЕЕ2;
  1835. mov edx,0;
  1836. .ДАЛЕЕ2:
  1837. mov [ЭКРАН_80_25_КУРСОР_X],ecx;
  1838. mov [ЭКРАН_80_25_КУРСОР_Y],eDx;
  1839.  
  1840. popad;
  1841. ret;
  1842. ;==============================================================================}
  1843. ЭКРАН_80_25_ОЧИСТКА :;{ Очистка экрана
  1844. pushad
  1845. ;----------------------;
  1846. mov ecx,2000 ; // Для счета заполняемых символов
  1847. mov al,' ' ; // Записываем символ
  1848. mov ah,[ЭКРАН_80_25_ФОН]; // Атрибуты экрана
  1849. ;----------------------;
  1850. mov EDI,0B8000h ; // Настраиваем регистр ES на начало видеопаямити
  1851. ;----------------------;
  1852. .ЦИКЛ: test ecx,ecx ; // Проверяем на 0 пока CX<>0
  1853. jz .КЦИКЛ ; // Если CX=0 ВЫход
  1854. MOV [ES:EDI],al ; // Записываем код выводимого символа
  1855. inc EDI ; // Увеличиваем адрес
  1856. MOV [ES:EDI],ah ; // Записываем атрибуты
  1857. inc EDI ; // Увеличиваем адрес
  1858. dec ecx ; // Уменьшаем счетчик
  1859. jmp .ЦИКЛ ; // Повторить
  1860. .КЦИКЛ: ;----------------------;
  1861. popad ;
  1862. ret ;
  1863. ;==============================================================================}
  1864. ЭКРАН_80_25_ВЫВОД_AX_ECX_EDX:;{ Функция Вывод Символ AL с атрибутами AH если AL=0 то выводит тока атрибуты
  1865. pushad;
  1866. mov ebx,eax ; // Сохраняю выводимый символ и атрибуты в регистр BX
  1867. ;-----------------;
  1868. mov EDI,0B8000h ; Настраиваем регистр ES на началово видеопаямити
  1869. ;-----------------;
  1870.  
  1871. cmp ecx,79;
  1872. ja .ВЫХОД;
  1873.  
  1874. cmp edx,24;
  1875. ja .ВЫХОД;
  1876.  
  1877. ;-----------------;
  1878. mov eax,2 ; (КОД,АТРИБУТ) 2 байта на 1 символ
  1879. mul cl ; Умнажем координату по X на 2
  1880. mov ecx,eax ; Запоминаем
  1881. mov eax,160 ; Помещаем в регистр AX длину 1 строки на экране
  1882. mul dl ;
  1883. ADD eAX,eCX ;
  1884. ADD EDI,Eax ;
  1885. test bl,bl ;
  1886. jz .ДАЛЕЕ ;
  1887. MOV byte[ES:EDI],bl; (Символ)
  1888. .ДАЛЕЕ: inc EDI ;
  1889. MOV byte[ES:EDI],bh; (Цвет Атрибут)
  1890. ;-----------------;
  1891. .ВЫХОД:
  1892. popad ;
  1893. ret ;
  1894. ;==============================================================================}
  1895. ЭКРАН_80_25_СЛЕД_ПОЗИЦИЯ :;{ Перевод курсора в следующию позицию
  1896. pushad;
  1897. mov ecx,[ЭКРАН_80_25_КУРСОР_X];
  1898. mov eDx,[ЭКРАН_80_25_КУРСОР_Y];
  1899.  
  1900. cmp ecx,79 ;
  1901. jae .СЛЕД_СТРОКА;
  1902. inc ecx ;
  1903. jmp .ВЫХОД;
  1904. .СЛЕД_СТРОКА: mov ecx,0;
  1905. inc edx;
  1906. cmp edx,24;
  1907. jb .ВЫХОД;
  1908. mov ecx,0;
  1909. mov edx,0;
  1910. .ВЫХОД:
  1911. mov [ЭКРАН_80_25_КУРСОР_X],ecx;
  1912. mov [ЭКРАН_80_25_КУРСОР_Y],eDx;
  1913. popad;
  1914. ret;
  1915. ;==============================================================================}
  1916. ЭКРАН_80_25_СЛЕД_СТРОКА :;{ Перевод курсора НА следующию строку
  1917. pushad;
  1918. mov ecx,[ЭКРАН_80_25_КУРСОР_X];
  1919. mov eDx,[ЭКРАН_80_25_КУРСОР_Y];
  1920.  
  1921. .СЛЕД_СТРОКА: mov ecx,0;
  1922. inc edx;
  1923. cmp edx,24;
  1924. jb .ВЫХОД;
  1925. mov ecx,0;
  1926. mov edx,0;
  1927. .ВЫХОД:
  1928. mov [ЭКРАН_80_25_КУРСОР_X],ecx;
  1929. mov [ЭКРАН_80_25_КУРСОР_X],eDx;
  1930. popad;
  1931. ret;
  1932. ;==============================================================================}
  1933.  
  1934. ЭКРАН_80_25_ВЫВОД_БУКВЫ_AL :;{ Выводит символ в консоль
  1935. pushad;
  1936. cmp al,13;
  1937. jnz .ДАЛЕЕ;
  1938. call ЭКРАН_80_25_СЛЕД_СТРОКА;
  1939. jmp .ВЫХОД;
  1940. .ДАЛЕЕ:
  1941. cmp al,' ';
  1942. jb .ВЫХОД;
  1943. mov ecx,[ЭКРАН_80_25_КУРСОР_X];
  1944. mov edx,[ЭКРАН_80_25_КУРСОР_Y];
  1945. call ЭКРАН_80_25_ВЫВОД_AX_ECX_EDX;
  1946. call ЭКРАН_80_25_СЛЕД_ПОЗИЦИЯ;
  1947. .ВЫХОД:
  1948. popad;
  1949. ret;
  1950. ;==============================================================================}
  1951. ЭКРАН_80_25_ВЫВОД_СТРОКИ_ESI:;{ Выводит строку в консоль
  1952. pushad;
  1953. mov ah,[ЭКРАН_80_25_ФОН];
  1954. .ЦИКЛ: mov al,[esi];
  1955. test al,al;
  1956. jz .КЦИКЛ;
  1957. call ЭКРАН_80_25_ВЫВОД_БУКВЫ_AL;
  1958. inc esi;
  1959. jmp .ЦИКЛ;
  1960. .КЦИКЛ:
  1961. popad;
  1962. ret;
  1963. ;==============================================================================}
  1964. ЭКРАН_80_25_ВЫВОД_ЧИСЛА_EAX :;{ Выводит строку в консоль
  1965. pushad;
  1966. mov ESI,.БУФФЕР;
  1967. mov Byte [ESI],0;
  1968. call ДОБАВИТЬ_ЧИСЛО_EAX_В_КОНЕЦ_СТРОКИ_ESI;
  1969. call ЭКРАН_80_25_ВЫВОД_СТРОКИ_ESI;
  1970. popad;
  1971. ret;
  1972. .БУФФЕР: DB ' ',0;
  1973. ;==============================================================================}
  1974. ;---}
  1975. ;---{ Переменные
  1976. ЭКРАН_80_25_КУРСОР_X : DD 0;
  1977. ЭКРАН_80_25_КУРСОР_Y : DD 0;
  1978. ЭКРАН_80_25_ФОН : DB 01011111b;
  1979. ;---}
  1980.  
  1981. ;---}
  1982. ;---{ ФУНКЦИИ ДЛЯ РАБОТЫ С ПАМЯТЬЮ НА НИЗКОМ УРОВНЕ
  1983.  
  1984. ;---{ Описание
  1985. ; ДЛя работы с модулем необходимо указать НАЧ_КУЧИ адрес начала кучи
  1986. ; и КОН_КУЧИ адрес конца кучи
  1987. ;
  1988. ;
  1989. ;---}
  1990. ;---{ Функции для работы с памятью
  1991. ОЧИСТКА_ПАМЯТИ_С_ESI_ДО_EDI :;{ Очистка памяти с адреса ESI до адреса EDI Уже не входит в очистку
  1992. push ESI ;// Сохранение содержимого всех регистров
  1993. .ЦИКЛ:;---------------;
  1994. CMP ESI,EDI ;// Чтение адрсеа окончания кучи
  1995. JAE .КЦИК ;// Если SI>DI то выход
  1996. mov Byte [ESI],0;// Запись нуля по адресу SI
  1997. INC ESI ;// Увеличиываем SI
  1998. JMP .ЦИКЛ ;// Повторить
  1999. .КЦИК:;---------------;
  2000. pop ESI ;// Вотсановление всех регистров
  2001. ret ;// Выход из подпрограммы
  2002. ;==============================================================================}
  2003. ОСВОБОЖДЕНИЕ_УЧАСТКА_ПАМЯТИ_EDI :;{ Освобождение участка памяти EDI Адрес полученый ранее например с помощбю функции ПАМЯТЬ_ВЫДЕЛИТЬ
  2004. pushad ;
  2005. SUB EDI,5 ;// Переходим к байту занятости
  2006. MOV Byte [DI],0 ;// И обнуляем его
  2007. inc Edi ;
  2008. mov Ecx,[Edi] ; // Читаем размер участка
  2009. add Edi,4 ; // Переходим к первому байту участка памяти
  2010. mov Esi,Edi ; //устанавливаем начало стираемого участка памяти
  2011. add Edi,ECX ; // устанавливаем конец стираемого участка памяти
  2012. inc Edi ;
  2013. call ОЧИСТКА_ПАМЯТИ_С_ESI_ДО_EDI;
  2014. popad ;
  2015. RET ;
  2016. ;==============================================================================}
  2017. ВЫДЕЛИТЬ_УЧАСТОК_ПАМЯТИ_EDI_РАЗ_EDI:;{ Выделяет участок памяти размером EDI Возвращает адрес выделеного участка в DI
  2018. PUSHAD;
  2019. MOV ESI,[НАЧ_КУЧИ]; Читаем адрес начала кучи
  2020. .ЦИКЛ: ;//--------------
  2021. MOV AL,[ESI] ; Читаем флаг занятости
  2022. INC ESI ; Увеличиваем указатель
  2023. MOV ECX,[ESI] ; Читаем размер участка памяти
  2024. TEST AL,AL ; Проверка флага занятости
  2025. JNZ .СЛЕ_УЧА ; Если не равно нулю переходим к следующему участку
  2026. TEST ECX,ECX ; Размер выделеного участка памяти не может быть равен нулю по этому ноль исполльзуем как признак конца используемой части кучи
  2027. JZ .СВОБ ; Участок подходит если это последний участок в куче с нулевым размерм
  2028. CMP ECX,EDI ; Сравниваем размер участка CX и размер запрашиваемого участка DI
  2029. JZ .СВОБ ; Участок подходит если размер участка соотвествующий и флаг занятости AL равен нулю
  2030. .СЛЕ_УЧА:
  2031. ADD ECX,4 ; Переход к след участку размер этого участка + 2 байта попадаем на байт занятости следующего участка
  2032. ADD ESI,ECX ;
  2033. JMP .ЦИКЛ ;
  2034.  
  2035. .СВОБ: ;----------------;
  2036. DEC ESI ;
  2037. MOV byte [ESI],1 ; // Устанавливаем флаг занятости
  2038. INC ESI ; // Переходим к указанию размера учатка
  2039. MOV [ESI],EDI ; // Записываем размер участка
  2040. ADD ESI,4 ; // прибавляем 4 получаем адрес Выделеного участка
  2041. ;----------------;
  2042.  
  2043. POP EDI ;
  2044. PUSH ESI ; // EDI на вершие стека всегда
  2045. POPAD ;
  2046. RET ;
  2047. ;==============================================================================}
  2048. ;---}
  2049. ;---{ Переменные
  2050. НАЧ_КУЧИ : DW 0 ;// Адрес начала кучи
  2051. КОН_КУЧИ : DW 0 ;// Адрес Окончания Кучи
  2052. ;---}
  2053.  
  2054. ;---}
  2055. ;---{ ЗАВЕРШЕНИЕ ОПИСАНИЯ ПРОЦЕДУР И ФУНКЦИЙ ;-КОНЕЦ:
  2056. ;---}
  2057. ;---{ ПЕРЕМЕННЫЕ -ПЕРЕМЕННЫЕ:
  2058. ;-НШРИФТ:
  2059. ;-clBlue:
  2060.  
  2061. ЭКРАН_80_25_ПРИВЕСТВИЕ: DB 'Tim OS ПРИВЕТ привет',0;
  2062. ;-КОНЕЦ:
  2063. ;==============================================================================}
  2064. ;===============================================================================
  2065. ;---{ ЗАВЕРШАЮЩАЯ ЧАСТЬ ПРОГРАММЫ
  2066. КОНЕЦ_ПРОГРАММЫ :;// Использеться для задания адреса начала кучи
  2067. ; Размер кода защищенного режима Реального кода Бут-сектора
  2068. times 1474560 - ($ - ЗАЩИЩЕННЫЙ_РЕЖИМ.СТАРТ) - РАЗМЕР_КОДА_РЕАЛЬНОГО_РЕЖИМА - 0x200 db 0x90
  2069. ;---}
  2070. ;---{ МНЕМОНИКИ -МНЕМОНИКИ:
  2071. ;-ЖШРИФТ:
  2072. ;-clBlack:
  2073. ;MOV:
  2074. ;ADD:
  2075. ;SUB:
  2076. ;CALL:
  2077. ;JMP:
  2078. ;JZ:
  2079. ;JNZ:
  2080. ;JA:
  2081. ;JB:
  2082. ;JAE:
  2083. ;JBE:
  2084. ;RET:
  2085. ;PUSHAD:
  2086. ;POPAD:
  2087. ;POP:
  2088. ;PUSH:
  2089. ;TEST:
  2090. ;CMP:
  2091. ;INC:
  2092. ;DEC:
  2093. ;ORG:
  2094. ;BYTE:
  2095. ;WORD:
  2096. ;XOR:
  2097. ;SHL:
  2098. ;SHR:
  2099.  
  2100.  
  2101. ;-КОНЕЦ:
  2102. ;==============================================================================}
  2103. ;---{ РЕГИСТРЫ -РЕГИСТРЫ:
  2104. ;-ЖШРИФТ:
  2105. ;-clBlue:
  2106. ;AL:
  2107. ;AH:
  2108. ;AX:
  2109. ;BL:
  2110. ;BH:
  2111. ;BX:
  2112. ;CL:
  2113. ;CH:
  2114. ;CX:
  2115. ;DL:
  2116. ;DH:
  2117. ;DX:
  2118.  
  2119. ;EAX:
  2120. ;EBX:
  2121. ;ECX:
  2122. ;EDX:
  2123. ;ESI:
  2124. ;EDI:
  2125.  
  2126. ;SI:
  2127. ;DI:
  2128. ;ES:
  2129. ;-КОНЕЦ:
  2130. ;==============================================================================}
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement