自制操作系统(五、实现操作系统大众化,制作一个让普通人自制操作系统的软件)

这次要实现操作系统大众化,制作一个让普通人能自制操作系统的软件,不然就算你的操作系统做得再好,依然无人问津,大家都在用 Windows

我们选择用 python 实现,因为 python 比较简单,就算没学过也看得懂(至少我是这样的),下面是代码实现

没有python环境的在这里下载已经打包好的exe

from tkinter import*
code = '\n[org 0x7c00]\nstart1:\n\tmov ax, 0x0820\n\tmov es, ax\n\tmov bx, 0x0000\n\tmov ax, 2\n\tmov cl, 2\n\tmov dh, 0\n\tmov ch, 0\n\tmov dl, 0\nread_loop:\n\tmov ah, 0x02\n\tmov al, 1\n\tint 0x13\n\tjc error\n\tadd ax, 1\n\tadd bx, 512\n\tcmp ax, 6\n\tjb read_loop\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()

代码非常通俗易懂对不对,为了体谅没有学过 python的读者,没有导入任何第三方库(冷知识:tkinter是python标准库)

代码实现了根据用户输入,创造asm文件

代码不多不少,刚刚好100行,逻辑清晰,不难理解

看看效果:

                                  

 

 

 

没有任何问题 

  • 7
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值