Created
September 16, 2015 20:06
-
-
Save MisterTimur/887861de6149288457e8 to your computer and use it in GitHub Desktop.
mt.asm
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
OS16 = 1; | |
ПЛАТФОРМА = OS16; | |
IF (ПЛАТФОРМА = OS16) ;{ ЗАГРУЗОЧНЫЙ СЕКТОР ДЛЯ 16 БИТ | |
ЗАГРУЗОЧНЫЙ_СЕКТОР: | |
;--------------------; Настройка сегментных регистров | |
cli ; запрещаем прерывания | |
xor ax,ax ; обнуляем регистр ах | |
mov ds,ax ; настраиваем сегмент ds данных на нулевой адрес | |
mov es,ax ; настраиваем сегмент es на нулевой адрес | |
mov ss,ax ; настраиваем сегмент ss стека на нулевой адрес | |
mov sp,0FFFFh ; сегмент sp указывает на текущую вершину стека | |
sti ; разрешаем прерывания | |
;--------------------; | |
;--------------------; DL Номер Диска прередается при запуске загрузочного сектора из биос | |
mov dh, 0 ; головка 1 | |
mov ch, 0 ; дорожка | |
mov cl, 2 ; 2-й сектор | |
mov ax, 0000h ; Адрес сегмента куда загружаем | |
mov es, ax ; Адрес куда загружаем | |
mov bx, 1000h ; Адрес куда загружаем | |
mov al, 17 ; кол-во читаемых секторов Не забываем указывать | |
mov ah, 2h ; Номер Функции в биос для чтения с диска | |
int 13h ; Загружаем первыую часть программы 17 секторов так как первый сектор это загрузочный а всего в 1 дорожке 18 секторов | |
;--------------------; | |
;--------------------; DL Номер Диска прередается при запуске загрузочного сектора из биос | |
mov dh, 1 ; головка 2 | |
mov ch, 0 ; дорожка | |
mov cl, 1 ; 1-й сектор | |
mov ax, 0000h ; Адрес сегмента куда загружаем | |
mov es, ax ; Адрес куда загружаем | |
mov bx, 1000h+8704 ; Адрес куда загружаем первые 17 секторов уже загружены по этому +8704 | |
mov al, 18 ; кол-во читаемых секторов Не забываем указывать | |
mov ah, 2h ; Номер Функции в биос для чтения с диска | |
int 13h ; Прерывание для работы с диском | |
;--------------------; | |
jmp far 0:1000h ; | |
times 0x200 - 2 - ($ - ЗАГРУЗОЧНЫЙ_СЕКТОР) db 0x90 | |
db 055h, 0AAh ; | |
ORG 1000h ; { Адрес размещения программы 0 Сегмент 1000h} | |
use16 ; | |
END IF ; | |
;--------------------} | |
IF (ПЛАТФОРМА = OS16) ;{ ОСНОВНОЕ ТЕЛО ПРОГРАММЫ | |
ЦИКЛ:;------------------------; | |
Call ЭКРАН_80_25_ОЧИСТКА; | |
jmp ЦИКЛ ; | |
END IF ; | |
;------------------------; | |
;==============================================================================} | |
IF (ПЛАТФОРМА = OS16) ;{ ОЧИСТКА ЭКРАНА | |
ЭКРАН_80_25_ОЧИСТКА : | |
pushad | |
;------------------------; | |
mov AX,0B800h ; Настраиваем регистр ES на началово видеопаямити | |
mov ES,AX ; | |
mov DI,0h ; | |
;------------------------; | |
mov cx,2000 ; // Для счета заполняемых символов | |
mov al,' ' ; // Записываем символ | |
mov ah,11111111b ; // Атрибуты экрана | |
;------------------------; | |
.ЦИКЛ: test cx,cx ; // Проверяем на 0 пока CX<>0 | |
jz .КЦИКЛ ; // Если CX=0 ВЫход | |
MOV [ES:DI],al ; // Записываем код выводимого символа | |
inc EDI ; // Увеличиваем адрес | |
MOV [ES:DI],ah ; // Записываем атрибуты | |
inc DI ; // Увеличиваем адрес | |
dec cx ; // Уменьшаем счетчик | |
jmp .ЦИКЛ ; // Повторить | |
.КЦИКЛ: ;------------------------; | |
popad ; | |
ret ; | |
END IF ; | |
;==============================================================================} | |
IF (ПЛАТФОРМА = OS16) ;{ КОНЕЦ ПРОГРАММЫ ДЛЯ 16 БИТ | |
times 1474560 - ($ - 1000h + 200h) db 0; | |
END IF | |
;==============================================================================} | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment