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

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

时间:2024-08-08 21:23:53浏览次数:13  
标签:tint 操作系统 tmov ah 自制 编程 al 0x10 code

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

相关文章

  • Linux操作系统简介
    今天给伙伴们分享一下Linux操作系统简介,希望看了有所收获。我是公众号「想吃西红柿」「云原生运维实战派」作者,对云原生运维感兴趣,也保持时刻学习,后续会分享工作中用到的运维技术,在运维的路上得到支持和共同进步!如果伙伴们看了文档觉得有用,欢迎大家关注我的公众号,获取相......
  • Java多线程编程中的常见问题及优化策略
    Java多线程编程中的常见问题及优化策略大家好,我是微赚淘客返利系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!多线程的基本概念在Java中,多线程是指程序中可以同时运行多个线程,每个线程可以执行不同的任务。多线程可以提高程序的执行效率,但同时也带来了一些挑战。线程安全......
  • 2024睿抗机器人开发者大赛(RAICOM) CAIP编程技能赛 国一
    最后91分,国一。前几题都AK了,最后一题先是输出0,得了个1分。花了一个小时都没解决这题,难受ing,其实到最后差不多要改对了(降落那一部分没时间改),但是没时间了,hhhh。拿到国一,简直圆梦啦!!!本科拿的国三,差0.02秒就是国二,从此内心蒙上阴影。哭死ing研一终于拿了个编程比赛的国一,也算......
  • 【人工智能】【机器学习】-好书推荐之《Python神经网络编程》
    目录内容概览编程环境面向对象学习目标如果你是想要自学机器学习相关知识的读者,我相信看完这篇文章的介绍后,你会对机器学习有更清晰的认识。帮助你走进机器学习的殿堂。《Python神经网络编程》(原书名:MakeYourOwnNeuralNetwork)是一本深度学习领域的入门级书籍,由Tar......
  • 系统编程 day5 文件4
    函数time(time_t*tloc),返回值为time_t;可以读取秒数函数ctime(consttime_t*timep),返回值为获得时间字符串首地址,char*可以将秒数转化为年月日时分秒函数localtime structtm*tm_info=localtime(&tm);返回本地实时时间命令函数:软链接函数symlink(传参:被链接,新链接);返......
  • 结队编程 - 华为OD统一考试(D卷)
    OD统一考试(D卷)分值:200分题解:Java/Python/C++题目描述某部门计划通过结队编程来进行项目开发,已知该部门有N名员工,每个员工有独一无二的职级,每三个员工形成一个小组进行结队编程,结队分组规则如下:从部门中选出序号分别为i、j、k的3名员工,他们的职级分别为le......
  • Kotlin 循环与函数详解:高效编程指南
    Kotlin循环当您处理数组时,经常需要遍历所有元素。要遍历数组元素,请使用for循环和in操作符:示例输出cars数组中的所有元素:valcars=arrayOf("Volvo","BMW","Ford","Mazda")for(xincars){println(x)}您可以遍历各种类型的数组。在上面的示例中,我们使用了......
  • 改写socket编程并解释socket通信原理
    如果你仔细看我之前的博客,会看到那个手机打电话的示例,但是那段代码彻底写死了,真正编程的时候一定要写活了,不信你看看很多的程序的配置文件就是这样的,为什么单独分离个配置文件出来,就是为了便于修改配置,这就是把程序写活的最好的例子。言归正传,直接上代码。服务端:fromsocketim......
  • LangChain与泛型编程:探索代码生成的新维度
    LangChain与泛型编程:探索代码生成的新维度在软件开发领域,泛型编程是一种允许创建可重用组件的技术,这些组件可以在多种数据类型上工作的编程范式。LangChain作为一个假设的编程辅助工具,如果存在,它可能会支持泛型编程,以增强其代码生成的能力。本文将探讨LangChain对泛型编程......
  • 网络编程
    本篇文章目的为编程后期的互联网项目做铺垫只为对开发涉及到的网络知识进行入门了解网络概述计算机网络:计算机网络(连接分散计算机设备以实现信息传递的系统)锁定计算机网络是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,......