首页 > 其他分享 >自制操作系统(七、在自制操作系统玩游戏)

自制操作系统(七、在自制操作系统玩游戏)

时间:2024-08-16 09:57:57浏览次数:7  
标签:play 操作系统 int 自制 move al mov 0x10 玩游戏

废话不多说,直接上代码

[org 0x7c00]

; 定义游戏板数组
board1 db ' ', ' ', ' '
board2 db ' ', ' ', ' '
board3 db ' ', ' ', ' '
player_turn db 'X' ; 玩家 'X' 的回合

start:
    mov bp, 0x8000
    mov sp, bp

    ; 清屏
    mov ax, 0x0600
    mov bx, 0x0700
    mov cx, 0
    mov dx, 0x184f
    int 0x10

    ; 打印欢迎信息
    mov ah, 0x0E
    mov al, 'T'
    int 0x10
    mov al, 'i'
    int 0x10
    mov al, 'c'
    int 0x10
    mov al, '-'
    int 0x10
    mov al, 'T'
    int 0x10
    mov al, 'a'
    int 0x10
    mov al, 'c'
    int 0x10
    mov al, 't'
    int 0x10
    mov al, 'a'
    int 0x10
    mov al, 'c'
    int 0x10
    mov al, 'e'
    int 0x10
    mov al, ' '
    int 0x10
    mov al, 'G'
    int 0x10
    mov al, 'a'
    int 0x10
    mov al, 'm'
    int 0x10
    mov al, 'e'
    int 0x10
    mov al, '!'
    int 0x10

.wait_input:
    mov ah, 0x00
    int 0x16
    cmp al, '1'
    je .play_move_1
    cmp al, '2'
    je .play_move_2
    cmp al, '3'
    je .play_move_3
    cmp al, '4'
    je .play_move_4
    cmp al, '5'
    je .play_move_5
    cmp al, '6'
    je .play_move_6
    cmp al, '7'
    je .play_move_7
    cmp al, '8'
    je .play_move_8
    cmp al, '9'
    je .play_move_9
    jmp .wait_input

.play_move_1:
    mov byte [board1], player_turn
    jmp .update_screen
.play_move_2:
    mov byte [board1 + 1], player_turn
    jmp .update_screen
.play_move_3:
    mov byte [board1 + 2], player_turn
    jmp .update_screen
.play_move_4:
    mov byte [board2], player_turn
    jmp .update_screen
.play_move_5:
    mov byte [board2 + 1], player_turn
    jmp .update_screen
.play_move_6:
    mov byte [board2 + 2], player_turn
    jmp .update_screen
.play_move_7:
    mov byte [board3], player_turn
    jmp .update_screen
.play_move_8:
    mov byte [board3 + 1], player_turn
    jmp .update_screen
.play_move_9:
    mov byte [board3 + 2], player_turn
    jmp .update_screen

.update_screen:
    ; 更新屏幕显示
    mov bp, 0x8000
    mov sp, bp
	mov ax, 0x0600
	mov bx, 0x0700
	mov cx, 0
	mov dx, 0x184f
	int 0x10
	mov ah, 02h
	xor bh, bh
	mov dh, 0
	mov dl, 0
	int 10h
.update_screen1:
    mov ah, 0x0E
    mov si, board1
    mov cx, 3
.print_loop1:
    lodsb
    mov al, '|'
    int 0x10
    mov al, [si]
    int 0x10
    mov al, '|'
    int 0x10
    inc si
    loop .print_loop1
.update_screen2:
    mov ah, 0x0E
    mov al, 0x0D
    int 0x10
    mov al, 0x0A
    int 0x10
    mov al, '-'
    int 0x10
    mov al, '-'
    int 0x10
    mov al, '|'
    int 0x10
    mov al, '|'
    int 0x10
    mov al, '-'
    int 0x10
    mov al, '|'
    int 0x10
    mov al, '|'
    int 0x10
    mov al, '-'
    int 0x10
    mov al, '-'
    int 0x10
    mov al, 0x0D
    int 0x10
    mov al, 0x0A
    int 0x10
    mov si, board2
    mov cx, 3
.print_loop2:
    lodsb
    mov al, '|'
    int 0x10
    mov al, [si]
    int 0x10
    mov al, '|'
    int 0x10
    inc si
    loop .print_loop2
.update_screen3:
    mov ah, 0x0E
    mov al, 0x0D
    int 0x10
    mov al, 0x0A
    int 0x10
    mov al, '-'
    int 0x10
    mov al, '-'
    int 0x10
    mov al, '|'
    int 0x10
    mov al, '|'
    int 0x10
    mov al, '-'
    int 0x10
    mov al, '|'
    int 0x10
    mov al, '|'
    int 0x10
    mov al, '-'
    int 0x10
    mov al, '-'
    int 0x10
    mov al, 0x0D
    int 0x10
    mov al, 0x0A
    int 0x10
    mov si, board3
    mov cx, 3
.print_loop3:
    lodsb
    mov al, '|'
    int 0x10
    mov al, [si]
    int 0x10
    mov al, '|'
    int 0x10
    inc si
    loop .print_loop3
    ; 检查游戏是否结束
    ; ...

    ; 切换玩家
    mov al, player_turn
    cmp al, 'X'
    je .switch_to_O
    cmp al, 'O'
    je .switch_to_X
.switch_to_X:
    mov byte [player_turn], 'X'
    jmp .wait_input
.switch_to_O:
    mov byte [player_turn], 'O'
    jmp .wait_input

; 游戏结束逻辑
; ...

times 510-($-$$) db 0
dw 0xAA55

这里没有添加游戏结束逻辑

能看到这里的读者已经非常厉害了

读者可以自行添加代码逻辑

运行试试

图片暂时无法上传,可能是csdn出了问题,深感歉意

 好的,非常成功。等一下......咦?

图片暂时无法上传,可能是csdn出了问题,深感歉意

什么鬼!

代码的逻辑完全没有问题,但是虚拟机运行出了问题

按键根本匹配不上 ,一直是o,我的代码里没有这个字符,只有O和X

看来可能是虚拟机或者bios的问题,真机运行应该可以

这就当是大家的课后作业了

标签:play,操作系统,int,自制,move,al,mov,0x10,玩游戏
From: https://blog.csdn.net/linhhanpy/article/details/141242013

相关文章

  • 系统分析师2:操作系统
    文章目录1内容概要2操作系统概述3进程管理3.1进程与线程3.2信号量与PV操作3.2.1基本概念3.2.2互斥模型3.2.3同步模型3.2.4PV操作解题思路3.3前趋图3.3.1相关概念3.3.2例题3.4死锁3.4.1基本概念3.4.2死锁资源数计算问题3.4.3进程资源图3.4.4银行家算法......
  • 【读书笔记-《30天自制操作系统》-2】Day3
    第三天的内容主要在于IPL的实现,在完成IPL之后又为进入32位模式与导入C语言做了准备。1.磁盘结构IPL的作用是读取操作系统程序,所以IPL最主要的工作就是读取磁盘,将程序读取到内存中。先来看一下磁盘的结构与读取方式。磁盘的样子也类似于这样一个圆柱体,实际读取数据时是......
  • 操作系统-进程创建、同步与锁、通信、调度算法-学习笔记
    1.进程的基础概念1.1进程是什么?定义:进程是操作系统管理的一个程序实例。它包含程序代码及其当前活动的状态。每个进程有自己的内存地址空间,拥有独立的栈、堆、全局变量等。操作系统通过进程来分配资源(如CPU时间、内存等)并管理任务的执行。进程vs程序:程序:静态的代......
  • Dllhost.exe 是 Windows 操作系统中的一个进程,通常与 COM+ 服务相关。它的主要作用是
    Dllhost.exe是Windows操作系统中的一个进程,通常与COM+服务相关。它的主要作用是运行COM组件和处理进程间的通信。Dllhost.exe的起源可以追溯到MicrosoftWindows2000和WindowsXP的早期版本。它是Windows操作系统的一部分,主要用于支持COM+(ComponentObjectMode......
  • 软考-软件设计师 (操作系统)
      ......
  • Linux操作系统的安装和配置
    一、Linux的安装与常用命令1.安装VMware;   2.使用VMware安装配置Linux;3.实现要求的shell函数#hello函数,输入参数个数为0,输出hello,world!到标准输出。functionhello(){echo"hello,world!"}#tell_who_i_am函数,输入参数个数为0,输出当前用户的账号......
  • LVGL--无操作系统移植
    1、添加lvgl库到mdk工程①在工程中建立文件结构,如下:  ②把lvgl_v8.2库中需要的文件copy到“LVGL_test\Middlewares\LVGL\GUI\lvgl”下 ③“lv_conf.h”文件的条件编译指令#if0修改成#if1 ④打开mdk工程先编译,然后新建Groups,把前面copy的文件添加到工程中然后......
  • Linux操作系统云主机中buffer和cache占用内存怎么办?
    问题描述系统长期运行后,free命令查看系统内存,发现剩余内存不足,大部分是buffer和cache。问题分析在Linux的内存管理中,buffer是Linux内存中的Buffercache。cache是Linux内存中的Pagecache。Buffercache:主要是当系统对块设备进行读写的时候,对块进行数据缓存的系统来使用,即......
  • lwIP——带操作系统(FreeRTOS)移植
    1.lwIP前期准备在程序工程中,我们在工程文件夹下创建了一个名为“lwip”的子文件夹。在“lwip”文件夹下,我们又创建了一个子文件夹:arch。arch文件夹用于存放lwIP系统的配置文件;2.添加lwIP源文件3.添加网卡驱动程序/*Includes------------------------------------......
  • 操作系统实验学习进度
    最近开始学习操作系统和机组的相关知识,写一个学习进度的笔记作为鞭策,其中的dayn不一定全是一天内完成的,同时,大部分文字来源于学习资料rCore-Tutorial-Book第三版。Day0-入门操作系统初步介绍1.定义一个操作系统(OS)是一个软件,它帮助用户和应用程序使用和管理计算机的......