不需要学编程,自制自己的操作系统!一个0基础自制操作系统的软件!详细教程!

不需要学编程,自制自己的操作系统!一个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了 

1.1 计算机启动过程 计算机启动过程一般是指计算机从点亮到加载操作系统一个过程。对于IBM 兼容机(个人电 脑)来讲,这个过程大致是这样的: 1. 加电电源开关被按下时,机器就开始供电,主板的控制芯片组会向CPU(Central Processing Unit,中央处理器)发出并保持一个RESET(重置)信号,让CPU恢复到初始状态。当芯片组 检测到电源已经开始稳定供电时就会撤去RESET信号(松开台式机的重启键是一样的效果), 这时CPU就从0xffff0处开始执行指令。这个地址在系统BIOS(Basic Input/Output System, 基本输入输出系统)的地址范围内,大部分系统BIOS厂商放在这里的都只是一条跳转指令,跳 到系统BIOS真正的启动代码处。 2. 自检系统BIOS的启动代码首先要做的事情就是进行POST(Power-On Self Test,加电后自 检),POST的主要任务是检测系统中一些关键设备是否存在和能否正常工作,例如内存和显卡 等。由于POST是最早进行的检测过程,此时显卡还没有初始化,如果系统BIOS在POST的 过程中发现了一些致命错误,例如没有找到内存或者内存有问题(此时只会检查640K常规内 存),那么系统BIOS就会直接控制喇叭发声来报告错误,声音的长短和次数代表了错误的类 型。 3. 初始化设备接下来系统BIOS将查找显卡的BIOS,存放显卡BIOS的ROM芯片的起始地址通 常设在0xC0000处,系统BIOS在这个地方找到显卡BIOS之后就调用它的初始化代码,由显卡
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值