Last active
April 9, 2024 13:27
-
-
Save MisterTimur/4910f31a1a60459461b8 to your computer and use it in GitHub Desktop.
TimOs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
;---{ ЗАГРУЗЧИК | |
;---{ Описание | |
; В блоке ЗАГРУЗОЧНЫЙ_СЕКТОР устанавлвиаеться видеорежим в котром будет запущена программа | |
; Через ES достапна вся память [ES:0B8000h] Адрес видеопамяти | |
; DS и программа сама начинаеться с адреса 0 в блоке ЗАЩИЩЕННЫЙ_РЕЖИМ | |
; Все что ниже уже пишеться в 32 битном режиме сама программа | |
; Сама програмам распологаеться кажися по адресу 0x8000 | |
; Количество загружаемых секторов не забывем указывать в разделе ЗАГРУЗОЧНЫЙ_СЕКТОР | |
; НЕ азбываем конце программы ставить секцию ЗАВЕРШАЮЩАЯ ЧАСТЬ ПРОГРАММЫ | |
; Между секцией ЗАГРУЗЧИК и ЗАВЕРШАЮЩАЯ ЧАСТЬ ПРОГРАММЫ размещаем свой код | |
;---} | |
;---{ Загрузчик | |
;Помощь при создании 32 битного загрузчика оказал robohacker.ru | |
;Автор 32 битного загрузчика robohacker.ru а я его немного изменил для своей ОС | |
ORG 0;{Абдулов Тимур Рифович 2015 год Email hostingurifa@gmail.com . | |
;INFO Кодировка файла должна быть CP 866 | |
;Site https://sites.google.com/site/timpascallib/ | |
;Youtube https://www.youtube.com/channel/UCUhQNuTAQ933YBTy6awC0Pw | |
;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 | |
;GIST https://gist.github.com/MisterTimur/4910f31a1a60459461b8 | |
;------------------------------------------------------------------------------} | |
ЗАГРУЗОЧНЫЙ_СЕКТОР:;{ | |
;------------------------; | |
mov ah,00h ; // Функция установки видео режима 80 на 25 | |
mov al,03h ; // Устаналиваем Видео режим | |
int 10h ; // Вызываем функцию биос | |
;------------------------; | |
;------------------------; | |
mov ah,05h ; // Выбираем видео страницу | |
mov al,0 ; | |
int 10h ; | |
;------------------------; | |
;------------------------; | |
mov bx,0 ; // Номер видеостраницы | |
mov dl,0 ; // Координата по X | |
mov dh,25 ; // уст. позицию курсора. установка на строку 25 делает курсор невидимым. | |
mov ah,02h ; // ПОдпрограмма установки курсора | |
int 10h ; | |
;------------------------; | |
cli | |
cld | |
xor ax, ax | |
mov ds, ax | |
mov es, ax | |
mov ss, ax | |
mov sp, 0x8000 | |
sti | |
mov dh,0 ; головка | |
mov ch,0 ; дорожка | |
mov cl,2 ; 2-й сектор | |
;-------------------; | |
mov ax, 0000h ; | |
mov es, ax ; Адрес куда загружаем | |
mov bx, 0x8000 ; Адрес куда загружаем | |
;-------------------; | |
mov al, 30 ; кол-во читаемых секторов Не забываем указывать | |
mov ah, 2h | |
int 13h | |
jmp far 0:8000h | |
times 0x200 - 2 - ($ - ЗАГРУЗОЧНЫЙ_СЕКТОР) db 0x90 | |
db 055h, 0AAh | |
;==============================================================================} | |
org 0x8000 | |
РЕАЛЬНЫЙ_РЕЖИМ :; { Реальный режим | |
Start: | |
mov bp,Font | |
mov dx, 128 | |
mov cx, 48 | |
mov bx, 1000h | |
mov ax, 1100h | |
int 10h; | |
mov bp,Font2 | |
mov dx, 224 | |
mov cx, 18 | |
mov bx, 1000h | |
mov ax, 1100h | |
int 10h; | |
call СОЗДАТЬ_GDT | |
cli | |
mov eax, cr0 | |
or al, 1 | |
mov cr0, eax | |
jmp 0x0008:0x0000 | |
Font: | |
;-------------;А | |
DB 00000000b ;0 | |
DB 00000000b ;1 | |
DB 00011100b ;2 | |
DB 00010100b ;3 | |
DB 00010100b ;4 | |
DB 00010110b ;5 | |
DB 00100010b ;6 | |
DB 00100010b ;7 | |
DB 00100010b ;8 | |
DB 01111111b ;9 | |
DB 01000001b ;10 | |
DB 01000001b ;11 | |
DB 00000000b ;12 | |
DB 00000000b ;13 | |
DB 00000000b ;14 | |
DB 00000000b ;15 | |
;-------------;Б | |
DB 00000000b ;0 | |
DB 00000000b ;1 | |
DB 01111100b ;2 | |
DB 01000000b ;3 | |
DB 01000000b ;4 | |
DB 01000000b ;5 | |
DB 01111100b ;6 | |
DB 01000110b ;7 | |
DB 01000010b ;8 | |
DB 01000010b ;9 | |
DB 01000110b ;10 | |
DB 01111100b ;11 | |
DB 00000000b ;12 | |
DB 00000000b ;13 | |
DB 00000000b ;14 | |
DB 00000000b ;15 | |
;-------------;В | |
DB 00000000b ;0 | |
DB 00000000b ;1 | |
DB 01111100b ;2 | |
DB 01000010b ;3 | |
DB 01000010b ;4 | |
DB 01000110b ;5 | |
DB 01111100b ;6 | |
DB 01000110b ;7 | |
DB 01000010b ;8 | |
DB 01000010b ;9 | |
DB 01000110b ;10 | |
DB 01111100b ;11 | |
DB 00000000b ;12 | |
DB 00000000b ;13 | |
DB 00000000b ;14 | |
DB 00000000b ;15 | |
;-------------;Г | |
DB 00000000b ;0 | |
DB 00000000b ;1 | |
DB 00111111b ;2 | |
DB 00100000b ;3 | |
DB 00100000b ;4 | |
DB 00100000b ;5 | |
DB 00100000b ;6 | |
DB 00100000b ;7 | |
DB 00100000b ;8 | |
DB 00100000b ;9 | |
DB 00100000b ;10 | |
DB 00100000b ;11 | |
DB 00000000b ;12 | |
DB 00000000b ;13 | |
DB 00000000b ;14 | |
DB 00000000b ;15 | |
;-------------;Д | |
DB 00000000b ;0 | |
DB 00000000b ;1 | |
DB 00111111b ;2 | |
DB 00100001b ;3 | |
DB 00100001b ;4 | |
DB 00100001b ;5 | |
DB 00100001b ;6 | |
DB 00100001b ;7 | |
DB 00100001b ;8 | |
DB 00100001b ;9 | |
DB 01000001b ;10 | |
DB 11111111b ;11 | |
DB 10000000b ;12 | |
DB 10000000b ;13 | |
DB 00000000b ;14 | |
DB 00000000b ;15 | |
;-------------;Е | |
DB 00000000b ;0 | |
DB 00000000b ;1 | |
DB 00111111b ;2 | |
DB 00100000b ;3 | |
DB 00100000b ;4 | |
DB 00100000b ;5 | |
DB 00111111b ;6 | |
DB 00100000b ;7 | |
DB 00100000b ;8 | |
DB 00100000b ;9 | |
DB 00100000b ;10 | |
DB 00111111b ;11 | |
DB 00000000b ;12 | |
DB 00000000b ;13 | |
DB 00000000b ;14 | |
DB 00000000b ;15 | |
;-------------;Ж | |
DB 00000000b ;0 | |
DB 00000000b ;1 | |
DB 10001000b ;2 | |
DB 01001001b ;3 | |
DB 00101010b ;4 | |
DB 00101010b ;5 | |
DB 00011100b ;6 | |
DB 00011100b ;7 | |
DB 00101010b ;8 | |
DB 01001001b ;9 | |
DB 01001001b ;10 | |
DB 10001000b ;11 | |
DB 00000000b ;12 | |
DB 00000000b ;13 | |
DB 00000000b ;14 | |
DB 00000000b ;15 | |
;-------------;З | |
DB 00000000b ;0 | |
DB 00000000b ;1 | |
DB 00111100b ;2 | |
DB 01000010b ;3 | |
DB 00000010b ;4 | |
DB 00000010b ;5 | |
DB 00111100b ;6 | |
DB 00000110b ;7 | |
DB 00000010b ;8 | |
DB 00000010b ;9 | |
DB 01000110b ;10 | |
DB 00111100b ;11 | |
DB 00000000b ;12 | |
DB 00000000b ;13 | |
DB 00000000b ;14 | |
DB 00000000b ;15 | |
;-------------;И | |
DB 00000000b ;0 | |
DB 00000000b ;1 | |
DB 01000001b ;2 | |
DB 01000011b ;3 | |
DB 01000111b ;4 | |
DB 01000101b ;5 | |
DB 01001101b ;6 | |
DB 01011001b ;7 | |
DB 01010001b ;8 | |
DB 01110001b ;9 | |
DB 01100001b ;10 | |
DB 01000001b ;11 | |
DB 00000000b ;12 | |
DB 00000000b ;13 | |
DB 00000000b ;14 | |
DB 00000000b ;15 | |
;-------------;Й | |
DB 00111000b ;0 | |
DB 00000000b ;1 | |
DB 01000001b ;2 | |
DB 01000011b ;3 | |
DB 01000111b ;4 | |
DB 01000101b ;5 | |
DB 01001101b ;6 | |
DB 01011001b ;7 | |
DB 01010001b ;8 | |
DB 01110001b ;9 | |
DB 01100001b ;10 | |
DB 01000001b ;11 | |
DB 00000000b ;12 | |
DB 00000000b ;13 | |
DB 00000000b ;14 | |
DB 00000000b ;15 | |
;-------------;К | |
DB 00000000b ;0 | |
DB 00000000b ;1 | |
DB 01000010b ;2 | |
DB 01000100b ;3 | |
DB 01001100b ;4 | |
DB 01011000b ;5 | |
DB 01110000b ;6 | |
DB 01110000b ;7 | |
DB 01011000b ;8 | |
DB 01001100b ;9 | |
DB 01000100b ;10 | |
DB 01000010b ;11 | |
DB 00000000b ;12 | |
DB 00000000b ;13 | |
DB 00000000b ;14 | |
DB 00000000b ;15 | |
;-------------;Л | |
DB 00000000b ;0 | |
DB 00000000b ;1 | |
DB 00111110b ;2 | |
DB 00100010b ;3 | |
DB 00100010b ;4 | |
DB 00100010b ;5 | |
DB 00100010b ;6 | |
DB 00100010b ;7 | |
DB 01100010b ;8 | |
DB 01000010b ;9 | |
DB 01000010b ;10 | |
DB 11000010b ;11 | |
DB 00000000b ;12 | |
DB 00000000b ;13 | |
DB 00000000b ;14 | |
DB 00000000b ;15 | |
;-------------;М | |
DB 00000000b ;0 | |
DB 00000000b ;1 | |
DB 11000001b ;2 | |
DB 11100011b ;3 | |
DB 11100011b ;4 | |
DB 11110101b ;5 | |
DB 11010101b ;6 | |
DB 11010101b ;7 | |
DB 11001001b ;8 | |
DB 11000001b ;9 | |
DB 11000001b ;10 | |
DB 11000001b ;11 | |
DB 00000000b ;12 | |
DB 00000000b ;13 | |
DB 00000000b ;14 | |
DB 00000000b ;15 | |
;-------------;Н | |
DB 00000000b ;0 | |
DB 00000000b ;1 | |
DB 01000001b ;2 | |
DB 01000001b ;3 | |
DB 01000001b ;4 | |
DB 01000001b ;5 | |
DB 01111111b ;6 | |
DB 01000001b ;7 | |
DB 01000001b ;8 | |
DB 01000001b ;9 | |
DB 01000001b ;10 | |
DB 01000001b ;11 | |
DB 00000000b ;12 | |
DB 00000000b ;13 | |
DB 00000000b ;14 | |
DB 00000000b ;15 | |
;-------------;О | |
DB 00000000b ;0 | |
DB 00000000b ;1 | |
DB 00111100b ;2 | |
DB 01000010b ;3 | |
DB 11000001b ;4 | |
DB 10000001b ;5 | |
DB 10000001b ;6 | |
DB 10000001b ;7 | |
DB 10000001b ;8 | |
DB 10000011b ;9 | |
DB 01000010b ;10 | |
DB 00111100b ;11 | |
DB 00000000b ;12 | |
DB 00000000b ;13 | |
DB 00000000b ;14 | |
DB 00000000b ;15 | |
;-------------;П | |
DB 00000000b ;0 | |
DB 00000000b ;1 | |
DB 01111111b ;2 | |
DB 01000001b ;3 | |
DB 01000001b ;4 | |
DB 01000001b ;5 | |
DB 01000001b ;6 | |
DB 01000001b ;7 | |
DB 01000001b ;8 | |
DB 01000001b ;9 | |
DB 01000001b ;10 | |
DB 01000001b ;11 | |
DB 00000000b ;12 | |
DB 00000000b ;13 | |
DB 00000000b ;14 | |
DB 00000000b ;15 | |
;-------------;Р | |
DB 00000000b ;0 | |
DB 00000000b ;1 | |
DB 01111100b ;2 | |
DB 01000110b ;3 | |
DB 01000010b ;4 | |
DB 01000010b ;5 | |
DB 01000110b ;6 | |
DB 01111000b ;7 | |
DB 01000000b ;8 | |
DB 01000000b ;9 | |
DB 01000000b ;10 | |
DB 01000000b ;11 | |
DB 00000000b ;12 | |
DB 00000000b ;13 | |
DB 00000000b ;14 | |
DB 00000000b ;15 | |
;-------------;С | |
DB 00000000b ;0 | |
DB 00000000b ;1 | |
DB 00011110b ;2 | |
DB 00110001b ;3 | |
DB 00100000b ;4 | |
DB 01000000b ;5 | |
DB 01000000b ;6 | |
DB 01000000b ;7 | |
DB 01000000b ;8 | |
DB 01100000b ;9 | |
DB 00100001b ;10 | |
DB 00011110b ;11 | |
DB 00000000b ;12 | |
DB 00000000b ;13 | |
DB 00000000b ;14 | |
DB 00000000b ;15 | |
;-------------;Т | |
DB 00000000b ;0 | |
DB 00000000b ;1 | |
DB 01111111b ;2 | |
DB 00001000b ;3 | |
DB 00001000b ;4 | |
DB 00001000b ;5 | |
DB 00001000b ;6 | |
DB 00001000b ;7 | |
DB 00001000b ;8 | |
DB 00001000b ;9 | |
DB 00001000b ;10 | |
DB 00001000b ;11 | |
DB 00000000b ;12 | |
DB 00000000b ;13 | |
DB 00000000b ;14 | |
DB 00000000b ;15 | |
;-------------;У | |
DB 00000000b ;0 | |
DB 00000000b ;1 | |
DB 01000001b ;2 | |
DB 01100011b ;3 | |
DB 00100010b ;4 | |
DB 00110110b ;5 | |
DB 00010100b ;6 | |
DB 00011100b ;7 | |
DB 00001000b ;8 | |
DB 00001000b ;9 | |
DB 00011000b ;10 | |
DB 01110000b ;11 | |
DB 00000000b ;12 | |
DB 00000000b ;13 | |
DB 00000000b ;14 | |
DB 00000000b ;15 | |
;-------------;Ф | |
DB 00000000b ;0 | |
DB 00000000b ;1 | |
DB 00001000b ;2 | |
DB 00011110b ;3 | |
DB 00101010b ;4 | |
DB 01001001b ;5 | |
DB 01001001b ;6 | |
DB 01001001b ;7 | |
DB 01001001b ;8 | |
DB 01101010b ;9 | |
DB 00111100b ;10 | |
DB 00001000b ;11 | |
DB 00000000b ;12 | |
DB 00000000b ;13 | |
DB 00000000b ;14 | |
DB 00000000b ;15 | |
;-------------;Х | |
DB 00000000b ;0 | |
DB 00000000b ;1 | |
DB 11000011b ;2 | |
DB 01100110b ;3 | |
DB 00110100b ;4 | |
DB 00011100b ;5 | |
DB 00011000b ;6 | |
DB 00011100b ;7 | |
DB 00110100b ;8 | |
DB 00100110b ;9 | |
DB 01100011b ;10 | |
DB 11000001b ;11 | |
DB 00000000b ;12 | |
DB 00000000b ;13 | |
DB 00000000b ;14 | |
DB 00000000b ;15 | |
;-------------;Ц | |
DB 00000000b ;0 | |
DB 00000000b ;1 | |
DB 01000001b ;2 | |
DB 01000001b ;3 | |
DB 01000001b ;4 | |
DB 01000001b ;5 | |
DB 01000001b ;6 | |
DB 01000001b ;7 | |
DB 01000001b ;8 | |
DB 01000001b ;9 | |
DB 01000001b ;10 | |
DB 01111111b ;11 | |
DB 00000000b ;12 | |
DB 00000000b ;13 | |
DB 00000000b ;14 | |
DB 00000000b ;15 | |
;-------------;Ч | |
DB 00000000b ;0 | |
DB 00000000b ;1 | |
DB 01000001b ;2 | |
DB 01000001b ;3 | |
DB 01000001b ;4 | |
DB 01000001b ;5 | |
DB 01100001b ;6 | |
DB 00111111b ;7 | |
DB 00000001b ;8 | |
DB 00000001b ;9 | |
DB 00000001b ;10 | |
DB 00000001b ;11 | |
DB 00000000b ;12 | |
DB 00000000b ;13 | |
DB 00000000b ;14 | |
DB 00000000b ;15 | |
;-------------;Ш | |
DB 00000000b ;0 | |
DB 00000000b ;1 | |
DB 01001001b ;2 | |
DB 01001001b ;3 | |
DB 01001001b ;4 | |
DB 01001001b ;5 | |
DB 01001001b ;6 | |
DB 01001001b ;7 | |
DB 01001001b ;8 | |
DB 01001001b ;9 | |
DB 01001001b ;10 | |
DB 01111111b ;11 | |
DB 00000000b ;12 | |
DB 00000000b ;13 | |
DB 00000000b ;14 | |
DB 00000000b ;15 | |
;-------------;Щ | |
DB 00000000b ;0 | |
DB 00000000b ;1 | |
DB 01001001b ;2 | |
DB 01001001b ;3 | |
DB 01001001b ;4 | |
DB 01001001b ;5 | |
DB 01001001b ;6 | |
DB 01001001b ;7 | |
DB 01001001b ;8 | |
DB 01001001b ;9 | |
DB 01001001b ;10 | |
DB 01111111b ;11 | |
DB 00000000b ;12 | |
DB 00000000b ;13 | |
DB 00000000b ;14 | |
DB 00000000b ;15 | |
;-------------;Ъ | |
DB 00000000b ;0 | |
DB 00000000b ;1 | |
DB 11100000b ;2 | |
DB 00100000b ;3 | |
DB 00100000b ;4 | |
DB 00100000b ;5 | |
DB 00111110b ;6 | |
DB 00100011b ;7 | |
DB 00100001b ;8 | |
DB 00100001b ;9 | |
DB 00100011b ;10 | |
DB 00111110b ;11 | |
DB 00000000b ;12 | |
DB 00000000b ;13 | |
DB 00000000b ;14 | |
DB 00000000b ;15 | |
;-------------;Ы | |
DB 00000000b ;0 | |
DB 00000000b ;1 | |
DB 01000001b ;2 | |
DB 01000001b ;3 | |
DB 01000001b ;4 | |
DB 01000001b ;5 | |
DB 01111001b ;6 | |
DB 01000101b ;7 | |
DB 01000101b ;8 | |
DB 01000101b ;9 | |
DB 01001101b ;10 | |
DB 01111001b ;11 | |
DB 00000000b ;12 | |
DB 00000000b ;13 | |
DB 00000000b ;14 | |
DB 00000000b ;15 | |
;-------------;Ь | |
DB 00000000b ;0 | |
DB 00000000b ;1 | |
DB 01000000b ;2 | |
DB 01000000b ;3 | |
DB 01000000b ;4 | |
DB 01000000b ;5 | |
DB 01111100b ;6 | |
DB 01000110b ;7 | |
DB 01000010b ;8 | |
DB 01000010b ;9 | |
DB 01000110b ;10 | |
DB 01111100b ;11 | |
DB 00000000b ;12 | |
DB 00000000b ;13 | |
DB 00000000b ;14 | |
DB 00000000b ;15 | |
;-------------;Э | |
DB 00000000b ;0 | |
DB 00000000b ;1 | |
DB 00111100b ;2 | |
DB 01000010b ;3 | |
DB 00000001b ;4 | |
DB 00000001b ;5 | |
DB 00111111b ;6 | |
DB 00000001b ;7 | |
DB 00000001b ;8 | |
DB 00000011b ;9 | |
DB 01000010b ;10 | |
DB 00111100b ;11 | |
DB 00000000b ;12 | |
DB 00000000b ;13 | |
DB 00000000b ;14 | |
DB 00000000b ;15 | |
;-------------;Ю | |
DB 00000000b ;0 | |
DB 00000000b ;1 | |
DB 01001111b ;2 | |
DB 01011001b ;3 | |
DB 01010000b ;4 | |
DB 01010000b ;5 | |
DB 01110000b ;6 | |
DB 01010000b ;7 | |
DB 01010000b ;8 | |
DB 01010000b ;9 | |
DB 01001001b ;10 | |
DB 01001111b ;11 | |
DB 00000000b ;12 | |
DB 00000000b ;13 | |
DB 00000000b ;14 | |
DB 00000000b ;15 | |
;-------------;Я | |
DB 00000000b ;0 | |
DB 00000000b ;1 | |
DB 00011110b ;2 | |
DB 00100010b ;3 | |
DB 00100010b ;4 | |
DB 00100010b ;5 | |
DB 00110010b ;6 | |
DB 00011110b ;7 | |
DB 00110010b ;8 | |
DB 00100010b ;9 | |
DB 01100010b ;10 | |
DB 01100010b ;11 | |
DB 00000000b ;12 | |
DB 00000000b ;13 | |
DB 00000000b ;14 | |
DB 00000000b ;15 | |
;-------------;а | |
DB 00000000b ;0 | |
DB 00000000b ;1 | |
DB 00000000b ;2 | |
DB 00000000b ;3 | |
DB 00000000b ;4 | |
DB 00011100b ;5 | |
DB 00100010b ;6 | |
DB 00000010b ;7 | |
DB 00111110b ;8 | |
DB 01000010b ;9 | |
DB 01000110b ;10 | |
DB 00111010b ;11 | |
DB 00000000b ;12 | |
DB 00000000b ;13 | |
DB 00000000b ;14 | |
DB 00000000b ;15 | |
;-------------;б | |
DB 00000000b ;0 | |
DB 00011110b ;1 | |
DB 00100000b ;2 | |
DB 00100000b ;3 | |
DB 01011110b ;4 | |
DB 01100010b ;5 | |
DB 01000001b ;6 | |
DB 01000001b ;7 | |
DB 01000001b ;8 | |
DB 01000001b ;9 | |
DB 00100010b ;10 | |
DB 00011100b ;11 | |
DB 00000000b ;12 | |
DB 00000000b ;13 | |
DB 00000000b ;14 | |
DB 00000000b ;15 | |
;-------------;в | |
DB 00000000b ;0 | |
DB 00000000b ;1 | |
DB 00000000b ;2 | |
DB 00000000b ;3 | |
DB 00000000b ;4 | |
DB 01111100b ;5 | |
DB 01000010b ;6 | |
DB 01000010b ;7 | |
DB 01111100b ;8 | |
DB 01000010b ;9 | |
DB 01000010b ;10 | |
DB 01111100b ;11 | |
DB 00000000b ;12 | |
DB 00000000b ;13 | |
DB 00000000b ;14 | |
DB 00000000b ;15 | |
;-------------;г | |
DB 00000000b ;0 | |
DB 00000000b ;1 | |
DB 00000000b ;2 | |
DB 00000000b ;3 | |
DB 00000000b ;4 | |
DB 00111111b ;5 | |
DB 00100000b ;6 | |
DB 00100000b ;7 | |
DB 00100000b ;8 | |
DB 00100000b ;9 | |
DB 00100000b ;10 | |
DB 00100000b ;11 | |
DB 00000000b ;12 | |
DB 00000000b ;13 | |
DB 00000000b ;14 | |
DB 00000000b ;15 | |
;-------------;д | |
DB 00000000b ;0 | |
DB 00000000b ;1 | |
DB 00000000b ;2 | |
DB 00000000b ;3 | |
DB 00000000b ;4 | |
DB 00111110b ;5 | |
DB 00100010b ;6 | |
DB 00100010b ;7 | |
DB 00100010b ;8 | |
DB 01100010b ;9 | |
DB 01000010b ;10 | |
DB 11111111b ;11 | |
DB 10000001b ;12 | |
DB 10000001b ;13 | |
DB 00000000b ;14 | |
DB 00000000b ;15 | |
;-------------;е | |
DB 00000000b ;0 | |
DB 00000000b ;1 | |
DB 00000000b ;2 | |
DB 00000000b ;3 | |
DB 00000000b ;4 | |
DB 00011110b ;5 | |
DB 00100011b ;6 | |
DB 01000001b ;7 | |
DB 01111111b ;8 | |
DB 01000000b ;9 | |
DB 01100000b ;10 | |
DB 00011111b ;11 | |
DB 00000000b ;12 | |
DB 00000000b ;13 | |
DB 00000000b ;14 | |
DB 00000000b ;15 | |
;-------------;ж | |
DB 00000000b ;0 | |
DB 00000000b ;1 | |
DB 00000000b ;2 | |
DB 00000000b ;3 | |
DB 00000000b ;4 | |
DB 10001000b ;5 | |
DB 01001001b ;6 | |
DB 00101010b ;7 | |
DB 00011100b ;8 | |
DB 00101010b ;9 | |
DB 01101011b ;10 | |
DB 11001001b ;11 | |
DB 00000000b ;12 | |
DB 00000000b ;13 | |
DB 00000000b ;14 | |
DB 00000000b ;15 | |
;-------------;з | |
DB 00000000b ;0 | |
DB 00000000b ;1 | |
DB 00000000b ;2 | |
DB 00000000b ;3 | |
DB 00000000b ;4 | |
DB 01111100b ;5 | |
DB 00000010b ;6 | |
DB 00000010b ;7 | |
DB 00111100b ;8 | |
DB 00000010b ;9 | |
DB 00000010b ;10 | |
DB 01111100b ;11 | |
DB 00000000b ;12 | |
DB 00000000b ;13 | |
DB 00000000b ;14 | |
DB 00000000b ;15 | |
;-------------;и | |
DB 00000000b ;0 | |
DB 00000000b ;1 | |
DB 00000000b ;2 | |
DB 00000000b ;3 | |
DB 00000000b ;4 | |
DB 01000010b ;5 | |
DB 01000110b ;6 | |
DB 01001110b ;7 | |
DB 01011010b ;8 | |
DB 01110010b ;9 | |
DB 01100010b ;10 | |
DB 01000010b ;11 | |
DB 00000000b ;12 | |
DB 00000000b ;13 | |
DB 00000000b ;14 | |
DB 00000000b ;15 | |
;-------------;й | |
DB 00000000b ;0 | |
DB 00000000b ;1 | |
DB 00100100b ;2 | |
DB 00111000b ;3 | |
DB 00000000b ;4 | |
DB 01000010b ;5 | |
DB 01000110b ;6 | |
DB 01001110b ;7 | |
DB 01011010b ;8 | |
DB 01110010b ;9 | |
DB 01100010b ;10 | |
DB 01000010b ;11 | |
DB 00000000b ;12 | |
DB 00000000b ;13 | |
DB 00000000b ;14 | |
DB 00000000b ;15 | |
;-------------;к | |
DB 00000000b ;0 | |
DB 00000000b ;1 | |
DB 00000000b ;2 | |
DB 00000000b ;3 | |
DB 00000000b ;4 | |
DB 01000010b ;5 | |
DB 01001100b ;6 | |
DB 01010000b ;7 | |
DB 01100000b ;8 | |
DB 01011000b ;9 | |
DB 01001100b ;10 | |
DB 01000110b ;11 | |
DB 00000000b ;12 | |
DB 00000000b ;13 | |
DB 00000000b ;14 | |
DB 00000000b ;15 | |
;-------------;л | |
DB 00000000b ;0 | |
DB 00000000b ;1 | |
DB 00000000b ;2 | |
DB 00000000b ;3 | |
DB 00000000b ;4 | |
DB 00111110b ;5 | |
DB 00100010b ;6 | |
DB 00100010b ;7 | |
DB 00100010b ;8 | |
DB 00100010b ;9 | |
DB 01000010b ;10 | |
DB 11000010b ;11 | |
DB 00000000b ;12 | |
DB 00000000b ;13 | |
DB 00000000b ;14 | |
DB 00000000b ;15 | |
;-------------;м | |
DB 00000000b ;0 | |
DB 00000000b ;1 | |
DB 00000000b ;2 | |
DB 00000000b ;3 | |
DB 00000000b ;4 | |
DB 01100011b ;5 | |
DB 01010101b ;6 | |
DB 01010101b ;7 | |
DB 01010101b ;8 | |
DB 01001001b ;9 | |
DB 01000001b ;10 | |
DB 01000001b ;11 | |
DB 00000000b ;12 | |
DB 00000000b ;13 | |
DB 00000000b ;14 | |
DB 00000000b ;15 | |
;-------------;н | |
DB 00000000b ;0 | |
DB 00000000b ;1 | |
DB 00000000b ;2 | |
DB 00000000b ;3 | |
DB 00000000b ;4 | |
DB 01000010b ;5 | |
DB 01000010b ;6 | |
DB 01000010b ;7 | |
DB 01111110b ;8 | |
DB 01000010b ;9 | |
DB 01000010b ;10 | |
DB 01000010b ;11 | |
DB 00000000b ;12 | |
DB 00000000b ;13 | |
DB 00000000b ;14 | |
DB 00000000b ;15 | |
;-------------;о | |
DB 00000000b ;0 | |
DB 00000000b ;1 | |
DB 00000000b ;2 | |
DB 00000000b ;3 | |
DB 00000000b ;4 | |
DB 00011110b ;5 | |
DB 00100011b ;6 | |
DB 01000001b ;7 | |
DB 01000001b ;8 | |
DB 01000001b ;9 | |
DB 01100010b ;10 | |
DB 00111100b ;11 | |
DB 00000000b ;12 | |
DB 00000000b ;13 | |
DB 00000000b ;14 | |
DB 00000000b ;15 | |
;-------------;п | |
DB 00000000b ;0 | |
DB 00000000b ;1 | |
DB 00000000b ;2 | |
DB 00000000b ;3 | |
DB 00000000b ;4 | |
DB 01111110b ;5 | |
DB 01000010b ;6 | |
DB 01000010b ;7 | |
DB 01000010b ;8 | |
DB 01000010b ;9 | |
DB 01000010b ;10 | |
DB 01000010b ;11 | |
DB 00000000b ;12 | |
DB 00000000b ;13 | |
DB 00000000b ;14 | |
DB 00000000b ;15 | |
Font2: ;-------------;р | |
DB 00000000b ;0 | |
DB 00000000b ;1 | |
DB 00000000b ;2 | |
DB 00000000b ;3 | |
DB 00000000b ;4 | |
DB 01011110b ;5 | |
DB 01100011b ;6 | |
DB 01000001b ;7 | |
DB 01000001b ;8 | |
DB 01000001b ;9 | |
DB 01000010b ;10 | |
DB 01111100b ;11 | |
DB 01000000b ;12 | |
DB 01000000b ;13 | |
DB 01000000b ;14 | |
DB 00000000b ;15 | |
;-------------;с | |
DB 00000000b ;0 | |
DB 00000000b ;1 | |
DB 00000000b ;2 | |
DB 00000000b ;3 | |
DB 00000000b ;4 | |
DB 00011110b ;5 | |
DB 00100000b ;6 | |
DB 01000000b ;7 | |
DB 01000000b ;8 | |
DB 01000000b ;9 | |
DB 01100000b ;10 | |
DB 00011110b ;11 | |
DB 00000000b ;12 | |
DB 00000000b ;13 | |
DB 00000000b ;14 | |
DB 00000000b ;15 | |
;-------------;т | |
DB 00000000b ;0 | |
DB 00000000b ;1 | |
DB 00000000b ;2 | |
DB 00000000b ;3 | |
DB 00000000b ;4 | |
DB 01111111b ;5 | |
DB 00001000b ;6 | |
DB 00001000b ;7 | |
DB 00001000b ;8 | |
DB 00001000b ;9 | |
DB 00001000b ;10 | |
DB 00001000b ;11 | |
DB 00000000b ;12 | |
DB 00000000b ;13 | |
DB 00000000b ;14 | |
DB 00000000b ;15 | |
;-------------;у | |
DB 00000000b ;0 | |
DB 00000000b ;1 | |
DB 00000000b ;2 | |
DB 00000000b ;3 | |
DB 00000000b ;4 | |
DB 01000001b ;5 | |
DB 01100011b ;6 | |
DB 00100010b ;7 | |
DB 00100110b ;8 | |
DB 00010100b ;9 | |
DB 00010100b ;10 | |
DB 00011000b ;11 | |
DB 00011000b ;12 | |
DB 00010000b ;13 | |
DB 11100000b ;14 | |
DB 00000000b ;15 | |
;-------------;ф | |
DB 00000000b ;0 | |
DB 00001000b ;1 | |
DB 00001000b ;2 | |
DB 00001000b ;3 | |
DB 00011110b ;4 | |
DB 00101011b ;5 | |
DB 01001001b ;6 | |
DB 01001001b ;7 | |
DB 01001001b ;8 | |
DB 01001001b ;9 | |
DB 01101010b ;10 | |
DB 00111100b ;11 | |
DB 00001000b ;12 | |
DB 00001000b ;13 | |
DB 00001000b ;14 | |
DB 00000000b ;15 | |
;-------------;х | |
DB 00000000b ;0 | |
DB 00000000b ;1 | |
DB 00000000b ;2 | |
DB 00000000b ;3 | |
DB 00000000b ;4 | |
DB 01100011b ;5 | |
DB 00110110b ;6 | |
DB 00011100b ;7 | |
DB 00001100b ;8 | |
DB 00010110b ;9 | |
DB 00110011b ;10 | |
DB 01100001b ;11 | |
DB 00000000b ;12 | |
DB 00000000b ;13 | |
DB 00000000b ;14 | |
DB 00000000b ;15 | |
;-------------;ц | |
DB 00000000b ;0 | |
DB 00000000b ;1 | |
DB 00000000b ;2 | |
DB 00000000b ;3 | |
DB 00000000b ;4 | |
DB 01000010b ;5 | |
DB 01000010b ;6 | |
DB 01000010b ;7 | |
DB 01000010b ;8 | |
DB 01000010b ;9 | |
DB 01000010b ;10 | |
DB 01111111b ;11 | |
DB 00000001b ;12 | |
DB 00000001b ;13 | |
DB 00000000b ;14 | |
DB 00000000b ;15 | |
;-------------;ч | |
DB 00000000b ;0 | |
DB 00000000b ;1 | |
DB 00000000b ;2 | |
DB 00000000b ;3 | |
DB 00000000b ;4 | |
DB 01000010b ;5 | |
DB 01000010b ;6 | |
DB 01000010b ;7 | |
DB 00111110b ;8 | |
DB 00000010b ;9 | |
DB 00000010b ;10 | |
DB 00000010b ;11 | |
DB 00000000b ;12 | |
DB 00000000b ;13 | |
DB 00000000b ;14 | |
DB 00000000b ;15 | |
;-------------;ш | |
DB 00000000b ;0 | |
DB 00000000b ;1 | |
DB 00000000b ;2 | |
DB 00000000b ;3 | |
DB 00000000b ;4 | |
DB 01001001b ;5 | |
DB 01001001b ;6 | |
DB 01001001b ;7 | |
DB 01001001b ;8 | |
DB 01001001b ;9 | |
DB 01001001b ;10 | |
DB 01111111b ;11 | |
DB 00000000b ;12 | |
DB 00000000b ;13 | |
DB 00000000b ;14 | |
DB 00000000b ;15 | |
;-------------;щ | |
DB 00000000b ;0 | |
DB 00000000b ;1 | |
DB 00000000b ;2 | |
DB 00000000b ;3 | |
DB 00000000b ;4 | |
DB 01001001b ;5 | |
DB 01001001b ;6 | |
DB 01001001b ;7 | |
DB 01001001b ;8 | |
DB 01001001b ;9 | |
DB 01001001b ;10 | |
DB 01111111b ;11 | |
DB 00000000b ;12 | |
DB 00000000b ;13 | |
DB 00000000b ;14 | |
DB 00000000b ;15 | |
;-------------;ъ | |
DB 00000000b ;0 | |
DB 00000000b ;1 | |
DB 00000000b ;2 | |
DB 00000000b ;3 | |
DB 00000000b ;4 | |
DB 11100000b ;5 | |
DB 00100000b ;6 | |
DB 00100000b ;7 | |
DB 00111100b ;8 | |
DB 00100010b ;9 | |
DB 00100010b ;10 | |
DB 00111100b ;11 | |
DB 00000000b ;12 | |
DB 00000000b ;13 | |
DB 00000000b ;14 | |
DB 00000000b ;15 | |
;-------------;ы | |
DB 00000000b ;0 | |
DB 00000000b ;1 | |
DB 00000000b ;2 | |
DB 00000000b ;3 | |
DB 00000000b ;4 | |
DB 01000001b ;5 | |
DB 01000001b ;6 | |
DB 01000001b ;7 | |
DB 01111001b ;8 | |
DB 01000101b ;9 | |
DB 01000101b ;10 | |
DB 01111001b ;11 | |
DB 00000000b ;12 | |
DB 00000000b ;13 | |
DB 00000000b ;14 | |
DB 00000000b ;15 | |
;-------------;ь | |
DB 00000000b ;0 | |
DB 00000000b ;1 | |
DB 00000000b ;2 | |
DB 00000000b ;3 | |
DB 00000000b ;4 | |
DB 01000000b ;5 | |
DB 01000000b ;6 | |
DB 01000000b ;7 | |
DB 01111100b ;8 | |
DB 01000010b ;9 | |
DB 01000010b ;10 | |
DB 01111100b ;11 | |
DB 00000000b ;12 | |
DB 00000000b ;13 | |
DB 00000000b ;14 | |
DB 00000000b ;15 | |
;-------------;э | |
DB 00000000b ;0 | |
DB 00000000b ;1 | |
DB 00000000b ;2 | |
DB 00000000b ;3 | |
DB 00000000b ;4 | |
DB 01111100b ;5 | |
DB 00000110b ;6 | |
DB 00000010b ;7 | |
DB 01111110b ;8 | |
DB 00000010b ;9 | |
DB 00000110b ;10 | |
DB 01111000b ;11 | |
DB 00000000b ;12 | |
DB 00000000b ;13 | |
DB 00000000b ;14 | |
DB 00000000b ;15 | |
;-------------;ю | |
DB 00000000b ;0 | |
DB 00000000b ;1 | |
DB 00000000b ;2 | |
DB 00000000b ;3 | |
DB 00000000b ;4 | |
DB 01001111b ;5 | |
DB 01011001b ;6 | |
DB 01010000b ;7 | |
DB 01110000b ;8 | |
DB 01010000b ;9 | |
DB 01011001b ;10 | |
DB 01001111b ;11 | |
DB 00000000b ;12 | |
DB 00000000b ;13 | |
DB 00000000b ;14 | |
DB 00000000b ;15 | |
;-------------;я | |
DB 00000000b ;0 | |
DB 00000000b ;1 | |
DB 00000000b ;2 | |
DB 00000000b ;3 | |
DB 00000000b ;4 | |
DB 00011110b ;5 | |
DB 00100010b ;6 | |
DB 00100010b ;7 | |
DB 00011110b ;8 | |
DB 00110010b ;9 | |
DB 00100010b ;10 | |
DB 01100010b ;11 | |
DB 00000000b ;12 | |
DB 00000000b ;13 | |
DB 00000000b ;14 | |
DB 00000000b ;15 | |
Font3: ;-------------;Ё | |
DB 00100100b ;0 | |
DB 00000000b ;1 | |
DB 00111111b ;2 | |
DB 00100000b ;3 | |
DB 00100000b ;4 | |
DB 00100000b ;5 | |
DB 00111111b ;6 | |
DB 00100000b ;7 | |
DB 00100000b ;8 | |
DB 00100000b ;9 | |
DB 00100000b ;10 | |
DB 00111111b ;11 | |
DB 00000000b ;12 | |
DB 00000000b ;13 | |
DB 00000000b ;14 | |
DB 00000000b ;15 | |
;-------------;ё | |
DB 00000000b ;0 | |
DB 00110110b ;1 | |
DB 00110110b ;2 | |
DB 00000000b ;3 | |
DB 00000000b ;4 | |
DB 00011110b ;5 | |
DB 00100011b ;6 | |
DB 01000001b ;7 | |
DB 01111111b ;8 | |
DB 01000000b ;9 | |
DB 01100000b ;10 | |
DB 00011111b ;11 | |
DB 00000000b ;12 | |
DB 00000000b ;13 | |
DB 00000000b ;14 | |
DB 00000000b ;15 | |
СОЗДАТЬ_GDT:;{ Создание первичной таблицы GDT | |
mov ax, 0x0400 | |
mov es, ax | |
; Очистить GDT (1024 элементов) | |
xor di, di | |
mov cx, 0x2000 | |
xor ax, ax | |
rep stosb | |
mov di, 8 | |
; ~600 kb кода, который может быть загружен | |
mov eax, 0x93FFF | |
mov ebx, ЗАЩИЩЕННЫЙ_РЕЖИМ ; начало | |
mov cx, 0x90 + 0x8 + 0x4000 ; DPL=0, PRESENT=0x80, BIT_SYSTEM=0x10, CODE_EXEC_ONLY=0x8, BIT_DEFAULT_SIZE_32=0x4000 | |
call СОЗДАТЬ_ДЕСКРИПТОР | |
; повтор сегмента, но уже для данных | |
mov eax, 0x93FFF | |
mov ebx, ЗАЩИЩЕННЫЙ_РЕЖИМ ; начало | |
mov cx, 0x90 + 0x2 + 0x4000 ; DATA_READ_WRITE=0x2 | |
call СОЗДАТЬ_ДЕСКРИПТОР | |
; сегмент стека (256 кб) | |
mov eax, 0x3FFFF | |
mov ebx, 0x100000 ; Начало в HI-mem | |
mov cx, 0x90 + 0x2 + 0x4000 ; DATA_READ_WRITE=0x2 | |
call СОЗДАТЬ_ДЕСКРИПТОР | |
; Память в целом (es) | |
mov eax, 0xFFFFF | |
xor ebx, ebx | |
mov cx, 0x90 + 0x2 + 0x8000 + 0x4000 ; GRANUL=0x8000 | |
call СОЗДАТЬ_ДЕСКРИПТОР | |
; Загрузка GDT [0x4000] | |
mov word [0x7C00], 0x1FFF | |
mov dword [0x7C02], 0x4000 | |
lgdt [0x7C00] | |
; Загрузка IDT | |
mov word [0x7C06], 0x7FF | |
mov dword [0x7C08], 0x6000 | |
lidt [0x7C06] | |
ret | |
;==============================================================================} | |
СОЗДАТЬ_ДЕСКРИПТОР:;{Создание дескриптора в реальном режиме | |
; -------------------------------------------------------- | |
; EAX - Лимит 24 | |
; EBX - Адрес 32 | |
; CX - Конфигурация | |
; ES:DI - Указатель на элемент GDT | |
; -------------------------------------------------------- | |
stosw ; limit | |
xchg eax, ebx | |
stosw ; address 0..15 | |
shr eax, 16 | |
stosb ; addr 16..23 | |
xchg eax, ebx | |
mov al, cl | |
stosb ; config low | |
shr eax, 16 | |
or al, ch | |
stosb ; config + limit | |
xchg eax, ebx | |
shr ax, 8 | |
stosb ; addr 24..31 | |
ret | |
;==============================================================================} | |
РАЗМЕР_КОДА_РЕАЛЬНОГО_РЕЖИМА = $ - РЕАЛЬНЫЙ_РЕЖИМ | |
;=============================================================================;} | |
ЗАЩИЩЕННЫЙ_РЕЖИМ :; { Защищенный режим | |
org 0 | |
use32 | |
.СТАРТ: | |
mov ax, 0x10 | |
mov ds, ax | |
mov ax, 0x18 | |
mov ss, ax | |
mov esp, 0x40000 | |
mov ax, 0x20 | |
mov es, ax | |
mov ax, 0 | |
mov fs, ax | |
mov gs, ax | |
; [ES:0B8000h] Адрес видеопамяти | |
;==============================================================================} | |
;---} | |
;---} | |
;=============================================================================== | |
;---{ ОСНОВНОЕ ТЕЛО ПРОГРАММЫ -ПРОГРАМИРОВАНИЕ: | |
;-ЖШРИФТ: | |
;-clGreen: | |
;---{ Описание | |
;---} | |
;---{ ПРограмма | |
Call ЭКРАН_80_25_ОЧИСТКА; | |
call МЫШ_ИНИЦИАЛИЗАЦИЯ; | |
.ПОВТОР: | |
mov ecx,37; | |
mov edx,10; | |
call ЭКРАН_80_25_КУРСОР_ECX_EDX; | |
mov esi,ЭКРАН_80_25_ПРИВЕСТВИЕ; | |
call ЭКРАН_80_25_ВЫВОД_СТРОКИ_ESI; | |
call МЫШ_ЧТЕНИЕ; | |
;--------------------------------;{ Вывод Информации кнопки | |
mov ecx,35 ; | |
mov edx,11 ; | |
call ЭКРАН_80_25_КУРСОР_ECX_EDX ; | |
mov ESI,.TEXTMOUSEI ; | |
call ЭКРАН_80_25_ВЫВОД_СТРОКИ_ESI; | |
mov EAX,[МЫШКА_I1] ; | |
call ЭКРАН_80_25_ВЫВОД_ЧИСЛА_EAX ; | |
mov ESI,.TEXTPROBEL ; | |
call ЭКРАН_80_25_ВЫВОД_СТРОКИ_ESI; | |
;--------------------------------;} | |
;--------------------------------;{ Вывод координат по X | |
mov ecx,35 ; | |
mov edx,12 ; | |
call ЭКРАН_80_25_КУРСОР_ECX_EDX ; | |
mov ESI,.TEXTMOUSEX ; | |
call ЭКРАН_80_25_ВЫВОД_СТРОКИ_ESI; | |
mov EAX,[МЫШКА_X1] ; | |
call ЭКРАН_80_25_ВЫВОД_ЧИСЛА_EAX ; | |
mov ESI,.TEXTPROBEL ; | |
call ЭКРАН_80_25_ВЫВОД_СТРОКИ_ESI; | |
;--------------------------------;} | |
;--------------------------------;{ Вывод координат по Y | |
mov ecx,35 ; | |
mov edx,13 ; | |
call ЭКРАН_80_25_КУРСОР_ECX_EDX ; | |
mov ESI,.TEXTMOUSEY ; | |
call ЭКРАН_80_25_ВЫВОД_СТРОКИ_ESI; | |
mov EAX,[МЫШКА_Y1] ; | |
call ЭКРАН_80_25_ВЫВОД_ЧИСЛА_EAX ; | |
mov ESI,.TEXTPROBEL ; | |
call ЭКРАН_80_25_ВЫВОД_СТРОКИ_ESI; | |
;--------------------------------;} | |
jmp .ПОВТОР; | |
;---} | |
;---{ Переменные | |
.TEXTPROBEL: db ' ',0; | |
.TEXTMOUSEX: db 'Mouse X=',0; | |
.TEXTMOUSEY: db 'Mouse Y=',0; | |
.TEXTMOUSEI: db 'Mouse Info=',0; | |
;---} | |
;==============================================================================} | |
;---{ ФУНКЦИИ ДЛЯ РАБОТЫ C ВСТРОЕНЫМ ЯЗКОМ ПРОГРАМИРОВАНИЯ | |
;---} | |
;---{ ФУНКЦИИ ДЛЯ РАБОТЫ C ЭЛЕМЕНТАМИ | |
;---{ Описание | |
; Универсальный элемент для создания окон и различных обьектов | |
; Базовый класс для разработки OS | |
; | |
;---} | |
;---{ Чтение значения полей элементов | |
ЭЛЕ_ТИП:;{ Возвращает в EAX Тип элемента EDI | |
push EDI ; | |
xor EAX,EAX ; | |
add EDI,ЭЛ_ТИП; | |
mov AL,[EDI] ; | |
pop DI ; | |
ret ; | |
;==============================================================================} | |
ЭЛЕ_ФУН:;{ Возвращает в EAX Являеться ли элемента EDI функцией устанавливает флаг Z если это функция | |
push EDI ; | |
xor EAX,EAX ; | |
add EDI,ЭЛ_ФУН; | |
mov AL,[EDI] ; | |
test AL,AL ; | |
pop DI ; | |
ret ; | |
;==============================================================================} | |
ЭЛЕ_ИМЯ:;{ Возвращает в EAX ИМЯ элемента EDI | |
push EDI ; | |
add EDI,ЭЛ_ИМЯ; | |
mov EAX,[EDI] ; | |
pop EDI ; | |
ret ; | |
;==============================================================================} | |
ЭЛЕ_БУК:;{ Возвращает в EAX первую букву ИМЯ элемента EDI | |
push EDI ; | |
call ЭЛЕ_ИМЯ ; | |
mov EDI,EAX ; | |
mov AL,[EDI]; | |
pop EDI ; | |
ret; | |
;==============================================================================} | |
ЭЛЕ_ЗНА:;{ Возвращает в EAX Значение элемента EDI | |
push EDI ; | |
add EDI,ЭЛ_ЗНА; | |
mov EAX,[EDI] ; | |
test EAX,EAX ; | |
pop EDI ; | |
ret ; | |
;==============================================================================} | |
ЭЛЕ_ПРЕ:;{ Возвращает в EAX Предыдущий элемент элемента EDI | |
push EDI ; | |
add EDI,ЭЛ_ПРЕ; | |
mov EAX,[EDI] ; | |
test EAX,EAX ; | |
pop EDI ; | |
ret ; | |
;==============================================================================} | |
ЭЛЕ_СЛЕ:;{ Возвращает в EAX Следующий элемент элемента EDI | |
push EDI ; | |
add EDI,ЭЛ_СЛЕ; | |
mov EAX,[EDI] ; | |
test EAX,EAX ; | |
pop EDI ; | |
ret ; | |
;==============================================================================} | |
ЭЛЕ_РОД:;{ Возвращает в EAX Родительский элемент элемента EDI | |
push EDI ; | |
add EDI,ЭЛ_РОД; | |
mov EAX,[EDI] ; | |
test EAX,EAX ; | |
pop EDI ; | |
ret ; | |
;==============================================================================} | |
ЭЛЕ_ВЛО:;{ Возвращает в EAX Первый вложеный элемент элемента EDI | |
push EDI ; | |
add EDI,ЭЛ_ВЛО; | |
mov EAX,[EDI] ; | |
test EAX,EAX ; | |
pop Edi ; | |
ret ; | |
;==============================================================================} | |
ЭЛЕ_КОД:;{ Возвращает в EAX Код элемент элемента EDI | |
push di ; | |
add DI,ЭЛ_КОД; | |
mov ax,[di] ; | |
test ax,ax ; | |
pop di ; | |
ret ; | |
;==============================================================================} | |
;---} | |
;---{ Функции для работы с элементами | |
;---} | |
;---{ СТРУКТУРА ЭЛЕМЕНТА | |
ЭЛ_ТИП = 0 ;// ТИп элементы | |
ЭЛ_ФУН = 1 ;// Если это функция Участвует ли в поиске | |
ЭЛ_ИМЯ = 4 ;// Название элемента | |
ЭЛ_ЗНА = 8 ;// Адрес значения | |
ЭЛ_КОД = 12;// Код имени элемента | |
ЭЛ_РОД = 16;// Адрес родительского элемента | |
ЭЛ_ПРЕ = 20;// Адрес предыдущего элемента | |
ЭЛ_СЛЕ = 24;// Адрес Следующего элемента | |
ЭЛ_ВЛО = 28;// Адрес первого элемента вложеного списка | |
;---} | |
;---} | |
;---{ ФУНКЦИИ ДЛЯ РАБОТЫ С СТРОКАМИ | |
ВЕРНУТЬ_КОНЕЦ_СТРОКИ_ESI_В_ESI :;{ | |
push Ecx; | |
.ЦИКЛ: mov cl,[Esi]; | |
test cl,cl ;// Если конец строки то выход | |
JZ .КЦИКЛ ; | |
inc EsI ;// Увеличиывкем указатель на читаемый символ | |
Jmp .ЦИКЛ ; | |
.КЦИКЛ: | |
pop Ecx; | |
ret ; | |
;==============================================================================} | |
ДОБАВИТЬ_БУКВУ_AL_В_КОНЕЦ_СТРОКИ_ESI :;{ | |
push ESi ; | |
Call ВЕРНУТЬ_КОНЕЦ_СТРОКИ_ESI_В_ESI;// Перемещаемся в конец строки | |
mov [ESI],AL ;// Записываем символ вместо 0 конца строки | |
inc ESI ;// Увеличиваем указатель на читаемый символ | |
mov byte [ESI],0 ;// Дописываем ноль в конец строки | |
pop ESi ; | |
ret ; | |
;==============================================================================} | |
ДОБАВИТЬ_ЧИСЛО_EAX_В_КОНЕЦ_СТРОКИ_ESI:;{ | |
pushad | |
MOV BX,10 ;// 10 система счисления | |
xor ecx,ecx ; | |
.ЦИКЛ1: ;------------ | |
xor eDX,eDX; | |
DIV eBX ; | |
push edx ;// Сохраняем остаток от деления в стек | |
inc ecx ; | |
test eax,eax; | |
jnz .ЦИКЛ1 ; | |
;------------ | |
.ЦИКЛ2: ;-----------; | |
pop edx ; | |
add dl,'0' ; | |
mov al,dl ; | |
call ДОБАВИТЬ_БУКВУ_AL_В_КОНЕЦ_СТРОКИ_ESI; | |
dec ecx ; | |
test ecx,ecx; | |
jnz .ЦИКЛ2 ; | |
;-----------; | |
popad | |
ret; | |
;==============================================================================} | |
;---} | |
;---{ ФУНКЦИИ ДЛЯ РАБОТЫ С МЫШКОЙ НА НИЗКОМ УРОВНЕ | |
;---{ Описание | |
; Мудуль для работы с клавиатурой и мышкой PS2 | |
; Сперва запускаем инициализацию МЫШ_ИНИЦИАЛИЗАЦИЯ | |
; затем можно использовать МЫШ_ЧТЕНИЕ для чтения данных с мышки и клавиатуры | |
; Результат чтения записываеться в переменные их 2 копии предыдущие и новое значение для удобства | |
;---} | |
;---{ Функции для работы с PS2 | |
МЫШ_ИНИЦИАЛИЗАЦИЯ:;{ | |
pushad; | |
; Включает мыш | |
mov al,0A8h; | |
Call PS2_ЗАПИСЬ_AL_В_ПОРТ_64; | |
; Установка стандартных настроек | |
mov al,0xD4 | |
Call PS2_ЗАПИСЬ_AL_В_ПОРТ_64; | |
mov al,0xF6 | |
Call PS2_ЗАПИСЬ_AL_В_ПОРТ_60; | |
; Включение отправки отчетов | |
mov al,0xD4 | |
Call PS2_ЗАПИСЬ_AL_В_ПОРТ_64; | |
mov al,0xF4 | |
Call PS2_ЗАПИСЬ_AL_В_ПОРТ_60; | |
popad; | |
ret; | |
;==============================================================================} | |
МЫШ_ЧТЕНИЕ :;{ | |
pushad; | |
call PS2_ЧТЕНИЕ_64ПОРТА_В_AL; | |
test al,100000b; | |
jnz .ЧИТАТЬ_МЫШ; | |
mov eax,[КНОПКА_1]; | |
mov [КНОПКА_2],eax; | |
call PS2_ЧТЕНИЕ_60ПОРТА_В_AL | |
mov [КНОПКА_1],al; | |
jmp .ВЫХОД; | |
.ЧИТАТЬ_МЫШ: | |
;{ Запоминаем предыдущие координаты | |
mov eax,[МЫШКА_I1]; | |
mov [МЫШКА_I2],eax; | |
mov eax,[МЫШКА_X1]; | |
mov [МЫШКА_X2],eax; | |
mov eax,[МЫШКА_Y1]; | |
mov [МЫШКА_Y2],eax; | |
;-----------------} | |
call PS2_ЧТЕНИЕ_60ПОРТА_В_AL; // Чтение информационого байта от мышки | |
mov [МЫШКА_I1],al; | |
;{Вычисление координаты по X | |
;--------------; | |
not al ; | |
mov cl,al ; // Запоминаем в CL состтояние инфоромационго байта мышки | |
SHL al,3 ; | |
SHR al,7 ; | |
mov ah,al ; | |
;--------------; | |
call PS2_ЧТЕНИЕ_60ПОРТА_В_AL; | |
sub ax,128; | |
mov dl,3; | |
div dl; | |
mov ah,0 | |
mov [МЫШКА_X1],eax; | |
;---------------------------} | |
;{Вычисление координаты по Y | |
;--------------; | |
mov al,cl ; | |
SHL al,2 ; | |
SHR al,7 ; | |
mov ah,al ; | |
;--------------; | |
call PS2_ЧТЕНИЕ_60ПОРТА_В_AL; | |
sub ax,128; | |
mov dl,10; | |
div dl; | |
mov ah,0 | |
mov edx,0; | |
mov edx,25 | |
sub dx,ax; | |
mov eax,edx; | |
mov [МЫШКА_Y1],eax; | |
;----------------------------} | |
;{Вырисовка Мышки | |
;// Стираем предыдущее положение мышки | |
mov ecx,[МЫШКА_X2]; | |
mov edx,[МЫШКА_Y2]; | |
mov Ah,[ЭКРАН_80_25_ФОН]; | |
mov Al,0; | |
call ЭКРАН_80_25_ВЫВОД_AX_ECX_EDX; | |
;// РИсуем мышку | |
mov ecx,[МЫШКА_X1]; | |
mov edx,[МЫШКА_Y1]; | |
mov Ah,10110000b; | |
mov Al,0; | |
call ЭКРАН_80_25_ВЫВОД_AX_ECX_EDX; | |
;--------------------------------} | |
.ВЫХОД: | |
popad; | |
ret; | |
;==============================================================================} | |
PS2_ЗАПИСЬ_AL_В_ПОРТ_64 :;{ | |
pushad; | |
mov cl,al; | |
.ЦИКЛ: | |
in AL,0x64 | |
test AL,2; // 000 000 10 b | |
jz .ВЫХОД; | |
jmp .ЦИКЛ; | |
.ВЫХОД: | |
mov al,cl; | |
out 0x64,al; | |
popad; | |
ret; | |
;==============================================================================} | |
PS2_ЗАПИСЬ_AL_В_ПОРТ_60 :;{ | |
pushad; | |
MOV CL,AL; | |
.ЦИКЛ: | |
in AL,64h | |
test AL,2; | |
jz .ВЫХОД; | |
jmp .ЦИКЛ; | |
.ВЫХОД: | |
mov al,CL; | |
out 0x60,al; | |
popad; | |
ret; | |
;==============================================================================} | |
PS2_ЧТЕНИЕ_60ПОРТА_В_AL :;{ | |
;.ЦИКЛ: | |
; in aL,64h; | |
; test aL,1; | |
; jnz .ВЫХОД; | |
; jmp .ЦИКЛ; | |
;.ВЫХОД: | |
in al,60h | |
ret; | |
;==============================================================================} | |
PS2_ЧТЕНИЕ_64ПОРТА_В_AL :;{ | |
.ЦИКЛ: | |
in aL,64h; | |
test aL,1; | |
jnz .ВЫХОД; | |
jmp .ЦИКЛ; | |
.ВЫХОД: | |
ret; | |
;==============================================================================} | |
;---} | |
;---{ Переменные для работы с PS2 | |
;// переменные для работы с мышкой на низком уровне | |
КНОПКА_1 : DD 0; // Скан код нажатой кнопки клавиатуры | |
МЫШКА_I1 : DD 0; // Информация о мышке Нажатые кнопки и так далее | |
МЫШКА_X1 : DD 0; | |
МЫШКА_Y1 : DD 0; | |
;// ПРедыдущие значение данных от PS/2 | |
КНОПКА_2 : DD 0; // Скан код нажатой кнопки клавиатуры | |
МЫШКА_I2 : DD 0; // Информация о мышке Нажатые кнопки и так далее | |
МЫШКА_X2 : DD 0; | |
МЫШКА_Y2 : DD 0; | |
;---} | |
;---} | |
;---{ ФУНКЦИИ ДЛЯ РАБОТЫ С ЭКРАНОМ НА НИЗКОМ УРОВНЕ | |
;---{ Описание | |
; Модуль для работы с экраном 80 на 25 | |
; процедура ЭКРАН_80_25_ВЫВОД_ЧИСЛА_EAX использет модуль для работы со строками | |
; Функция перевода числа в строку ЗАВИСИМОСТИ | |
; Использет 3 Функции из модуля для работы со строками | |
; ДОБАВИТЬ_ЧИСЛО_EAX_В_КОНЕЦ_СТРОКИ_ESI | |
; ДОБАВИТЬ_БУКВУ_AL_В_КОНЕЦ_СТРОКИ_ESI | |
; ВЕРНУТЬ_КОНЕЦ_СТРОКИ_ESI_В_ESI | |
;---} | |
;---{ Функции для работы с экраном в текстовом режиме 80 на 25 | |
ЭКРАН_80_25_КУРСОР_ECX_EDX :;{ Устанавливает курсор в заданую позицию | |
pushad; | |
cmp ecx,79; | |
jb .ДАЛЕЕ1; | |
mov ecx,0; | |
.ДАЛЕЕ1: | |
cmp edx,24; | |
jb .ДАЛЕЕ2; | |
mov edx,0; | |
.ДАЛЕЕ2: | |
mov [ЭКРАН_80_25_КУРСОР_X],ecx; | |
mov [ЭКРАН_80_25_КУРСОР_Y],eDx; | |
popad; | |
ret; | |
;==============================================================================} | |
ЭКРАН_80_25_ОЧИСТКА :;{ Очистка экрана | |
pushad | |
;------------------------; | |
mov ecx,2000 ; // Для счета заполняемых символов | |
mov al,' ' ; // Записываем символ | |
mov ah,[ЭКРАН_80_25_ФОН]; // Атрибуты экрана | |
;------------------------; | |
mov EDI,0B8000h ; // Настраиваем регистр ES на начало видеопаямити | |
;------------------------; | |
.ЦИКЛ: test ecx,ecx ; // Проверяем на 0 пока CX<>0 | |
jz .КЦИКЛ ; // Если CX=0 ВЫход | |
MOV [ES:EDI],al ; // Записываем код выводимого символа | |
inc EDI ; // Увеличиваем адрес | |
MOV [ES:EDI],ah ; // Записываем атрибуты | |
inc EDI ; // Увеличиваем адрес | |
dec ecx ; // Уменьшаем счетчик | |
jmp .ЦИКЛ ; // Повторить | |
.КЦИКЛ: ;------------------------; | |
popad ; | |
ret ; | |
;==============================================================================} | |
ЭКРАН_80_25_ВЫВОД_AX_ECX_EDX:;{ Функция Вывод Символ AL с атрибутами AH если AL=0 то выводит тока атрибуты | |
pushad; | |
mov ebx,eax ; // Сохраняю выводимый символ и атрибуты в регистр BX | |
;-------------------; | |
mov EDI,0B8000h ; Настраиваем регистр ES на началово видеопаямити | |
;-------------------; | |
cmp ecx,79; | |
ja .ВЫХОД; | |
cmp edx,24; | |
ja .ВЫХОД; | |
;-------------------; | |
mov eax,2 ; (КОД,АТРИБУТ) 2 байта на 1 символ | |
mul cl ; Умнажем координату по X на 2 | |
mov ecx,eax ; Запоминаем | |
mov eax,160 ; Помещаем в регистр AX длину 1 строки на экране | |
mul dl ; | |
ADD eAX,eCX ; | |
ADD EDI,Eax ; | |
test bl,bl ; | |
jz .ДАЛЕЕ ; | |
MOV byte[ES:EDI],bl; (Символ) | |
.ДАЛЕЕ: inc EDI ; | |
MOV byte[ES:EDI],bh; (Цвет Атрибут) | |
;-------------------; | |
.ВЫХОД: | |
popad ; | |
ret ; | |
;==============================================================================} | |
ЭКРАН_80_25_СЛЕД_ПОЗИЦИЯ :;{ Перевод курсора в следующию позицию | |
pushad; | |
mov ecx,[ЭКРАН_80_25_КУРСОР_X]; | |
mov eDx,[ЭКРАН_80_25_КУРСОР_Y]; | |
cmp ecx,79 ; | |
jae .СЛЕД_СТРОКА; | |
inc ecx ; | |
jmp .ВЫХОД; | |
.СЛЕД_СТРОКА: mov ecx,0; | |
inc edx; | |
cmp edx,24; | |
jb .ВЫХОД; | |
mov ecx,0; | |
mov edx,0; | |
.ВЫХОД: | |
mov [ЭКРАН_80_25_КУРСОР_X],ecx; | |
mov [ЭКРАН_80_25_КУРСОР_Y],eDx; | |
popad; | |
ret; | |
;==============================================================================} | |
ЭКРАН_80_25_СЛЕД_СТРОКА :;{ Перевод курсора НА следующию строку | |
pushad; | |
mov ecx,[ЭКРАН_80_25_КУРСОР_X]; | |
mov eDx,[ЭКРАН_80_25_КУРСОР_Y]; | |
.СЛЕД_СТРОКА: mov ecx,0; | |
inc edx; | |
cmp edx,24; | |
jb .ВЫХОД; | |
mov ecx,0; | |
mov edx,0; | |
.ВЫХОД: | |
mov [ЭКРАН_80_25_КУРСОР_X],ecx; | |
mov [ЭКРАН_80_25_КУРСОР_X],eDx; | |
popad; | |
ret; | |
;==============================================================================} | |
ЭКРАН_80_25_ВЫВОД_БУКВЫ_AL :;{ Выводит символ в консоль | |
pushad; | |
cmp al,13; | |
jnz .ДАЛЕЕ; | |
call ЭКРАН_80_25_СЛЕД_СТРОКА; | |
jmp .ВЫХОД; | |
.ДАЛЕЕ: | |
cmp al,' '; | |
jb .ВЫХОД; | |
mov ecx,[ЭКРАН_80_25_КУРСОР_X]; | |
mov edx,[ЭКРАН_80_25_КУРСОР_Y]; | |
call ЭКРАН_80_25_ВЫВОД_AX_ECX_EDX; | |
call ЭКРАН_80_25_СЛЕД_ПОЗИЦИЯ; | |
.ВЫХОД: | |
popad; | |
ret; | |
;==============================================================================} | |
ЭКРАН_80_25_ВЫВОД_СТРОКИ_ESI:;{ Выводит строку в консоль | |
pushad; | |
mov ah,[ЭКРАН_80_25_ФОН]; | |
.ЦИКЛ: mov al,[esi]; | |
test al,al; | |
jz .КЦИКЛ; | |
call ЭКРАН_80_25_ВЫВОД_БУКВЫ_AL; | |
inc esi; | |
jmp .ЦИКЛ; | |
.КЦИКЛ: | |
popad; | |
ret; | |
;==============================================================================} | |
ЭКРАН_80_25_ВЫВОД_ЧИСЛА_EAX :;{ Выводит строку в консоль | |
pushad; | |
mov ESI,.БУФФЕР; | |
mov Byte [ESI],0; | |
call ДОБАВИТЬ_ЧИСЛО_EAX_В_КОНЕЦ_СТРОКИ_ESI; | |
call ЭКРАН_80_25_ВЫВОД_СТРОКИ_ESI; | |
popad; | |
ret; | |
.БУФФЕР: DB ' ',0; | |
;==============================================================================} | |
;---} | |
;---{ Переменные | |
ЭКРАН_80_25_КУРСОР_X : DD 0; | |
ЭКРАН_80_25_КУРСОР_Y : DD 0; | |
ЭКРАН_80_25_ФОН : DB 01011111b; | |
;---} | |
;---} | |
;---{ ФУНКЦИИ ДЛЯ РАБОТЫ С ПАМЯТЬЮ НА НИЗКОМ УРОВНЕ | |
;---{ Описание | |
; ДЛя работы с модулем необходимо указать НАЧ_КУЧИ адрес начала кучи | |
; и КОН_КУЧИ адрес конца кучи | |
; | |
; | |
;---} | |
;---{ Функции для работы с памятью | |
ОЧИСТКА_ПАМЯТИ_С_ESI_ДО_EDI :;{ Очистка памяти с адреса ESI до адреса EDI Уже не входит в очистку | |
push ESI ;// Сохранение содержимого всех регистров | |
.ЦИКЛ:;-----------------; | |
CMP ESI,EDI ;// Чтение адрсеа окончания кучи | |
JAE .КЦИК ;// Если SI>DI то выход | |
mov Byte [ESI],0;// Запись нуля по адресу SI | |
INC ESI ;// Увеличиываем SI | |
JMP .ЦИКЛ ;// Повторить | |
.КЦИК:;-----------------; | |
pop ESI ;// Вотсановление всех регистров | |
ret ;// Выход из подпрограммы | |
;==============================================================================} | |
ОСВОБОЖДЕНИЕ_УЧАСТКА_ПАМЯТИ_EDI :;{ Освобождение участка памяти EDI Адрес полученый ранее например с помощбю функции ПАМЯТЬ_ВЫДЕЛИТЬ | |
pushad ; | |
SUB EDI,5 ;// Переходим к байту занятости | |
MOV Byte [DI],0 ;// И обнуляем его | |
inc Edi ; | |
mov Ecx,[Edi] ; // Читаем размер участка | |
add Edi,4 ; // Переходим к первому байту участка памяти | |
mov Esi,Edi ; //устанавливаем начало стираемого участка памяти | |
add Edi,ECX ; // устанавливаем конец стираемого участка памяти | |
inc Edi ; | |
call ОЧИСТКА_ПАМЯТИ_С_ESI_ДО_EDI; | |
popad ; | |
RET ; | |
;==============================================================================} | |
ВЫДЕЛИТЬ_УЧАСТОК_ПАМЯТИ_EDI_РАЗ_EDI:;{ Выделяет участок памяти размером EDI Возвращает адрес выделеного участка в DI | |
PUSHAD; | |
MOV ESI,[НАЧ_КУЧИ]; Читаем адрес начала кучи | |
.ЦИКЛ: ;//---------------- | |
MOV AL,[ESI] ; Читаем флаг занятости | |
INC ESI ; Увеличиваем указатель | |
MOV ECX,[ESI] ; Читаем размер участка памяти | |
TEST AL,AL ; Проверка флага занятости | |
JNZ .СЛЕ_УЧА ; Если не равно нулю переходим к следующему участку | |
TEST ECX,ECX ; Размер выделеного участка памяти не может быть равен нулю по этому ноль исполльзуем как признак конца используемой части кучи | |
JZ .СВОБ ; Участок подходит если это последний участок в куче с нулевым размерм | |
CMP ECX,EDI ; Сравниваем размер участка CX и размер запрашиваемого участка DI | |
JZ .СВОБ ; Участок подходит если размер участка соотвествующий и флаг занятости AL равен нулю | |
.СЛЕ_УЧА: | |
ADD ECX,4 ; Переход к след участку размер этого участка + 2 байта попадаем на байт занятости следующего участка | |
ADD ESI,ECX ; | |
JMP .ЦИКЛ ; | |
.СВОБ: ;------------------; | |
DEC ESI ; | |
MOV byte [ESI],1 ; // Устанавливаем флаг занятости | |
INC ESI ; // Переходим к указанию размера учатка | |
MOV [ESI],EDI ; // Записываем размер участка | |
ADD ESI,4 ; // прибавляем 4 получаем адрес Выделеного участка | |
;------------------; | |
POP EDI ; | |
PUSH ESI ; // EDI на вершие стека всегда | |
POPAD ; | |
RET ; | |
;==============================================================================} | |
;---} | |
;---{ Переменные | |
НАЧ_КУЧИ : DW 0 ;// Адрес начала кучи | |
КОН_КУЧИ : DW 0 ;// Адрес Окончания Кучи | |
;---} | |
;---} | |
;---{ ЗАВЕРШЕНИЕ ОПИСАНИЯ ПРОЦЕДУР И ФУНКЦИЙ ;-КОНЕЦ: | |
;---} | |
;---{ ПЕРЕМЕННЫЕ -ПЕРЕМЕННЫЕ: | |
;-НШРИФТ: | |
;-clBlue: | |
ЭКРАН_80_25_ПРИВЕСТВИЕ: DB 'Tim OS ПРИВЕТ привет',0; | |
;-КОНЕЦ: | |
;==============================================================================} | |
;=============================================================================== | |
;---{ ЗАВЕРШАЮЩАЯ ЧАСТЬ ПРОГРАММЫ | |
КОНЕЦ_ПРОГРАММЫ :;// Использеться для задания адреса начала кучи | |
; Размер кода защищенного режима Реального кода Бут-сектора | |
times 1474560 - ($ - ЗАЩИЩЕННЫЙ_РЕЖИМ.СТАРТ) - РАЗМЕР_КОДА_РЕАЛЬНОГО_РЕЖИМА - 0x200 db 0x90 | |
;---} | |
;---{ МНЕМОНИКИ -МНЕМОНИКИ: | |
;-ЖШРИФТ: | |
;-clBlack: | |
;MOV: | |
;ADD: | |
;SUB: | |
;CALL: | |
;JMP: | |
;JZ: | |
;JNZ: | |
;JA: | |
;JB: | |
;JAE: | |
;JBE: | |
;RET: | |
;PUSHAD: | |
;POPAD: | |
;POP: | |
;PUSH: | |
;TEST: | |
;CMP: | |
;INC: | |
;DEC: | |
;ORG: | |
;BYTE: | |
;WORD: | |
;XOR: | |
;SHL: | |
;SHR: | |
;-КОНЕЦ: | |
;==============================================================================} | |
;---{ РЕГИСТРЫ -РЕГИСТРЫ: | |
;-ЖШРИФТ: | |
;-clBlue: | |
;AL: | |
;AH: | |
;AX: | |
;BL: | |
;BH: | |
;BX: | |
;CL: | |
;CH: | |
;CX: | |
;DL: | |
;DH: | |
;DX: | |
;EAX: | |
;EBX: | |
;ECX: | |
;EDX: | |
;ESI: | |
;EDI: | |
;SI: | |
;DI: | |
;ES: | |
;-КОНЕЦ: | |
;==============================================================================} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
l