По сути, я работаю над созданием простой консольной ОС, которая по функциональности похожа на MS-DOS. Я понимаю, что такой проект не может быть легко поддержан, и мне все равно;). Итак, вот что я сделал до сих пор:
;------------------------------------------------------
;| SMOS Shell Source |
;| Kept under GPLv3 Open Source license |
;| (https://www.gnu.org/licenses/gpl.txt) |
;------------------------------------------------------
BITS 16
start:
mov ax, 07C0h
add ax, 288
mov ss, ax
mov sp, 4096
mov ax, 07C0h
mov ds, ax
jmp kool
kool:
mov si, lineone
call print_string
mov si, linetwo
call print_string
mov si, linethree
call print_string
call newline
mov si, shellprompt
call print_string
jmp type
shell:
call newline
mov si, shellprompt
call print_string
jmp type
lineone db '----------------------',13,10,0
linetwo db '| WELCOME TO SMOS |',13,10,0
linethree db '----------------------',13,10,0
shellprompt db 'smos> ',0
break db 13,10,0
clearscreen:
mov ah, 0x06
mov al, 0
int 10h
type:
mov ah,0h
int 16h
jmp shell
print_string:
mov ah, 0Eh
.repeat:
lodsb
cmp al, 0
je done
int 10h
jmp .repeat
newline:
mov si, break
call print_string
done:
ret
times 510-($-$$) db 0
dw 0xAA55
То, что я хотел бы, - это способ получить нажатие клавиши и распечатать его на smos>
строке оболочки. Таким образом, если пользователь наберет test
, то отобразится smos> test
, и если пользователь нажмет клавишу ввода, он сможет быть сохранен и затем обработан. Я искал что-то похожее на мой вопрос, и вы можете видеть, что в функции type:
он останавливает процесс, пока не будет нажата клавиша, что является попыткой, которую я нашел. Тем не менее, я не могу понять, как продолжить код, чтобы получить результат, который я объяснил. В любом случае, помните, когда вы отвечаете, что я новичок в сборке, так что относитесь ко мне, как к пятилетнему ребенку, когда объясняете. Заранее спасибо!