计算机汇编语言入门
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
这个可寻址的额外区域(0FFFF0H-10FFEFH)被称作高内 存
偏移量地址
理论上讲,偏移量地址的最大值和段起始地址的最大值,都 是 FFFFH 因此,可寻址到的实模式地址最大值为:
使用 HIMEM.SYS 驱动程序,系统就可以访问这块地址
缺省段寄存器与偏移量寄存器
微处理器对内存寻址,都是用一系列相应规则 这些规则在实模式和保护模式都有效,都是把段寄存器与偏 移量寄存器的内容,组合起来形成某一内存地址
基本运行环境
可寻址内存 通用用途寄存器 指数与基址寄存器 特殊用途寄存器 状态标志寄存器 浮点数,MMX,XMM 寄存器
可寻址内存
实模式
1 MB 空间 20-bit 地址
保护模式
4 GB 空间 32-bit 地址
实模式 Real mode
通过实模式操作,可以使 Intel 8086 使用 20-bit 地址,找到 内存中,最前面的 1MB 空间。 (Pentium 处理器中也使用这 个技术) 实模式操作
1. 在保护模式下,段寄存器中的内容是个选择器,从选择描述 符表中选出一个描述符 (descriptor),而不是段起始地址 2. 描述符中包含了内存中存储段的位置、长度、和访问权限等 信息
保护模式寻址原理
操作系统中的寻址模式
DOS 操作系统使用实寻址方式 保护模式是 Windows 系统的寻址方式 处理器开机时首先进入实寻址方式 从实模式向保护模式转换的过程:建立总体描述符表 (Global Descriptor Table GDT) 或本地描述符表 (Local Descriptor Table LDT),并在 CPU 的机器字 (machine status word MSW) 中启动保护模式
CISC 与 RISC
CISC - complex instruction set(复杂指令集)
指令集规模大 高级操作 需要微指令解析 例如:Intel 80x86 家族
RISC - reduced instruction set(精简指令集)
简单,原子级指令 指令集规模小 硬件可以直接执行 例如:
IA-32 微处理器体系结构
工作模式 基本运行环境 浮点数机制 intel 微处理器的发展史
工作模式
保护模式
原生模式(native mode) :Windows,Linux
实地址模式(实模式)
原生模式:MS-DOS
系统管理模式
电源管理,系统安全,系统错误诊断
虚拟 8086 模式
与保护模式并存 每个程序都有自己的 8086 计算机
读取内存
读取内存时,往往需要多个机器周期,原因是内存的反应速 度,大大低于 CPU 的处理速度,步骤包括:
将地址送到地址总线上 读入信号(RD)置位低 CPU 等待内存响应 读入信号(RD)变为 1,表示数据总线上是读到的数据
高速缓存
在CPU 内外的高速,但价格昂贵的静态 RAM
Level-1 缓存:CPU 内部 Level-2 缓存:CPU 外部
向下兼容
实模式使得为 8086/8088 写的程序能够在 80286 及以后的芯 片上运行,而不需要改动。
Intel 芯片的缺省模式
Intel 的芯片加电后,或进行过复位后,都是先进行实模式操 作
内存的第一个 1M 字节,被称作实内存,或传统存储系统。
段和偏移量
内存的实模式地址是由段地址和偏移量地址合成的 段地址的内容,存在一个段基址寄存器中,用来定义一个长 度为 64K-byte 的内存段的起始地址 偏移量地址是用来选在 64K-byte 大小的段内的具体位置的 ⇒ 段的大小 = 64K bytes
由 TI-bit 选择描述符来自总体描述符表 (GDT, TI=0) 还是本 地描述符表 (LDT, TI=1)
描述符选择器
描述符
描述符描述内存段的位置、长度、以及对该存储段的访问权 限 描述符存在于两种描述符表中:
1. 总体描述符表 (GDT) 存放任何程序都可以使用的程序段的定 义 2. 本地描述符表 (LDT) 存放某一特定程序使用的程序段的定义
分页寄存器
微处理器中的分页寄存器储存着分页的控制信息
分页寻址模式的逻辑地址
图 (a) 是分页寻址的逻辑地址 图 (b) 是 CR3 寄存器中的页目录起始地址内容
分页寻址模式工作步骤
分页系统在 Intel’s CPU 的工作步骤:
1. 内存系统被等分为若干等长度的页面 2. 每一页面的长度是 4K bytes 3. 任何数据/程序也被等分为 4K bytes 长度的页面,这些页面 将独立地被载入内存 4. 任何一个数据/程序字节,都有一个相应的逻辑地址 5. 页目录 (dir) 和页表 (page) 提供的是关于要找的数据在哪一 个页面上的信息 6. 偏移量 (offset) 提供的是数据在这个页面上是具体哪个字节 的信息
寄存器寻址
立即数寻址
直接寻址
寄存器间接寻址
基址加变址寻址
寄存器相对寻址
相对基址加变址寻址
堆栈寻址
堆栈
可以临时存放数据 存放进程的返回地址
Intel 8086 系列的堆栈内存由标出顶端位置的堆栈指针 (SP) 和堆栈段寄存器 (SS) 确定 数据进出堆栈的方式,采用后入先出 (LIFO last-in first-out) 机制
描述符选择器
描述符选择器,使用段寄存器,从两个描述符表中,选择 8192 个描述符中的一个
描述符选择器
在保护模式下,段寄存器的内容为:
1. 13-bit 的区域是描述符选择器 2. 1-bit 作为表选择 (TI) 3. 还有 2-bit 作为优先级选择 (requested privilege level RPL)
实模式内存寻址
实模式举例
举例:mov AX, [BX] 假设: 段寄存器中的内容:1000H 偏移量寄存器中的内容:F000H
实模式内存
Baidu Nhomakorabea
实模式寻址特点
20-bit 实模式地址可以在 1M-byte 的空间内(地址范围是 00000-FFFFFH) ,每 16-byte 开始一个新的段 由于实模式中的起始地址,都是以 16-byte 的倍数开始,被 称为段落(paragraph) 结果:
MOD-REG-R/M 区
MOD 区定义 R/M 的操作,并表明是否有置换发生 MOD=00 MOD=01 MOD=10 MOD=11 内存无置换 内存发生 8-bit 置换 内存发生 16/32-bit 置换 寄存器
REG 信息
代码 000 001 010 011 100 101 110 111
内存中的段
段重叠
程序与数据搬迁
使用段起始地址和偏移量的机制,使得搬迁成为可能 搬迁程序:
将程序放入内存中任何位置 无需改变即可执行
数据搬迁:
将数据存入内存中任何位置 无需改变程序直接使用
程序搬迁实例
寻址方式
操作数是某个操作需要的数据(例如:ADD) 寻址方式帮助我们找到内存中的任何一个数据(操作数)的 位置(即实模式中的物理地址或保护模式中的逻辑地址)进 行操作 CPU 越强大,就可以支持越多的寻址方式 Intel 的 8086 系列芯片(实模式)常用寻址方式包括:
x86 微处理器体系结构
基本微处理器设计
由时钟同步所有 CPU 操作 控制器 (CU) 协调各执行步骤的顺序 运算器 (ALU) 进行算术运算和逐位处理
时钟
同步所有 CPU 和总线操作 机器(时钟)周期是完成单个操作的时间 时钟用来触发事件
指令执行周期
取指令 译码 取操作数 执行指令 输出存储
段 CS SS DS ES FS GS 偏移量 EIP ESP, EBP EAX, EBX, ECX, EDX, ESI, EDI, 8-bit 或 32-bit 数 EDI 作为字符串指令 无 无 用途 指令地址 堆栈地址 数据地址 目标字符串地址 一般地址 一般地址
特殊用途寄存器
编码段寄存器(code segment register CS)用来定义编码段 的起始地址,指令指针(instruction pointer IP)用来指出下 条指令在指令段中的位置 堆栈数据放在堆栈段中,在内存中的起始地址由堆栈指针 (SP)或基指针(BP)中的内容确定 段可以被看成内存中可以上下移动的窗口,访问数据和代码 每个程序可由多个段组成,但只能一次访问四个段 (8086-80286)或六个段(80386 及以后芯片)
线性地址的形成
线性地址的形成
如果内存中 GDT 和 LDT 的内容如下图中所示,CS 中内容 为 83H,当 指令地址寄存器 IP 中内容为 100H 时,线性地 址是多少?
分页寻址模式
在 80386 及以后系统中的内存分页机制,可以将任何一个物 理地址用任意的逻辑地址表示出来 逻辑地址是由一个程序产生出来的 使用内存的分页机制,逻辑地址被转换成物理地址的过程, 并不需要用户看见
段落的大小 = 16 bytes 任何段落的起始地址,都是 16 的倍数
实模式的寻址范围
从 80286 开始(配备外部电路) ,到 80386 到以后的 Pentium Pro 芯片,都有个额外的 64K bytes 减 16 bytes 的 可寻址范围,条件是:
段起始地址是 FFFFH 系统中安装了 HIMEM.SYS 驱动程序
高速缓存命中(Hit) :需要读取的数据在高速缓存中 高速缓存不命中(Miss) :高速缓存中没有需要读取的数据
程序工作原理
多任务
操作系统(OS)同时运行多个程序 同一个程序中执行多个线程 操作系统排程机制,将多个 CPU 时间分配给每个运行中的 程序 快速任务切换
给用户的感觉是,所有程序在同时运行 微处理器必须支持任务切换
W=0 (Byte) AL CL DL BL AH CH DH BH
W=1 (Word) AX CX DX BX SP BP SI DI
W=1 (Word) EAX ECX EDX EBX ESP EBP ESI EDI
R/M 信息
机器码与汇编语言转换
机器码与汇编语言转换
保护模式寻址
保护模式寻址方式(在 80286 及以后的芯片中使用) ,可以 访问 1M 传统内存之外的内存中的数据和程序,同时也仍能 访问 1M byte 传统内存空间 段寄存器的内容在不同模式,对微处理器的意义并不相同
1. 立即数寻址 (Immediate Mode) 2. 寄存器寻址 (Register Mode) 3. 寄存器间接寻址 (Register-Indirect Mode) 4. 直接寻址 (Direct Addressing Mode) 5. 间接寻址 (Indirect Addressing Mode) 6. 相对寻址 (Relative Addressing Mode) 7. 变址寻址 (Indexed Addressing Mode)
两个描述符表各自都可以存放 8192 个描述符
描述符的内容
每个描述符的长度为 8-byte 描述符中的起始地址 (base address) 信息,给出了程序段的 起始位置
描述符的内容
段的长度 (segment limit) 存放着段中最大偏移量的值 举例
如果,某存储段的起始位置为 F00000H,结束位置是 F000FFH,则起始地址是 F00000H,而段的长度是 FFH
在 80286 系统中,保护模式可以访问的内存段
大小为 1-64K bytes 所有段都位于可以访问的 16M bytes 内存系统内
在 80386 及以后的系统中,保护模式可以访问的内存段
大小为 1-1M bytes ,或 4K-4G bytes 所有段都位于可以访问的 4G bytes 内存系统内
分页寻址模式工作步骤
举例
在 16M bytes 的内存中以 C8000H-EFFFFH 为地址的位置, 必须被转向以 110000-137FFFH 为地址的页面,其他页面指 向正常内存的地址
ARM (Advanced RISC Machine) DEC Alpha (被 Compaq 收购,又被收入 HP)
Intel 架构指令格式
操作码
操作码
D-bit 指明数据流的方向,如果 D=0,REG → R /M ,如果 D=1,R /M → REG W-bit 指定操作数是一个字节 W=0(8-bit 模式)或双字节 W=1(16-bit 模式)