Ядро операционной системы — набор системных функций.
Основу операционной системы Windows 95 — Windows XP составляет набор системных функций, содержащихся в файлах с расширением *.DLL, которые располагаются в системных дирректориях … Windows\System, System32, SysWOW64 (для 64 битных версий операционок) — так называемый Win API. К слову, в Windows 10 поддержка Win API реализована практически в полном объёме, хотя ядро системы несколько изменилось). В MS-DOS ядро также состоит из системных функций, которые называются прерывания DOS. Ну, если точно, то есть прерывания DOS, а есть прерывания BIOS (связаны с управлением компьютерным железом, определённые прерывания DOS можно реализовать через прерывания BIOS), да и понятие ядра системы можно расширить… Для наших целей и на данный момент отбросим усложнения в сторону! Далее мы будем использовать общее понятие для всех прерываний: прерывания DOS.
Прерывания DOS.
Прерывание имеет вид: int [номер прерывания], например: INT 21h.
Основные функции MS-DOS вызываются с помощью прерывания INT 21h, однако MS-DOS использует и другие прерывания (INT 20h , INT 25h , INT 26h , INT 27h , INT 28h , INT 2Eh и др.).
Функции прерывания INT 21h делят на группы в зависимости от выполняемых ими задач и особенностей выполнения этих задач. Одно и тоже действие иногда можно осуществить при помощи различных прерываний различными способами.
Прерывание не имеет смыслового названия, но каждой функции присвоен свой номер. Номер функции при вызове прерывания INT 21h задается через регистр AH. Согласно этому номеру можно выяснить предназначение функции, её параметры.
Параметры (in, out) передаются через регистры либо пары регистров (например: BX, DX, CX, BL:CX, DS:DX, и т.д.). Возвращаемое значение (return) передаётся через AX.
Пример:
1 2 3 4 5 6 7 8 9 10 | ;Выводим на консоль текст Hello, My Friend! с переводом строки mov dx,offset message; Указатель на строку mov ah,09h; ah==09h, 09h - отобразить строку. int 21h ..... message db "Hello, My Friend!",0Dh,0Ah,'$' ;Строка для вывода. ; '$' - терминатор строки ; 0Dh,0Ah - возврат коретки и перевод строки |
Самый лучший справочник прерываний DOS.
Где взять справочник прерываний DOS? Можно найти в Интернете, можно в соответствующей справочной литературе, но лучше всего воспользоваться справочником TECH Help! Очень удобное и полное руководство для программиста на ассемблере MS-DOS. В нашем архиве DOS1.RAR оно находится на диске D:\ в папке UTILS\T_HELP\. Запускается через XVIEW.EXE.
Вид главного меню справочника T-HELP:
Ещё раз просмотрите код нашей программы goblin.com, обратите внимание на прерывания, изучите их при помощи программы T-HELP.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | ;goblin.asm .model tiny ; for COM .code ; code segment start org 100h ; offset in memory = 100h (for COM) start: main proc begin: mov ah,09h mov dx,offset prompt int 21h inpt: mov ah,01h int 21h cmp al,'m' je mode_man cmp al,'w' je mode_woman call goblin jmp begin mode_man: mov addrs,offset man jmp cont mode_woman: mov addrs,offset woman cont: call word ptr addrs mov ax,4c00h int 21h main endp man proc mov ah,09h mov dx,offset mes_man int 21h ret man endp woman proc mov ah,09h mov dx,offset mes_womn int 21h ret woman endp goblin proc mov ah,09h mov dx,offset mes_gobl int 21h ret goblin endp ;DATA addrs dw 0;for procedure adress prompt db 'Are you Man or Woman [m/w]? : $' mes_man db 0Dh,0Ah,"Hello, Strong Man!",0Dh,0Ah,'$' ;Строка для вывода. Вместо ASCII смвола '$' можно написать машинный код 24h mes_womn db 0Dh,0Ah,"Hello, Beautyful Woman!",0Dh,0Ah,'$' ;Строка для вывода. mes_gobl db 0Dh,0Ah,"Hello, Strong and Beautyful GOBLIN!",0Dh,0Ah,24h ;Строка для вывода. 24h = '$' . len = $ - mes_gobl end start |
Вы можете более детально рассмотреть прерывания DOS, экспериментируя с написанием собственного кода и штудируя справочник T-HELP.