Skip to content

Instantly share code, notes, and snippets.

@MisterTimur
Created September 16, 2015 20:06
Show Gist options
  • Save MisterTimur/887861de6149288457e8 to your computer and use it in GitHub Desktop.
Save MisterTimur/887861de6149288457e8 to your computer and use it in GitHub Desktop.
mt.asm
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