不需要学编程,自制自己的操作系统!一个0基础自制操作系统的软件!详细教程
一、下载或python运行
不会编程的可以在自制操作系统.exe免费下载,直接跳到第二点
创建.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
二、制作自己的操作系统img文件
下载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是操作系统的名字
可以在虚拟机运行了
三、虚拟机运行img
以下为原创
以下在第4点效果图之前为转载内容
1、找一个已经存在的虚拟机,编辑虚拟机设置
2、点击添加,选择软盘驱动器,点击完成
3、点击使用软盘镜像文件,点击浏览选择镜像,也就是img文件,记得点击确定哦
3、之后点击运行虚拟机就可以了
以上转载自
以下为原创
四、效果图
输入cls可以清屏
可以装x了