📄 boot.asm
字号:
[bits 16]
[org 0x7c00]
jmp Main
Msg db "Welcome To Tresss Studio......"
db 13,10,"Tresss Studio is Start"
Mturn db 13,10,2,3,">",0
AdrCmd times 20 db 0 ;记住所输命令,最大19个字符
CmdCls db "cls",0
CmdReboot db "reboot",0
ShowMessage:
mov ah,0x0e
mov bh,0x00
.nextchar:
lodsb
or al,al
jz .brs
int 0x10
jmp .nextchar
.brs
ret
Main:
xor ax,ax
mov ds,ax
mov si,Msg
call ShowMessage ;显示欢迎信息
mov si,AdrCmd ;Si来记录命令
xor cl,cl ;Di来记录命令长度
WaitInput: ;等待用户输入
xor ah,ah
int 16h
cmp al,13
jz .Chrturn ;判断如果为回车键,则跳转检查命令
cmp cl,19
jz WaitInput ;命令超长
inc cl
mov [si],al
inc si
mov ah,0eh
int 10h
jmp WaitInput
.Chrturn
push bx
xor al,al
mov [si],al ;命令最后加一个"\0"
mov si,AdrCmd ;所输命令地址
mov di,CmdCls ;对比命令地址
call CmpStr
or bl,bl
jnz Cls ;跳转执行清屏
mov di,CmdReboot
call CmpStr
or bl,bl
jnz Reboot ;跳转重启
ShowHint:
mov si,Mturn ;提示符显示
call ShowMessage
pop bx
xor cl,cl
mov si,AdrCmd
jmp WaitInput
;∑∑∑∑∑∑∑∑∑∑∑∑∑∑∑∑∑∑∑∑∑∑∑∑∑∑
;字符串对比函数
;参数:si,di
;返回值:bl,两字串相等返回1,不等返回0
;∑∑∑∑∑∑∑∑∑∑∑∑∑∑∑∑∑∑∑∑∑∑∑∑∑∑
CmpStr:
xor bl,bl
.CmpStart
cmp BYTE [di],0
jz .CmpEnd ;对比结束
mov al,[di]
cmp al,[si]
jnz .Nequ ;不同,结束
inc si
inc di
mov bl,1
jmp .CmpStart
.Nequ
xor bl,bl
.CmpEnd
ret
Cls:
mov cx,0 ;清屏
mov dh,24
mov dl,79
mov bh,07
mov al,0
mov ah,6
int 10h
mov ah,0fh ;读取当前页号
int 10h
mov ah,2
mov dx,0 ;设置光标位置
int 10h
jmp ShowHint
Reboot:
mov ax,0040h
mov ds,ax
mov word[0072h],0000h
jmp 0ffffh:0000h
times 510-($-$$) db 0
dw 0xaa55
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -