<一个操作系统的实现>问题和部分小细节汇总 | 您所在的位置:网站首页 › 16位为一个字节的rom › <一个操作系统的实现>问题和部分小细节汇总 |
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 字节 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 实验室设备网 版权所有 |