随笔分类 - 汇编
摘要:https://zhuanlan.zhihu.com/p/26244141PCI的拓扑结构和枚举过程 https://www.sohu.com/a/300238384_505795首先我们来看一下在x86系统中,PCIe是什么样的一个体系架构。下图是一个PCIe的拓扑结构示例,PCIe协议支持256
阅读全文
摘要:Local APIC Local APIC 是在CPU内部的,每个逻辑处理核心都配有一的对应的local APIC。 Local APIC 能产生、发送和接受中断,CPU之间的通讯IPI也是通过Local APIC来实现的。 Local APIC 使用一组寄存器来控制,之前的APIC 是将寄存器映射
阅读全文
摘要:基本结构 8259 有8个中断 记为 IRQ0 - IRQ7, 优先级自高到底,IRQ0 > IRQ7 由于一个8259不够用所以 一般在 主8259的 IRQ2上接一个 从8259 从8259 也有IRQ0-IRQ7 但是由于是接在主8259上的所以记做IRQ8-IRQ15, 也有是接在IRQ2上
阅读全文
摘要:前言 我们首先来理清一些名词 x86, x64, IA-32, IA-32E, IA-64, AMD64, Intel64。 x86指的就是之前说的从8086发展起来的80X86系列架构包括80286,80386,80486.., 现在指32位架构。之后Intel抛弃x86搞了个独立的64位架构称之
阅读全文
摘要:CPU高速缓存 从80486在CPU内部新增了高速缓存,他是内存的缓存 CR0 中页新增了两位用于控制高速缓存的工作方式 CD 和 NW,他们控制逻辑如下 同时新增两个指令 INVD 清空高速缓存 WBINVD 先回写缓存然后清空缓存 具体没去深究怎么回是,其中使无效的意思就是能不能用 上面两条指令
阅读全文
摘要:简述 前面提到的分段机制获得了虚拟地址,那么分页直接就是实现了虚拟地址到物理地址的映射,因为枫叶机制可以被关闭,那么此时就相当于虚拟地址一对一的直接映射到物理地址上了 页固定位4K对齐,所以一个32位虚拟地址前20位用来寻找对应的页,后12位作为页内偏移用来定位具体位置。 分页机制 分页机制有两张表
阅读全文
摘要:基本概念 IOPL: IOPL 和 DPL 等类似是正对IO操作的特权保护级别,IOPL存储在 标志寄存器 EFLAGS 中,他指示了当前IO操作的保护级别,只有当CPL<= IOPL是IO操作才被允许 IO位图: IO位图存储在TSS段中,是按位表示的IO端口的随意读写权限,比如位M 就表示IO端
阅读全文
摘要:小结: 除CRX 和 DRX两组寄存器外,其他都是 写需要特权级 读不需要特权级 实模式 只能操作 GDT IDT 和 CRX 和 DRX两组寄存器 CRX 和 DRX这两组寄存器的所有操作都需要特权 寄存器读写指令 48位的段寄存器 格式: SGDT DST,LGDT SRC,SIDT DST,L
阅读全文
摘要:基本总结 1. 保护模式采用 [ 选择子 : 偏移地址] 的方式寻址,选择子包含 特权级 表选择 和表索引三部分,表选择只能是 GDT 和LDT 二选一 2. 表中存储着 存储段的段地址 也存储着称之为门和系统结构的数据,通过这些数据可以二次寻址,二次寻址是CPU自动完成的 3. 门 内存储着选择子
阅读全文
摘要:基本概念 80386将8086中的中断分成了两个 中断 由外部硬件引起的中断仍然较中断 异常 有内部中断引起的中断改叫异常,因为为他一般与代码的运行有关,而中断一般与代码的运行无直接关系 然后根据 恢复点,即异常处理完之后从哪里介质运行又细分为3类 故障 在指令运行前或运行中出异常,处理完异常后会重
阅读全文
摘要:特权级的基本概念 CPL 当前代码的特权级 = CS寄存器中的RPL RPL 选择子中要求的特权级 DLP 目标段中要求的特权级 好比如说我是ROOT 用户拥有root权限, 我是用读权限打开一个文件, 这个文件的权限是 777 CPL = ROOT 权限 RPL = 读权限 DLP = 777 数
阅读全文
摘要:总览图 说明 寄存器: CR0,CR1,CR2,CR3 的作用如上图所示,其中需要注意的就是PE和PG两个位开关,他们分别指示了分段内存和分页内存的启用和禁用,同时PE也指示CPU工作的模式是实模式还是保护模式,所以实模式是和分段的内存管理捆绑的 GDTR: 记录了全局段表的位置和长度,是全局共用的
阅读全文
摘要:根据最近学习的内容写了一个运行在裸机上的16位汇编程序github: AsmSystem练习内容: 1. 宏的使用 2. 子过程的调用 参数传递,%arg,%local的使用 3. 多文件编译 4. 文本打印 / 磁盘操作 / 字符串比较 / 键盘操作 / 内存操作 / SLEEP 5. 段切换 r
阅读全文
摘要:简述 80386相比于8086 地址线从20位扩展为32位,这意味着80386可以最多访问4G的内存,同时所有的寄存器都扩展为32位寄存器,80386扩展了原来的寄存器,增加了一些新的指令,并增加了新的寄存器 80386的寄存器主要分如下几类:通用寄存器,段寄存器,指令寄存器,标志位寄存器,系统地址
阅读全文
摘要:%include 格式 %include file.asm 说明 包含其他的asm源文件,可使用C常用的防止被重复包含的方法 %ifndef MACROS_MAC %define MACROS_MAC ; 文件内容 %endif %rep 格式 %rep 重复次数 XXXXX 要重复的代码内容 %e
阅读全文
摘要:简述 这一些预处理指令是为了方便我们使用堆栈传参的时候的程序调用的。 我们一般的调用过程如下 proc1: push 参数1 ; 参数1 压栈 push 参数2 ;参数2 压栈 push 参数3 ;参数2 压栈 call proc2 proc2: push bp ; bp内容压栈, 为的是保存bp寄
阅读全文
摘要:结构定义 格式 struc xxx .aaa resw 1 .bbb resw 1 endstruc 说明 他并非真正的结构体支持,而是相当于定义了一系列的LABEL,并且这些LABEL的地址都是相对于结构体开始处的偏移地址 所以 .aaa = 0; .bbb = 2;因为.aaa 占用了2个字节
阅读全文
摘要:上下文堆 解释 就是一个在编译期间由编译器维护的堆栈 之前说了预处理器的作用是在编译阶段执行一些代码,以简化或者增强汇编代码的能力,就像汇编代码本身执行的过程中需要一个堆栈存储一些信息一样,预处理器的指令在运行过程中也是需要存储一些信息的,那么这个上下文栈就是存储信息的地方 但是它比堆栈更强大,堆栈
阅读全文
摘要:基本格式 %if<condition> %elif<condition> ……;elif 的数量不限制 %elif<condition> %else ;else也可由可无 %endif 所以基本就是C 的语法 条件判断 指令 %if <condition> %elif <condition> 说明
阅读全文
摘要:简要说明 所谓预处理器,就是在编译阶段由编译器解释执行的代码,所以代码的结果应该是在编译阶段就能确定,否则就会报错。 强大的预处理器可以简化和增强汇编代码的能力。 单行宏 %define / %idefine 基本格式: %define a mov ax,1 %define a(p1,p2) mov
阅读全文

浙公网安备 33010602011771号