首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >操作系统实现杂记

操作系统实现杂记

作者头像
shysh95
发布2021-09-24 11:27:44
发布2021-09-24 11:27:44
55400
代码可运行
举报
文章被收录于专栏:shysh95shysh95
运行总次数:0
代码可运行

Hi~朋友,关注置顶防止错过消息

接下来几篇我都会写一下在实现操作系统相关功能涉及到的知识点,最后会实现一个mini的OS,如果感兴趣可以关注公众号置顶一波,一起成为有深度的Coder。

cli指令特点?

cli禁止中断,cli只能在内核模式下运行,不可以在用户模式下执行。

cld指令特点?

cld用来将标志寄存器的DF位置0,DF为的作用用来控制内存的方向,DF为0表示内存向高地址增加,DF为1表示内存向低地址减小。

在字串操作中使变址寄存器SI或DI的地址指针自动增加,字串处理由前往后。

例如,以下三条指令执行后,SI自动加1,更新为0001H,此处为Intel的语法。

代码语言:javascript
代码运行次数:0
运行
复制
CLD
MOV SI, 0000H
LODSB ;将字串中的SI指针所指的一个字节装入AL

b、w、l的区别?

在AT&T语法中有以下写法指令:

代码语言:javascript
代码运行次数:0
运行
复制
movb %bl, %al   # 将BL寄存器的8位内容转移到AL寄存器
movw %bx, %ax   # 将BX寄存器的16位内容转移到AX寄存器
movl %ebx, %eax # 将EBX寄存器的32位内容转移到EAX寄存器

b表示字节(8位),w表示字(16位),l表示长整数(32位)。

0x64端口有啥作用?

通过0x64端口(保存了键盘的一些状态)我们可以检测键盘输入缓冲器上是否还有数据,如果第1位为1,表示缓冲器还有数据,如果为0,表示缓冲器没有数据。

开启A20 Gate的方式有哪几种?

  1. 通过键盘控制器
  2. 调用BIOS功能
  3. 使用系统端口

如何通过键盘控制器开启A20 Gate?

这里只假设键盘缓冲器里没有数据,首先向0x64端口写入一个0xd1,表示开始向P2端口写入数据,紧接着向键盘输入缓冲器0x60端口写入0xdf(具体写向P2输出端口的数据),其二进制表示0b11011111,其中第1位(从0开始)则为A20选通位,这时A20 Gate开启。

代码语言:javascript
代码运行次数:0
运行
复制
seta20.1:
    # 20.1的逻辑当键盘输入缓冲器没有数据的时候向0x64端口写入0xd1指令
    inb $0x64, %al  # 等待键盘空闲
    testb $0x2, %al # 如果%al第低2位为0,则ZF = 1, 则不跳转
    jnz seta20.1    # 如果%al第低2位为1,则ZF = 0, 则跳转,继续检查

    movb $0xd1, %al  
    outb %al, $0x64  # 向0x64端口写入0xd1指令

seta20.2:
    #  20.1的逻辑当键盘输入缓冲器没有数据的时候向0x60端口写入0xdf指令,开启A20 Gate
    inb $0x64, %al  # 等待键盘空闲
    testb $0x2, %al
    jnz seta20.2

    movb $0xdf, %al     
    outb %al, $0x60 # 向0x64端口写入0xdf指令

如何通过BIOS开启A20 Gate?

INT 15的以下命令可以用来开启、关闭、返回A20 Gate:

  • 2400:关闭A20 Gate
  • 2401:开启A20 Gate
  • 2402:返回A20 Gate的状态
代码语言:javascript
代码运行次数:0
运行
复制
# BIOS 开启A20 Gate
movw %ax, 0x2401
int 0x15

使用系统端口开启A20 Gate

使用系统端口0x92也可以开启A20 Gate,0x92端口的第1 Bit为(从第0开始算起)为1表示开启A20 Gate。

代码语言:javascript
代码运行次数:0
运行
复制
movb $0x2, %al
outb %al, $0x92

系统端口0x92的方式不推荐使用,因为它可以导致和其他硬件冲突并强制关机。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-09-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员修炼笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档