Направи си сам стартиращ CD # 2

@keypress:
xor брадва, брадва; прочетете ключа
int 16h

тест al, al; проверете дали разширен ASCII или не
jz @extended_scancode

@extended_scancode:
cmp ах, 48h; стрелка нагоре
jz MoveCursorUp

cmp ах, 50h; стрелка надолу
jz MoveCursorDown
jmp @keypress
оттегляне

При натискане на бутоните "нагоре" и "надолу" се извикват съответните процедури за преместване на курсора MoveCursorUp и MoveCursorDown.

; Процедура за показване на един символ
; dh, dl - ред, колона; bl - цвят; ал - символ

Символ за печат:
пуша
xor bh, bh
mov ah, 02h; задайте курсора
int 10h
mov ах, 09h; и покажете символа в ал на екрана
mov cx, 1
int 10h
попа
оттегляне

Трябва да организираме движението на курсора нагоре и надолу, докато е необходимо да ограничим движението на курсора, така че да не излиза извън границите на менюто. За да определите позицията на курсора, създайте променлива MenuItemSelected, която ще се променя всеки път, когато позицията на курсора се променя и ще показва номера на избрания елемент от менюто (започвайки от нула). За целта ни трябват още две променливи (по принцип те могат да бъдат обявени за константи) - MenuFirstItemY - позицията на първия елемент от менюто и MenuLastItemY - позицията на последния елемент от менюто по оста Y. Разбира се, би било по-удобно е да се посочи позицията на първия елемент и броя на елементите от менюто, но това ще доведе до увеличаване на кода и не е разумно да се преизчислява MenuLastItemY всеки път. Ако координатата на курсора е равна на една от крайните позиции, тогава няма смисъл да се преначертава. Имайте предвид, че номерирането на редове и колони започва от нула, а не от една.

PositionXY dw 0000h; в тази променлива ще съхраняваме координатите на курсора
MenuItemSelected db 00h
MenuFirstItemY db 00h
MenuLastItemY db 00h

MoveCursorUp:
пуша
mov dx, [PositionXY]
cmp dh, [MenuFirstItemY]; проверете дали курсорът е в крайно положение
jz @ 1; ако да, тогава преминете към края на процедурата
mov бл, 2; зелен цвят
mov al, “; изтрийте стария курсор, като напишете интервал на негово място
обадете се PrintSymbol
dec dh; намалете координатата Y на курсора, като по този начин я издигнете нагоре
mov al, '>'; в символ на курсора
обадете се PrintSymbol
mov [PositionXY], dx; запишете новите координати на курсора
sub dh, [MenuFirstItemY]; изчислете броя на избрания елемент от менюто
mov [MenuItemSelected], dh
@one:
попа
jmp @keypress

; При тази процедура всичко е същото, само координатата Y на курсора се увеличава с
мерна единица

MoveCursorDown:
пуша
mov dx, [PositionXY]
cmp dh, [MenuLastItemY]
jz @ 2
mov bl, 2
mov al, ’’
обадете се PrintSymbol
вкл. dh; увеличете координатата Y на курсора, като по този начин я намалите надолу
mov al, '>'
обадете се PrintSymbol
mov [PositionXY], dx
sub dh, [MenuFirstItemY]
mov [MenuItemSelected], dh
@ 2:
попа
jmp @keypress

Е, сега вече има какво да видим. За това се нуждаем от емулатора на Bochs. Ако не можете да го намерите, можете да използвате програмата RawwriteWin
(http://uranus.it.swin.edu.au/

jn/linux) или подобен, който може да напише изображение на дискета. Такива програми са лесни за намиране в Интернет.
Нека създадем файл main.asm.

Основна_програма:
обадете се на DrawInterface

mov брадва, 0303h; задайте началната позиция на курсора (X = 3, Y = 3)
mov [PositionXY], брадва

mov [MenuFirstItemY], 2; задайте областта, в която курсорът може да се движи
mov [MenuLastItemY], 6

обадете се на MoveCursorUp; за да нарисувате курсора, поставете го
единица отдолу

обадете се на KeybInput
оттегляне

Въпреки че има призив към процедурите, отговорни за дизайна и клавиатурата и
инициализация на променливи, отговорни за курсора на менюто. Нека не забравяме да свържем съответните файлове:

включва „graphics.inc“
включва 'keyb.inc'

Нека създадем файл make.bat. Лозунгът включва всъщност обединява два файла в един, така че е достатъчно да напишете файла, който започва всичко:

fasm bootsect.asm image.bin

Като стартираме този .bat, ще получим готовия файл с изображение image.bin. Би било хубаво да се уверите, че прозорецът не се затваря веднага, защото ако крайният файл не бъде създаден, ще се покаже грешка, така че в края
bat'nik е удобен за писане

За да започнете да емулирате Bochs, трябва да конфигурирате - задайте параметрите на емулираната машина. За това се използва конфигурационният файл. Създайте корекции на файл със следното съдържание
(това е за версия 2.1, но практически същото в други версии, подробна информация може да се намери в документацията на Bochs
http://bochs.sf.net/docs-html
и http://bochs.sf.net/doc/docbook/index.html):

floppya: 1_44 = диск \… \… \ image.bin, статус = вмъкнат
floppyb: 1_44 = a:, статус = изхвърлен
romimage: файл = BIOS-bochs-най-новите, адрес = 0xf0000
vgaromimage: VGABIOS-elpin-2.40
мега: 32
boot: флопи
vga_update_interval: 30000
keyboard_serial_delay: 250