不需要学编程,自制自己的操作系统!一个0基础自制操作系统的软件!详细教程
创建.py文件,内容如下
from tkinter import*
code = '\n[org 0x7c00]\n\nstart:\n\t\n\tmov bp, 0x8000\n\tmov sp, bp\n\n\t\n\tmov ax, 0x0600\n\tmov bx, 0x0700\n\tmov cx, 0\n\tmov dx, 0x184f\n\tint 0x10\n\n\n\tmov ah, 0x0E\n'
def assign_to_os_name1():
global code, os_name
os_name = entry.get()
print(os_name)
os_print(os_name)
os_print(">>")
label.pack_forget()
entry.pack_forget()
button.pack_forget()
window2()
def assign_to_os_name2():
global code, main, os_name
code = f"{code}\n.wait_input:\n\tmov ah, 0x00\n\tint 0x16\n\tcmp al, '1'\n\tje .check_input\n\tcmp al, 'c'\n\tje .check_input_\n"
cmd = entry1.get()
command = entry2.get()
print(cmd)
print(command)
label.pack_forget()
entry.pack_forget()
button.pack_forget()
window2()
os_first(cmd)
code = f"{code}\n\tcmp al, 0x0D\n\tje .bad_input\n\tmov ah, 0x0E\n\tint 0x10\n\tjmp .wait_input\n.check_input:\n\tmov ah, 0x0E\n\tint 0x10\n\tmov ah, 0x00\n\tint 0x16\n\tmov ah, 0x0E\n\tint 0x10\n\tcmp al, '2'\n\tjne .wait_input\n\tmov ah, 0x00\n\tint 0x16\n\tmov ah, 0x0E\n\tint 0x10\n\tcmp al, '3'\n\tjne .wait_input\n\tmov ah, 0x00\n\tint 0x16\n\tcmp al, 0x0D\n\tjne .wait_input\n\tmov ah, 0x0E\n\tmov al, 0x0D\n\tint 0x10\n\tmov al, 0x0A\n\tint 0x10\n\tmov al, '4'\n\tint 0x10\n\tmov al, '5'\n\tint 0x10\n\tmov al, '6'\n\tint 0x10\n\tmov al, '!'\n\tint 0x10\n\tmov al, 0x0D\n\tint 0x10\n\tmov al, 0x0A\n\tint 0x10\n\tmov al, '>'\n\tint 0x10\n\tmov ah, 0x0E\n\tmov al, '>'\n\tint 0x10\n\tjmp .wait_input\n.check_input_:\n\tmov ah, 0x0E\n\tint 0x10\n\tmov ah, 0x00\n\tint 0x16\n\tmov ah, 0x0E\n\tint 0x10\n\tcmp al, 'l'\n\tjne .wait_input\n\tmov ah, 0x00\n\tint 0x16\n\tmov ah, 0x0E\n\tint 0x10\n\tcmp al, 's'\n\tjne .wait_input\n\tmov ah, 0x00\n\tint 0x16\n\tcmp al, 0x0D\n\tjne .wait_input\n\tmov ah, 0x0E\n\tmov al, 0x0D\n\tint 0x10\n\tmov al, 0x0A\n\tint 0x10\n\tmov ax, 0x0600\n\tmov bx, 0x0700\n\tmov cx, 0\n\tmov dx, 0x184f\n\tint 0x10\n\tmov ah, 02h\n\txor bh, bh\n\tmov dh, 0\n\tmov dl, 0\n\tint 10h\n\tmov ah, 0x0E\n\tmov al, 0x0D\n\tint 0x10\n\tmov al, 0x0A\n\tint 0x10\n\tmov al, '>'\n\tint 0x10\n\tmov ah, 0x0E\n\tmov al, '>'\n\tint 0x10\n\tjmp .wait_input\n\t.bad_input:\n\tmov ah, 0x0E\n\tmov al, 0x0D\n\tint 0x10\n\tmov al, 0x0A\n\tint 0x10\n\tmov al, 'b'\n\tint 0x10\n\tmov al, 'a'\n\tint 0x10\n\tmov al, 'd'\n\tint 0x10\n\tmov al, '!'\n\tint 0x10\n\tmov ah, 0x0E\n\tmov al, 0x0D\n\tint 0x10\n\tmov al, 0x0A\n\tint 0x10\n\tmov al, '>'\n\tint 0x10\n\tmov al, '>'\n\tint 0x10\n\tjmp .wait_input\n\t.done:\n\tret\n"
code = f"{code}\n.check_input_{cmd}:\n\tmov ah, 0x0E\n\tint 0x10"
os_other(cmd)
os_print(command)
os_end_print()
os_end()
f = open(f'{os_name}.asm', 'w')
f.write(code)
f.close()
exit()
def os_print(string):
global code
for s in string:
code = f"{code}\n\tmov al, '{s}'\n\tint 0x10\n"
def os_first(string):
global code
i = 0
for s in string:
i += 1
code = f"{code}\n\tcmp al, '{s}'\n\tje .check_input_{string}\n"
if i >= 1:
break
def os_other(string):
global code
string = string[1:]
i = 0
for s in string:
i += 1
code = f"{code}\n\t\n\tmov ah, 0x00\n\tint 0x16\n\tmov ah, 0x0E\n\tint 0x10\n\tcmp al, '{s}'\n\tjne .wait_input\n"
code = f"{code}\n\t\n\tmov ah, 0x00\n\tint 0x16\n\tcmp al, 0x0D\n\tjne .wait_input\n\tmov ah, 0x0E\n\tmov al, 0x0D\n\tint 0x10\n\tmov al, 0x0A\n\tint 0x10\n"
def os_end_print():
global code
code = f"{code}\n\tmov ah, 0x0E\n\tmov al, 0x0D\n\tint 0x10\n\tmov al, 0x0A\n\tint 0x10\n\tmov al, '>'\n\tint 0x10\n\tmov al, '>'\n\tint 0x10\n\tjmp .wait_input\n"
def os_end():
global code
code = f"{code}\ntimes 510-($-$$) db 0\ndw 0xAA55\n"
root = Tk()
root.title("自制操作系统")
root.geometry("400x300")
def window1():
global label, entry, button
label = Label(root, text="操作系统的名字") # 用于显示输入的文字
label.pack()
entry_var = StringVar()
entry = Entry(root, textvariable=entry_var)
entry.pack()
button = Button(root, text="下一步", command=assign_to_os_name1)
button.pack()
def window2():
global label, entry1, entry2, button
label = Label(root, text="添加命令") # 用于显示输入的文字
label.pack()
entry_var1 = StringVar()
entry1 = Entry(root, textvariable=entry_var1)
entry1.pack()
entry_var2 = StringVar()
entry2 = Entry(root, textvariable=entry_var2)
entry2.pack()
button = Button(root, text="完成", command=assign_to_os_name2)
button.pack()
window1()
root.mainloop()
#dd if=/dev/zero of=hanos.img bs=512 count=2
#dd if=hanos.bin of=hanos.img bs=512 count=1
#pyinstaller -F 自制操作系统.py
已安装python环境的在当前目录的终端输入:
pyinstaller -F 自制操作系统.py
下载nasm
下载 Cygwin
打开打包好的 自制操作系统.exe
输入操作系统名称,英语就行
下一步
随便写一个命令
打开终端
nasm -f bin hanos.asm -o hanos.bin
点击Cygwin.bat
输入
dd if=/dev/zero of=hanos.img bs=512 count=2
dd if=hanos.bin of=hanos.img bs=512 count=1
其中hanos是操作系统的名字
可以在虚拟机运行了
效果图
输入cls可以清屏
可以装x了
标签:tint,操作系统,tmov,ah,自制,编程,al,0x10,code From: https://blog.csdn.net/linhhanpy/article/details/141036214