<一个操作系统的实现>问题和部分小细节汇总 您所在的位置:网站首页 16位为一个字节的rom <一个操作系统的实现>问题和部分小细节汇总

<一个操作系统的实现>问题和部分小细节汇总

2023-07-11 08:47| 来源: 网络整理| 查看: 265

1. times 512 db 0 含义: 就是 db 0 重复512次。其中db是汇编器提供的伪指令(即CPU本来没有的指令), db 是 declare byte ,声明字节。如果是 db ? 则是声明未初始化的一字节,而其他如:db 0x01 、 db 'H' 就是声明并初始化一字节。也可以 db "Hello World!" 。 2. 如何理解段描述符和段选择子? 3. 8086处理器16位如何20位寻址? 4. 汇编语言中db, dd, dw 的含义         db在汇编中表示一个byte,就是一个字节8位,每次读取数据时,读完一个偏移量加1

         dw在汇编中表示一个字,就是两个字节16位,每次读取数据时,读完一个偏移量加2

        dd在汇编中表示一个双字,就是四个字节32位,每次读取数据时,读完一个偏移量加4

        附:汇编语言入门

5. 什么是DOS?

        DOS是磁盘操作系统(Disk Operating System)

        FreeDOS(曾叫做Free-DOS和PD-DOS)是一个在IBM PC兼容机下运行的操作系统。FreeDOS由许多不同的独立程序组成,这些程序就是整个FreeDOS项目中的“包”。作为DOS家族中的一员,它主要通过内核来提供磁盘访问和文件系统,以及部分内存管理,但是没有默认的GUI(尽管FreeDos 0.9及以上版本推荐使用OpenGEM)。FreeDOS支持老式和新式IBM PC,以及嵌入式系统。像MS-DOS一样,它可以从软盘、硬盘以及ROM启动。与MS-DOS不同,它支持从CD-ROM安装,并且人们可以自由创建属于自己的定制发行版,而不用为再发行支付使用费。

6.如何理解pm.inc中的Descripter 与Gate宏定义? 如何理解其中的3段值?

; 描述符 ; usage: Descriptor Base, Limit, Attr ;       Base:  dd                                                         --32位段基址                

;       Limit: dd (low 20 bits available)                            --20位段界限 ;       Attr:  dw (lower 4 bits of higher byte are always 0) --12位属性(16~19位为0) %macro Descriptor 3                                                  --Base,Limit,Attr dw %2 & 0FFFFh ; 段界限1 = 取Limit的低16位(0~1字节)

;此处分为两部分计算可能是因为输入CPU的数据总线只有16位(按理说80386已经是32位了) dw %1 & 0FFFFh ; 段基址1 = 取Base的低16位(2~3字节) db (%1 >> 16) & 0FFh ; 段基址2 = 取Base的高16位的低8位(4字节)

dw ((%2 >> 8) & 0F00h) | (%3 & 0F0FFh) ; 属性1 + 段界限2 + 属性2

;属性1 = 取Attr的低16位的高4位(6字节高4位)

;段界限2 = 取Limit的高16位的低4位(6字节低4位)

;属性2 = 取Attr的低16位的低8位(5字节)  db (%1 >> 24) & 0FFh ; 段基址3 = 取Base的高8位(7字节) %endmacro ; 共 8 字节

 

门 ; usage: Gate Selector, Offset, DCount, Attr ;        Selector:  dw                                                 --16位选择子 ;        Offset:    dd                                                   --32位偏移 ;        DCount:    db                                                 --5位Param Count ;        Attr:      db                                                   --8位属性 %macro Gate 4     dw    (%2 & 0FFFFh)                ; 偏移1 = 取Offset的低16位(0~1字节)     dw    %1                    ; 选择子 = Selector的16位(2~3字节)     dw    (%3 & 1Fh) | ((%4 > 16) & 0FFFFh)            ; 偏移2 = 取Offset的高16位(6~7字节) %endmacro ; 共 8 字节

 7.cs寄存器的作用

CS, IP 两个寄存器指示了 CPU 当前将要读取的指令的地址,其中 CS 为代码段寄存器,而 IP 为指令指针寄存器 。

8. movzx指令

MOVZX OPD,OPS

功能:

将8位或16位的OPS零扩展为16位或32位,再传给OPD.

说明: 所谓零扩展,就是把新扩展的高位字节填0,这可以保证无符号数扩展后还是原来的无符号数. 至于什么时候用符号扩展,什么时候用零扩展,视程序中是用带符号数还是无符 号数操作而定.样列: movzx edi,bx        ; movzx 扩展高位为0,并把其赋值到edi 其中,edi为32位寄存器,bx为16位寄存器,向上扩展。

9. int 指令

格式:int n, n为中断类型码,它的功能是引发中断过程。

CPU执行 int n 指令,相当于引发一个 n 号中断

取中断类型码n标志寄存器入栈,IF=0,TF=0;CS,IP入栈;IP = (n*4), (CS) = (n*4+2)


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有