内存
内存区间
低内存(Low Memory)区间
低内存(Low Memory)区间在0x00000到0xfffff之间的1M大小的内存区间。
Real Mode IVT
BDA即BIOS data area,BIOS数据区
这里有一部分自行约定使用的内存区
主引导程序加载区
这里有一部分自行约定使用的内存区
EBDA即Extended BIOS Data Area,扩展BIOS数据区
VGA显示内存区
Video BIOS区
Mapped hardware & Misc区
Motherboard(母板) BIOS区
高内存("Upper" Memory)区间
大于1M的内存区间
寻址
寻址方式
立即数寻址
直接寻址
寄存器寻址
寄存器间接寻址
寄存器相对寻址
基址变址寻址
基址变址相对寻址
除了立即数寻址和寄存器寻址,其他的寻址方式本质上是一样的。
立即数寻址
mov cs, 7C00H
寄存器寻址
mov ds, cs
直接寻址
mov si, [0H]
寄存器间接寻址
mov si, cs:[bx]
寄存器相对寻址
mov si, cs:[bx + 0H]
基址变址寻址
mov ax, cs:[bx][si]
基址变址相对寻址
mov ax, cs:0H[bx][si]
以上例子中都只是mov举例说明各种寻址方式。
寻址是无处不在的,除了上面的例子,数据传送,数据运算,跳转等都会涉及到寻址。
比如在程序跳转的时候,如JMP,CALL,甚至是RET,IRET等。
内存寻址
有些架构如arm是不能直接访问内存的,x86可以直接访问内存。x86不管运行在哪种模式下,实模式,保护模式,虚拟8086模式,首先都是采用的是分段寻址。x86实模式和保护模式的分段寻址是不一样的。
内存管理
分段管理
段选择子
but instead points to the segment descriptor that defines the segment. A segment selector contains the following
items:
Index (Bits 3 through 15) — Selects one of 8192 descriptors in the GDT or LDT. The processor multiplies
the index value by 8 (the number of bytes in a segment descriptor) and adds the result to the base
address of the GDT or LDT (from the GDTR or LDTR register, respectively).
TI (table indicator) flag
(Bit 2) — Specifies the descriptor table to use: clearing this flag selects the GDT; setting this flag
selects the current LDT.
Requested Privilege Level (RPL)
(Bits 0 and 1) — Specifies the privilege level of the selector. The privilege level can range from 0 to
3, with 0 being the most privileged level. See Section 5.5, “Privilege Levels”, for a description of the
relationship of the RPL to the CPL of the executing program (or task) and the descriptor privilege
level (DPL) of the descriptor the segment selector points to.
The first entry of the GDT is not used by the processor. A segment selector that points to this entry of the GDT (that
is, a segment selector with an index of 0 and the TI flag set to 0) is used as a “null segment selector.” The processor
does not generate an exception when a segment register (other than the CS or SS registers) is loaded with a null
selector. It does, however, generate an exception when a segment register holding a null selector is used to access
memory. A null selector can be used to initialize unused segment registers. Loading the CS or SS register with a null
segment selector causes a general-protection exception (#GP) to be generated.
Segment selectors are visible to application programs as part of a pointer variable, but the values of selectors are
usually assigned or modified by link editors or linking loaders, not application programs.
保护模式下,段寄存器实际上就是段选择子,而不是像实地址模式那样的段基址。通过段选择子中的索引index找到描述符表中对应的段描述符。
描述符表中的每个描述符大小为8个字节,处理器将段选择子中的索引index乘以8加上描述符表的基地址得到描述符表中对应段描述符的基地址。
段描述符(Segment Descriptor)
Segment Limit字段:
表示段大小,Segment Limit字段由两部分组成,Segment Limit 15:00和Seg Limit 19:16,总共20位。在G标志位没有置位的情况下,表示字节数,可以看出它能表示的范围为1byte <= Segment Limit < 1M,如果G标志位置位,表示4K字节数,可以看出它能表示的范围为4K bytes <= Segment Limit < 4G
G标记位:粒度
Determines the scaling of the segment limit field. When the granularity flag is clear, the segment limit is interpreted in byte units; when flag is set, the segment limit is interpreted in 4-KByte units. (This flag does not affect the granularity of the base address; it is always byte granular.) When the granularity flag is set, the twelve least significant bits of an offset are not tested when checking the offset against the segment limit. For example, when the granularity flag is set, a limit of 0 results in valid offsets from 0 to 4095.
如果G标记位没有设置,表示segment limit field个字节。如果被设置,表示(segment limit field)*4K字节。
Base Address字段:
段的基地址,由3部分组成,总共31位(4字节),
Type 字段:
指定段或者门(Gate)的类型以及指定可对段进行的访问类型和增长方向。该字段及其中的每一位取决于S (descriptor type) flag(即S标志)指定的是代码段或数据段描述符还是系统描述符。
S标记
也叫描述符类型标记,指定该描述符是代码段或数据段描述符还是系统描述符。
如果该标志位为0,表示系统段描述符,如果该标志位为1,表示代码段或数据段描述符。
DPL字段:
也就是描述符特权级字段,用于指定该段的特权级,特权级可以从0到3,即0,1,2,3。其中0特权级为最高特权级。DPL用于控制段的访问权限。
DPL和CPL以及RPL的关系可以参考See Section 5.5, "Privilege Levels"这一章节。
P标志
也叫segment-present标志,或段可见标志。用于指定该段在内存中可见或不可见。如果设置了该标志位,表示在内存中可见;如果没有设置该标志位,表示在内存中不可见。
如果该段在内存中不可见,即没有设置该标志位,当指向该段描述符的段选择子加载到段寄存器时,处理器将产生一个段不存在的异常(#NP),也就是segment-not-present exception (#NP)。
D/B标志
即default operation size/default stack pointer size and/or upper bound标志,或者默认的操作大小/默认的栈指针大小以及或者操作大小上限/栈指针大小上限。
这里的D表示默认的操作大小/默认的栈指针大小,B表示操作大小上限/栈指针大小上限。
取决于该段描述符是可执行代码段、向下扩展的数据段还是堆栈段,而执行不同的功能。
对于32位代码段和数据段,这个标志应该总是设置为1.。
对于16为代码段和数据段,这个标志应该总是设置为0。
如果是可执行代码段
如果是堆栈段(包括堆栈段寄存器指向的数据段)
如果是向下扩展的数据段
下面是一个段描述符例子:
_gdt_5:
# gdt 5, display memory range 0xb0000-0xb7fff, 32K
# base address of segment: 0x000b0000(0xb0000), limit of segment: 0x08000(0000 1000 0000 0000 0000b)
# code or data segment(1), data segment(0010), descriptor privilege level(00)
.word 0x8000# the bit 0-15 of limit of segment.
.word 0x0000# the bit 0-15 of base address of segment.
.byte 0x0b# the bit 16-23 of base address of segment.
.byte 0b10010010# 0-3: type, 4: s, 5-6: dpl, 7: p
.byte 0b01000000# 0-3: the bit 16-19 of limit of segment, 4: avl, 5: l, 6: d/b, 7: g
.byte 0x00# the bit 24-31 of base address of segment.
段描述符(Segment Descriptor, Segment Descriptor When Segment-Present Flag Is Clear)
描述符类型
通常指的是段描述符,比如代码段描述符、数据段描述符。
另外还有系统描述符,比如门(Gate)描述符,包括调用门(Call-gate)描述符、中断门(Interrupt-gate)描述符、陷阱门(Trap-gate)描述符以及任务门(Task-gate)描述符。
系统描述符除了门(Gate)描述符,还有系统段描述符,包括局部描述符表段(Local descriptor-table segment,LDT segment)描述符和任务状态段(Task-state segment,TSS)描述符。
代码段描述符、数据段描述符类型
系统描述符类型
系统描述符类型定义了系统段描述符和门(Gate)描述符类型
段描述符表
length and can contain up to 8192 (2 13 ) 8-byte descriptors.
包括2种类型的描述符表:全局描述符表(The global descriptor table,GDT)和局部描述符表(The local descriptor tables,LDT)
分页管理
相关推荐
内容概要:本文详细介绍了基于TMS320F系列芯片的C2000串口读写方案及其编程器——FlashPro2000的功能特点和支持的接口模式。文中不仅涵盖了硬件连接的具体步骤,还提供了代码实例来展示Flash擦除操作,并对比了JTAG和SCI-BOOT两种模式的优缺点。此外,针对不同型号的C2000系列芯片,给出了详细的适配指导以及避免烧录过程中可能出现的问题的方法。 适合人群:从事DSP开发的技术人员,尤其是对TI公司C2000系列芯片有一定了解并希望深入了解其编程和烧录细节的人群。 使用场景及目标:适用于实验室环境下的程序调试阶段,以及生产线上的批量烧录任务。主要目的是帮助开发者选择合适的编程工具和技术手段,提高工作效率,减少因误操作导致设备损坏的风险。 其他说明:文中提供的代码片段和命令行指令可以直接用于实际项目中,同时附带了一些实用技巧,如防止芯片变砖的小贴士和自动化重试脚本,有助于解决常见的烧录难题。
汉字字库存储芯片扩展实验 # 汉字字库存储芯片扩展实验 ## 实验目的 1. 了解汉字字库的存储原理和结构 2. 掌握存储芯片扩展技术 3. 学习如何通过硬件扩展实现大容量汉字字库存储 ## 实验原理 ### 汉字字库存储基础 - 汉字通常采用点阵方式存储(如16×16、24×24、32×32点阵) - 每个汉字需要占用32字节(16×16)到128字节(32×32)不等的存储空间 - 国标GB2312-80包含6763个汉字,需要较大存储容量 ### 存储芯片扩展方法 1. **位扩展**:增加数据总线宽度 2. **字扩展**:增加存储单元数量 3. **混合扩展**:同时进行位扩展和字扩展 ## 实验设备 - 单片机开发板(如STC89C52) - 存储芯片(如27C256、29C040等) - 逻辑门电路芯片(如74HC138、74HC373等) - 示波器、万用表等测试设备 - 连接线若干 ## 实验步骤 ### 1. 单芯片汉字存储实验 1. 连接27C256 EPROM芯片到单片机系统 2. 将16×16点阵汉字字库写入芯片 3. 编写程序读取并显示汉字 ### 2. 存储芯片字扩展实验 1. 使用地址译码器(如74HC138)扩展多片27C256 2. 将完整GB2312字库分布到各芯片中 3. 编写程序实现跨芯片汉字读取 ### 3. 存储芯片位扩展实验 1. 连接两片27C256实现16位数据总线扩展 2. 优化字库存储结构,提高读取速度 3. 测试并比较扩展前后的性能差异 ## 实验代码示例(单片机部分) ```c #include <reg52.h> #include <intrins.h> // 定义存储芯片控制引脚 sbit CE = P2^7; // 片选 sbit OE = P2^6; // 输出使能 sbit
测控装备干扰源快速侦测系统设计研究.pdf
嵌入式八股文面试题库资料知识宝典-【开发】嵌入式开源项目&库&资料.zip
嵌入式八股文面试题库资料知识宝典-百度2022年嵌入式面试题.zip
少儿编程scratch项目源代码文件案例素材-空间站.zip
基于关联规则的商业银行个性化产品推荐.pdf
嵌入式八股文面试题库资料知识宝典-Linux基础使用.zip
内容概要:本文详细介绍了利用MATLAB进行轴棱锥生成贝塞尔高斯光束及环形光束光强图像的仿真研究。首先阐述了实验的背景与目标,强调了MATLAB在光学和计算科学领域的广泛应用。接着,具体描述了实验的方法与步骤,包括材料准备、仿真过程中的参数设定和光束生成代码编写。最后,对实验结果进行了深入分析,展示了贝塞尔高斯光束和环形光束的光强分布特点,验证了其光学性能的预期表现。文章还对未来的研究方向和技术改进提出了展望。 适合人群:从事光学、物理学及相关领域研究的专业人士,特别是对光束生成和光学性能分析感兴趣的科研工作者。 使用场景及目标:适用于需要进行光束生成和性能分析的实验室环境,旨在帮助研究人员更好地理解和优化光束特性和传播行为。 其他说明:本文不仅提供了详细的实验方法和步骤,还附有丰富的实验结果和数据分析,为后续研究提供了宝贵的参考资料。
内容概要:本文探讨了三电平NPC型有源电力滤波器(APF)的模型预测控制(MPC)中存在的开关频率过高问题及其解决方案。传统MPC方法会导致极高的开关频率,增加了系统的能耗和热量。通过引入滞环控制模块,可以在不大幅牺牲性能的情况下有效降低开关频率。具体来说,滞环控制通过在价值函数计算后增加一个判断条件,对状态切换进行惩罚,从而减少不必要的开关动作。实验结果显示,开关频率从4392Hz降至3242Hz,降幅达26.2%,虽然电流总谐波畸变率(THD)略有上升,但仍符合国家标准。此外,文中还提出了动态调整滞环宽度的方法,以进一步优化不同负载条件下的表现。 适合人群:从事电力电子、电力系统控制领域的研究人员和技术人员,特别是关注APF和MPC技术的人群。 使用场景及目标:适用于需要优化APF系统开关频率的研究和工程项目,旨在提高系统效率并降低成本。目标是在不影响系统性能的前提下,显著降低开关频率,减少能量损失和热管理难度。 其他说明:文章不仅提供了理论分析,还包括具体的实现代码片段,有助于读者理解和实践。同时,强调了在实际应用中需要注意的问题,如中点电位漂移等。
内容概要:本文介绍了三维POD DMD程序在处理原网格数据方面的独特优势和技术细节。首先阐述了该程序能读取结构化和非结构化网格数据及其拓扑关系,在生成模态数据过程中保持原始网格形态而不需要进行网格插值操作。接着展示了简化版本的Python代码片段,揭示了读取网格数据和生成模态数据的核心逻辑。最后提到提供的辅助学习资料如代码、视频教程、Word教程和实例数据,帮助用户深入理解并掌握该程序的应用。 适合人群:从事计算流体力学领域的研究人员和技术爱好者,尤其是那些希望提高数据处理效率的人群。 使用场景及目标:适用于需要处理复杂网格数据的研究项目,旨在简化数据处理流程,提升工作效率,同时保持数据的原始特性。 其他说明:文中不仅提供了理论性的讲解,还有具体的代码示例和丰富的学习资源,使读者可以边学边练,快速上手。
融合双向路由注意力的多尺度X光违禁品检测.pdf
嵌入式八股文面试题库资料知识宝典-Linux_Shell基础使用.zip
嵌入式八股文面试题库资料知识宝典-联发科2021武汉嵌入式软件开发.zip
基于有限体积法Godunov格式的管道泄漏检测模型研究.pdf
嵌入式八股文面试题库资料知识宝典-ARM常见面试题目.zip
基于LWR问题的无证书全同态加密方案.pdf
嵌入式八股文面试题库资料知识宝典-符坤面试经验.zip
内容概要:本文详细探讨了三电平逆变器在带不平衡负载条件下的仿真研究。主要内容包括仿真环境的搭建、不同拓扑结构的选择(如T型、I型NPC和ANPC)、延时相消法(DSC)和双二阶广义积分器(DSOGI)的正负序分离控制策略、SVPWM或SPWM调制技术的应用、双闭环PI控制以及直流均压控制。文中通过具体的参数设置(交流电压220V,直流侧电压750V)进行了详细的仿真实验,并展示了各个控制策略的效果。最终,通过仿真实验验证了所提出方法的有效性,确保了交流侧三相电压波形的对称性和电流波形的自适应调节。 适合人群:从事电力电子、电机驱动、新能源发电等领域研究的技术人员和研究人员。 使用场景及目标:适用于需要理解和掌握三电平逆变器在复杂负载条件下控制策略的研究人员和技术人员。目标是提高对三电平逆变器及其控制策略的理解,优化实际应用中的性能。 其他说明:本文不仅提供了理论分析,还包含了具体的仿真步骤和代码实现,有助于读者更好地理解和应用相关技术。
内容概要:本文介绍了如何使用Matlab/Simulink软件构建一个14自由度的四轮驱动-四轮转向(4WID-4WIS)整车动力学模型。该模型涵盖了整车纵向、横向、横摆、车身俯仰、侧倾、垂向跳动及四轮旋转和垂向自由度等多个方面,旨在全面反映车辆在不同工况下的动态行为。文中详细描述了各子系统的建模方法,包括转向系统、整车系统、悬架系统、魔术轮胎pac2002、车轮系统和PI驾驶员模块。同时,提供了Simulink源码文件、建模说明文档及相关参考资料,便于用户理解和应用。 适用人群:主要面向汽车工程师、研究人员以及对汽车动力学和Simulink建模感兴趣的学习者。 使用场景及目标:①帮助用户深入了解车辆在各种工况下的动态行为;②为车辆控制策略的制定提供理论支持和技术手段;③作为学习和研究整车动力学建模的有效工具。 其他说明:该模型采用模块化建模方法,提高了模型的清晰度和可维护性,同时也提升了建模效率。