钱晓捷,微机原理与接口技术 ·第 4版 —— 基于 IA-32处理器和 32位汇编语言第 2 章处理器结构
2.1 处理器功能结构
2.2 寄存器
2.3 存储器组织
2.4 汇编语言基础
2.5 数据寻址方式微机原理与接口技术
·

4
版机械工业出版社
2.1 处理器功能结构
从应用角度看到的处理器内部结构
Intel 386
8位 CPU
Intel Pntium
Intel 8086
微机原理与接口技术
·

4
版机械工业出版社
2.1.1 处理器基本结构
1,算术逻辑单元
2,寄存器
3,指令处理单元内部数据总线控制总线数据总线地址总线暂存器 累加器
ALU
标志寄存器指令寄存指令译码时序和控制逻辑通 用寄存器组地 址寄存器组地址总线控制数据总线控制微机原理与接口技术
·

4
版机械工业出版社
1,算术逻辑单元 ALU
计算机的运算器,负责处理器所能进行的各种运算,主要就是算术运算和逻辑运算
累加器结构的处理器累加器 ( Accumulator)
提供一个操作数保存运算结果
标志 ( Flag) 寄存器反映运算结果的辅助信息例如,有无进借位,是否为零,是否为负等也称为程序状态字 ( PSW)
微机原理与接口技术
·

4
版机械工业出版社
2,寄存器( Register)
处理器内部需要高速存储单元,用于暂时存放程序执行过程中的代码和数据
透明寄存器对应用人员不可见,不能直接控制的寄存器
可编程 ( Programmable) 寄存器具有引用名称,供编程使用通用寄存器数量较多,使用频度较高,具有多种用途专用寄存器只用于特定目的微机原理与接口技术
·

4
版机械工业出版社
3,指令处理单元
处理器的控制单元,它控制指令的执行和信息的传输
指令执行的过程取指:指令处理单元将指令从主存取出,并通过总线传输到处理器内部的指令寄存器译码:指令处理单元通过指令译码电路获得该指令的功能执行:指令处理单元的时序和控制逻辑按一定的时间顺序发出和接收相应信号,完成指令所要求的操作取指 译码 执行
2.1.2 8086的功能结构
1 2 3 4 5 6
内部寄存器
IP
ES
SS
DS
CS
输入 /输出控制电路外部总线执行部分控制电路ALU
标志寄存器
AH AL
BH BL
CH CL
DH DL
SP
BP
SI
DI
通用寄存器地址加法器指令队列执行单元 ( EU) 总线接口单元 ( BIU)
16位
20位
16位微机原理与接口技术
·

4
版机械工业出版社
1,总线接口单元和执行单元
总线接口单元指令队列,指令指针,段寄存器,地址加法器和总线控制逻辑管理与系统总线的接口,负责对存储器和外设访问
执行单元
ALU,通用寄存器,标志寄存器和控制电路负责指令译码,数据运算和指令执行
指令执行的两个主要阶段:取指和执行取指:从主存取出指令代码进入指令队列执行:译码指令,并发出有关控制信号实现指令功能取指 译码 执行指令演示微机原理与接口技术
·

4
版机械工业出版社
2,指令预取( Prefetch)
8086处理器的指令读取,实际上是指令预取
8086处理器维护着长度为 6个字节的指令队列
EU单元译码,执行指令,同时 BIU单元读取后续指令
BIU和 EU两个单元相互独立,可以并行操作
最简单的指令流水线技术
节省许多取指时间,提高了工作效率
程序转移将使预取指令作废,降低了效率微机原理与接口技术
·

4
版机械工业出版社
2.1.3 80386的功能结构
总线接口单元,为处理器提供同外部的接口
指令预取单元,先行读取指令
指令译码单元,从预取队列中取来指令,译码成微指令代码
执行单元,ALU,乘法器,除法器和移位器等
分段单元,逻辑地址变换成线性地址
分页单元,将线性地址变换成物理地址各功能部件可以并行工作,进行流水线处理示意图微机原理与接口技术
·

4
版机械工业出版社
2.1.4 Pentium的功能结构
1,超标量流水线,2条指令流水线
2,分离 Cache,指令 Cache和数据 Cache
3,动态分支预测,预测程序执行顺序
4,其他性能增强的浮点处理单元 FPU
常用指令固化改进复杂指令的微代码算法节能特性电源电压,3.3V
示意图微机原理与接口技术
·

4
版机械工业出版社
2.2 寄存器
寄存器就是暂时存放数据的地方
通过编写程序,由处理器执行指令控制
IA-32处理器基本执行环境:
8个 32位通用寄存器
6个 16位段寄存器
32位标志寄存器
32位指令指针对应用人员(程序员)来说,
处理器被抽象为可编程寄存器示意图微机原理与接口技术
·

4
版机械工业出版社
2.2.1 通用寄存器
处理器最常使用的整数通用寄存器
可用于保存整数数据,地址等
8个 32位通用寄存器
EAX,EBX,ECX,EDX,ESI,EDI,EBP,ESP
8个 16位通用寄存器
AX,BX,CX,DX,SI,DI,BP,SP
8个 8位通用寄存器
AH,AL,BH,BL,CH,CL,DH,DL
存取 16位寄存器,高 16位不受影响存取 8位寄存器,16/32位寄存器其他位不受影响示意图微机原理与接口技术
·

4
版机械工业出版社通用寄存器的名称
EAX:累加器 (Accumulator)
EBX:基址寄存器 (Base)
ECX:计数器 (Counter)
EDX:数据寄存器 (Data)
ESI:源变址寄存器 (Source Index)
EDI:目的变址寄存器 (Destination Index)
EBP:基址指针 (Base Pointer)
ESP:堆栈指针 (Stack Pointer)
示意图微机原理与接口技术
·

4
版机械工业出版社
2.2.2 标志寄存器
标志 ( Flag)
反映指令执行结果或控制指令执行形式用一个或多个二进制位表示一种标志
0或 1的不同组合表达标志的不同状态
8086支持 16位标志寄存器 FLAGS
IA-32处理器形成 32位 EFLAGS标志寄存器状态标志:记录指令执行结果的辅助信息控制标志:方向标志 DF,仅用于串操作指令系统标志:控制操作系统或核心管理程序的操作方式示意图微机原理与接口技术
·

4
版机械工业出版社
1,状态标志
最基本的标志,有 6个
用来记录指令执行结果的辅助信息
加减运算和逻辑运算指令是主要设置它们
其他有些指令的执行也会相应地设置它们
处理器主要使用其中 5个构成各种条件,分支指令判断这些条件实现程序分支
OF
11
DF
10
IF
9
TF
8
SF
7
ZF
6
0
5
AF
4
0
3
PF
2
1
1
CF
0
微机原理与接口技术
·

4
版机械工业出版社进位标志 CF( Carry Flag)
当加减运算结果的最高有效位 有进位 ( 加法 )
或 借位 ( 减法 ) 时,进位标志置 1,即 CF= 1;
否则 CF= 0
针对无符号整数,判断加减结果是否超出表达范围
N个二进制位表达无符号整数的范围:
0~ 2N-1
8位,0~+ 255
16位,0~+ 65535
32位,0~+ 232- 1
微机原理与接口技术
·

4
版机械工业出版社进位标志 CF:举例
8位二进制数相加:
00111010+ 01111100= 10110110
十六进制表达,3A+ 7C= B6
转换成十进制数,58+ 124= 182
没有产生进位,CF= 0
8位二进制数相加:
10101010+ 01111100= [1]00100110
十六进制表达,AA+ 7C= [1]B6
转换成十进制数,170+ 124= 294= 256+ 38
产生进位,CF= 1
0< 182< 255
进位 1表达 256
微机原理与接口技术
·

4
版机械工业出版社溢出标志 OF( Overflow Flag)
有符号数 加减结果 有溢出,则 OF= 1;否则
OF= 0
针对有符号整数,判断加减结果是否超出表达范围
N个二进制位表达有符号整数的范围:
- 2N- 1~ 2N- 1-1
8位:- 128~+ 127
16位:- 32768~+ 32767
32位:- 231~+ 231- 1
微机原理与接口技术
·

4
版机械工业出版社溢出标志 OF:举例
8位二进制数相加:
00111010+ 01111100= 10110110
十六进制表达,3A+ 7C= B6
转换成十进制数,58+ 124= 182
超出范围,OF= 1
8位二进制数相加:
10101010+ 01111100= [1]00100110
十六进制表达,AA+ 7C= [1]B6
转换成十进制数,-86+ 124= 38
没有超出范围,OF= 0
182> 127
补码 AAH表达 -86
微机原理与接口技术
·

4
版机械工业出版社进位和溢出的区别
进位标志反映无符号整数运算结果是否超出范围有进位,加上进位或借位后运算结果仍然正确
溢出标志反映有符号整数运算结果是否超出范围有溢出,运算结果已经不正确
处理器按照无符号整数求得结果设置进位标志 CF
设置溢出标志 OF
程序员决定操作数是无符号数,关心进位操作数是有符号数,注意溢出微机原理与接口技术
·

4
版机械工业出版社溢出标志的判断
处理器硬件判断规则最高位和次高位同时有进位或同时无进位,无溢出;最高位和次高位进位状态不同,有溢出
人工判断的简单规则只有当两个相同符号数相加 ( 含两个不同符号数相减 ),而运算结果的符号与原数据符号相反时,产生溢出;其他情况下,不会产生溢出
00111010
+ 01111100
10110110
正数正数负数最高位次高位微机原理与接口技术
·

4
版机械工业出版社零标志 ZF( Zero Flag)
运算 结果为 0,则 ZF= 1,否则 ZF= 0
结果是 0,
ZF标志不是 0 !
举例
8位二进制数相加:
00111010+ 01111100= 10110110
结果不是 0,ZF= 0
8位二进制数相加:
10000100+ 01111100= [1]00000000
结果是 0,ZF= 1 结果进位微机原理与接口技术
·

4
版机械工业出版社符号标志 SF( Sign Flag)
运算 结果最高位为 1,则 SF= 1;否则 SF= 0
举例
8位二进制数相加:
00111010+ 01111100= 10110110
最高位= 1,SF= 1
8位二进制数相加:
10000100+ 01111100= [1]00000000
最高位= 0,SF= 0 结果进位最高位=符号位=
SF
微机原理与接口技术
·

4
版机械工业出版社奇偶标志 PF( Parity Flag)
当运算结果最低字节中,1” 的个数为零或偶数 时,PF= 1;否则 PF= 0
举例
8位二进制数相加:
00111010+ 01111100= 10110110
,1” 的个数为 5个,PF= 0
8位二进制数相加:
10000100+ 01111100= [1]00000000
,1” 的个数为 0个,PF= 1 结果进位仅最低 8位,1”的个数微机原理与接口技术
·

4
版机械工业出版社
2,控制标志
方向标志 DF( Direction Flag)
仅用于串操作指令,控制地址的变化方向设置 DF= 0,每次串操作后的存储器地址就自动增加,即从低地址向高地址处理数据串设置 DF= 1,每次串操作后的存储器地址就自动减少,即从高地址向低地址处理数据串
执行 CLD指令设置 DF= 0
执行 STD指令设置 DF= 1
微机原理与接口技术
·

4
版机械工业出版社
3,系统标志
中断允许标志 IF( Interrupt-enable Flag)
陷阱标志 TF( Trap Flag),单步标志
I/O特权层标志 IOPL( I/O Privilege Level)
任务嵌套标志 NT
虚拟 8086方式标志 VM
恢复标志 RF
对齐检测标志 AC
CPU识别标志 ID( Identification Flag)
虚拟中断标志 VIF
虚拟中断挂起标志 VIP
微机原理与接口技术
·

4
版机械工业出版社
2.2.3 专用寄存器
专用寄存器往往只用于特定指令或场合
1,指令指针寄存器 EIP
保存将要执行的指令在主存的地址
2,段寄存器段是安排相关代码或数据的主存区域段寄存器表明段在主存中的位置
6个 16位段寄存器,CS DS SS ES FS GS
3,其他寄存器浮点寄存器,多媒体寄存器系统专用寄存器微机原理与接口技术
·

4
版机械工业出版社
2.3 存储器组织
物理存储器以字节为基本存储单位
每个存储单元被分配一个唯一的地址
这个地址就是物理地址
物理地址空间从 0开始顺序编排,直到处理器支持的最大存储单元
8086处理器支持 1MB存储器,00000H~ FFFFFH
IA-32处理器支持 4GB存储器,00000000H~ FFFFFFFFH
操作系统利用存储管理单元进行存储管理,程序并不直接寻址物理存储器
IA-32处理器提供 3种存储模型,用于程序访问存储器微机原理与接口技术
·

4
版机械工业出版社
2.3.1 存储模型
1,平展存储模型 ( Flat memory model)
存储器是一个连续的地址空间--线性地址空间
IA-32处理器支持 4GB容量线性地址空间
2,段式存储模型存储器由一组独立的地址空间--段 ( Segment)
每个段都可以达到 4GB容量在处理器内部,所有的段都被映射到线性地址空间
3,实地址存储模型
8086处理器的存储模型段式存储模型的特例线性地址空间最大为 1MB容量,段最大为 64KB
微机原理与接口技术
·

4
版机械工业出版社
2.3.2 工作方式
1,保护方式 ( Protected mode)
IA-32处理器固有的工作状态具有强大的段页式存储管理和特权与保护能力使用全部 32条地址总线,可寻址 4GB物理存储器使用平展或段式存储模型利用虚拟 8086方式支持实地址 8086软件
2,实地址方式 ( Real-address mode)
可以进行 32位处理的快速 8086
只能寻址 1MB物理存储器空间,每个段不超过 64KB
可以使用 32位寄存器,32位操作数和 32位寻址方式只能支持实地址存储模型
3,系统管理方式实现供节能和系统安全管理微机原理与接口技术
·

4
版机械工业出版社
2.3.3 逻辑地址( Logical Address)
在处理器内部,程序员编程时采用的地址
逻辑地址= 段基地址 ∶ 偏移地址段基地址 =在主存中的起始地址偏移地址 =距离段基地址的位移量
某个存储单元可以有多个逻辑地址,但只有一个唯一的物理地址示意图逻辑地址 线性地址 物理地址编程使用 处理器转换 地址总线输出微机原理与接口技术
·

4
版机械工业出版社
1,基本段
编写应用程序时,涉及三类基本段:
代码段 ( Code Segment),存放指令代码程序的指令代码必须安排在代码段
数据段 ( Data Segment),存放数据程序的数据默认存放在数据段数据也可放在其他段
堆栈段 ( Stack Segment),堆栈区域程序使用的堆栈一定在堆栈段微机原理与接口技术
·

4
版机械工业出版社基本段的逻辑地址
代码段 ( Code Segment)
段基地址:代码段寄存器 CS指示偏移地址:指令指针寄存器 EIP保存
数据段 ( Data Segment)
段基地址:数据段寄存器 DS指示有时也用附加段寄存器 ES,段寄存器 FS和 GS指示偏移地址:各种存储器寻址方式计算出来
堆栈段 ( Stack Segment)
段基地址:堆栈段寄存器 SS指示偏移地址:堆栈指针寄存器 ESP保存微机原理与接口技术
·

4
版机械工业出版社
2,段选择器
16位段寄存器保存 16位段选择器
段选择器指向 64位段描述符 ( Descriptor)
段描述符包括段基地址平展存储模型:指向地址 0位置段式存储模型:指向线性地址空间不同的段实地址存储模型:保存段基地址的高 16位段选择器
16位段寄存器 64位段描述符 主存储器空间段基地址 数据或指令微机原理与接口技术
·

4
版机械工业出版社
3,保护方式的地址转换
平展存储模型段基地址为 0,偏移地址等于线性地址
段式存储管理段基地址和偏移地址都是 32位段基地址加上偏移地址形成线性地址
线性地址映射到物理地址不使用分页机制:线性地址与物理地址对应使用分页机制:硬件支持下由操作系统或核心程序管理,构成虚拟存储器,转换成物理地址应用程序看到的都是线性地址空间微机原理与接口技术
·

4
版机械工业出版社
4,实地址方式的地址转换
主存空间 1MB( = 220 B),00000H~ FFFFFH
程序设计时分段管理,但有两个限制:
每个段最大为 64KB
段只能开始于低 4位地址全为 0的物理地址处
逻辑地址=段地址 ∶ 偏移地址
16位段寄存器保存 20位段起始地址的高 16位偏移地址也用 16位数据表示
物理地址= 段地址 × 16+偏移地址左移二进制 4位(十六进制 1位)
示意图微机原理与接口技术
·

4
版机械工业出版社
2.4 汇编语言基础
汇编语言以助记符形式表示计算机指令助记符 ( mnemonic) 是便于人们记忆,并能描述指令功能和指令操作数的符号助记符是表明指令功能的英语单词或其缩写
汇编格式指令以及使用它们编写程序的规则就形成汇编语言 ( Assembly Language)
汇编语言程序:用汇编语言书写的程序
汇编程序:将汇编语言程序,汇编,成机器代码目标模块的程序汇编语言程序与汇编程序是两个概念微机原理与接口技术
·

4
版机械工业出版社
2.4.1 指令代码格式( Instruction format)
IA-32处理器采用可变长度指令格式
操作码可选的指令前缀 ( 用于扩展指令功能 )
1~ 3字节的主要操作码
操作数可选的寻址方式域 ( 包括 ModR/M和 SIB字段 )
可选的位移量可选的立即数微机原理与接口技术
·

4
版机械工业出版社指令代码示例
数据传送指令 MOV( 取自 Move)
将数据从一个位置传送到另一个位置类似高级语言的赋值语句
mov dest,src;源操作数 src:被传送的数据或数据所在的位置;目的操作数 dest:数据将要传送到的位置
mov eax,ebx ; 机器代码,8B C3
mov eax,[ebx] ; 机器代码,8B 03
mov eax,[ebx+esi*4+80h]; 机器代码,8B 84 B3 80 00 00 00
指令功能微机原理与接口技术
·

4
版机械工业出版社
2.4.2 语句格式
程序由语句组成
一个语句常占一行 ( MASM有续行符,\” )
一个语句不超过 132个字符,4个部分
执行性语句,表达处理器指令 ( 硬指令 )
标号,硬指令助记符 操作数,操作数 ;注释
说明性语句,表达伪指令,控制汇编方式名字 伪指令助记符 参数,参数, ;注释这是 MASM语法,但具有一般性微机原理与接口技术
·

4
版机械工业出版社
1,标号与名字
标号,执行性语句中冒号分隔表示处理器指令在主存中的逻辑地址指示分支,循环等程序的目的地址
名字,说明性语句中空格或制表符分隔变量名,段名,子程序名等反映变量,段和子程序等的逻辑地址标号和名字是用户自定义的标识符微机原理与接口技术
·

4
版机械工业出版社标识符( Identifier)
最多由 31个字母,数字及规定的特殊符号 ( 如 _、
$,?,@) 组成,不能以数字开头
一个源程序中,用户定义的每个标识符 必须唯一
不能是 汇编程序采用的 保留字
保留字 ( Reserved Word) 是编程语言本身需要使用的各种具有特定含义的标识符,也称为关键字硬指令助记符,MOV
伪指令助记符,BYTE
操作符,OFFSET
寄存器名,EAX
取名原则类似高级语言默认不区别大小写字母
,OPTION CASEMAP:NONE,伪指令告知 MASM 区别用户定义标识符的大小写微机原理与接口技术
·

4
版机械工业出版社
2,助记符
助记符:帮助记忆指令功能的符号硬指令助记符对应处理器指令,表示一种处理器操作伪指令助记符表达一个汇编命令
处理器指令示例:传送指令 MOV
伪指令示例:字节变量定义助记符,BYTE ( 或 DB)
功能:在主存中占用若干的存储空间,用于保存变量值,该变量以字节为单位存取
msg byte 'Hello,Assembly !',13,10,0
微机原理与接口技术
·

4
版机械工业出版社
3,操作数和参数
处理器指令的操作数:表示参与操作的对象具体的常量保存在寄存器的数据保存在存储器中的变量逗号前常是目的操作数,逗号后常是源操作数
伪指令的参数:
常量,变量名,表达式等可以有多个,参数之间用逗号分隔
msg byte 'Hello,Assembly !',13,10,0
mov eax,offset msg
微机原理与接口技术
·

4
版机械工业出版社
4,注释
语句中分号后的内容是注释对指令或程序进行说明汇编程序不对它们做任何处理注释利于阅读,应养成书写注释的好习惯
语句的 4个组成部分要用分隔符分开标号后的 冒号注释前的 分号操作数间和参数间的 逗号分隔其他部分采用一个或多个 空格 或 制表符注释使用英文或中文均可分隔符都是英文标点良好的语句格式有利于编程微机原理与接口技术
·

4
版机械工业出版社
2.4.3 源程序框架; eg0000.asm in Windows Console
include io32.inc ; 包含 32位输入输出文件
.data ; 定义数据段
; 数据定义 ( 数据待填 )
.code ; 定义代码段
start,; 程序执行起始位置
; 主程序 ( 指令待填 )
exit 0 ; 程序正常执行结束
; 子程序 ( 指令待填 )
end start ; 汇编结束微机原理与接口技术
·

4
版机械工业出版社
1,包含伪指令 INCLUDE
将常用的常量定义,过程说明,共享的子程序库等内容进行声明 ( 相当于 C和 C++语言中,
包含头文件的作用 )
IO32.INC是配合本书的包含文件
前 3个语句:
.686 ; 32位指令
.model flat,stdcall; 选择平展模型,标准调用规范
option casemap:none;告知 MASM区分用户定义标识符的大小写微机原理与接口技术
·

4
版机械工业出版社
2,段的简化定义
数据段定义伪指令,DATA创建一个数据段
代码段定义伪指令,CODE创建一个代码段
堆栈段由 Windows维护,用户不必设置
程序开始执行的位置应用一个标号 ( 例如,START)
汇编结束 END指令的参数
应用程序执行结束语句,EXIT 0” 将控制权交还操作系统提供给操作系统一个返回代码通常用 0表示执行正确
源程序汇编结束 END语句执行结束 ≠汇编结束微机原理与接口技术
·

4
版机械工业出版社
〔 例 2-1〕 信息显示程序
在数据段给出这个字符串形式的信息:; 数据段
msg byte 'Hello,Assembly!',13,10,0; 定义要显示的字符串
在代码段编写显示字符串的程序:; 代码段
mov eax,offset msg; 指定字符串的偏移地址
call dispmsg; 调用 I/O子程序显示信息完整程序微机原理与接口技术
·

4
版机械工业出版社
3,输入输出子程序库
键盘输入和显示器输出的 I/O子程序
含 IO32.INC和 IO32.LIB,需要包含文件声明
源程序文件开始使用包含命令声明
INCLUDE IO32.INC
子程序调用方法
MOV EAX,入口参数
CALL 子程序名
宏调用方法宏名 入口参数宏名 WriteString
子程序名 DISPMSG
入口参数 EAX=字符串地址功能说明 显示字符串 ( 以 0结尾 )
输入子程序输出子程序微机原理与接口技术
·

4
版机械工业出版社
2.4.4 开发过程微机原理与接口技术
·

4
版机械工业出版社
1,开发软件
抽取 MASM 6.11和 Visual C++ 6.0集成开发环境中有关文件构造基本开发软件包
BIN子目录:进行汇编,连接及配套的程序文件
MASM目录,I/O库,包含文件以及批处理文件
默认安装到 D分区的 MASM目录
快速开发方法资源管理器中双击快捷方式进入 MASM目录简单命令生成可执行文件
MAKE32 eg0201
操作演示微机原理与接口技术
·

4
版机械工业出版社
2,源程序的编辑
源程序文件是无格式文件,纯文本类型
以 ASM为扩展名,使用任何文本编辑器
Windows的记事本 Notepad
DOS中的全屏幕文本编辑器 EDIT
其他程序开发工具中的编辑环境专用于源程序文件编写的文本编辑软件,例如
UltraEdit32
本书源程序文件的命名规则
EG=例题,EX=习题
前 2位数字=章号,后 2位数字 =序号微机原理与接口技术
·

4
版机械工业出版社
3,源程序的汇编
生成目标模块文件 (,OBJ)
MASM 6.x的汇编程序是 ML.EXE
BIN\ML /c /coff eg0201.asm
参数,/c” ( 小写 ) 实现源程序的汇编参数,/coff” ( 小写字母 ) 表示生成 COFF格式的目标模块文件温馨提示,将源文件放在 MASM目录温馨提示,ML.EXE的参数 区别 大小写微机原理与接口技术
·

4
版机械工业出版社
4,目标文件的连接
能把一个或多个目标文件和库文件合成一个可执行文件
32位连接程序被更名为 LINK32.EXE
BIN\LINK32 /subsystem:console eg0201.obj
,/subsystem:console” 表示生成 Windows控制台 ( Console) 环境的可执行文件
,/subsystem:windows” 生成 Windows图形窗口的可执行文件温馨提示,使用批处理文件方便操作温馨提示,汇编程序只指出语法错误微机原理与接口技术
·

4
版机械工业出版社
5,可执行文件的运行
进入控制台 ( 或模拟 DOS) 环境
在命令行提示符下输入文件名 ( 可以省略扩展名 ),按下回车键运行
eg0201.exe
运行错误,就需要静态排错:阅读分析源程序动态排错:利用调试程序温馨提示,不要在 Windows下双击运行操作演示微机原理与接口技术
·

4
版机械工业出版社
5,列表文件
列表文件 (,LST) 含有源程序和目标代码
BIN\ML /c /coff /Fl eg0201.asm
,/Fl” 创建列表文件
( 大写 F,小写 l,不是数字 1)
列表文件有两部分内容第一部分:源程序及其代码第二部分:各种标识符
错误 Error:比较严重的语法错误
警告 Warning:不太关键的语法错误操作演示微机原理与接口技术
·

4
版机械工业出版社
2.5 数据寻址方式
指令有两部分:操作码和操作数操作码:处理器要执行哪种操作不可缺少,用助记符表示操作数:指令执行的参与者各种操作的对象,需要通过地址指示
数据寻址方式:通过地址查找数据 ( 操作数 )
立即数寻址:数据与指令操作码一起,用常量表达寄存器寻址:数据在寄存器中,用寄存器名表示存储器寻址:数据在主存中,用存储器地址代表微机原理与接口技术
·

4
版机械工业出版社
2.5.1 立即数寻址
操作数紧跟操作码,是机器代码的一部分
操作数从指令代码中立即得到,即立即数
( Immediate),用常量形式直接表达
立即数寻址方式只用于源操作数,常用来给寄存器和存储单元赋值
例如,MOV EAX,33221100H
机器代码,B8 00 11 22 33
操作码,B8
立即数,33221100
示意图微机原理与接口技术
·

4
版机械工业出版社
2.5.2 寄存器寻址
操作数存放在处理器的内部寄存器中
用寄存器名表示它的内容
绝大多数指令采用通用寄存器寻址
部分指令支持专用寄存器,例如段寄存器
寄存器寻址方式简单快捷,最常使用
例如,MOV EBX,EAX
32位通用寄存器,EAX EBX ECX EDX ……
16位通用寄存器,AX BX CX DX ……
8位通用寄存器,AHAL BH BL ……
微机原理与接口技术
·

4
版机械工业出版社
2.5.3 存储器寻址
操作数在主存中,通过存储器地址指示
编程时,存储器地址使用包含段选择器和偏移地址的逻辑地址段选择器 ( 段寄存器 ) 指示段基地址默认规定:数据在 DS指向的数据段; EBP或 ESP作为基地址,数据在 SS指向的堆栈段显式说明:使用段超越指令前缀,段寄存器名后跟英文冒号偏移地址由各种寻址方式计算,常被称为有效地址 EA( Effective Address)
微机原理与接口技术
·

4
版机械工业出版社
1,段寄存器的默认和超越访问存储器的方式 默认 可超越 偏移地址取指令 CS 无 EIP
堆栈操作 SS 无 ESP
一般数据访问 DS CS ES SS FS GS 有效地址 EA
BP基址的寻址方式 SS CS ES DS FS GS 有效地址 EA
串操作的源操作数 DS CS ES SS FS GS ESI
串操作的目的操作数 ES 无 EDI
主存操作数常通过变量形式引用一般不需要使用段超越前缀指令微机原理与接口技术
·

4
版机械工业出版社
2,偏移地址的组成
32位有效地址
= 基址寄存器+ ( 变址寄存器 × 比例 ) +位移量基址寄存器:任何 8个 32位通用寄存器之一变址寄存器:除 ESP之外的任何 32位通用寄存器之一比例,1,2,4或 8
位移量,8或 32位有符号值
16位有效地址
= 基址寄存器+变址寄存器+位移量基址寄存器,BX或 BP
变址寄存器,SI或 DI
位移量,8或 16位有符号值 多种主存寻址方式微机原理与接口技术
·

4
版机械工业出版社
3,直接寻址
有效地址只有位移量部分,直接包含在指令代码中
常用于存取变量
例如:
MOV ECX,COUNT ;COUNT是变量
MOV ECX,DS:[405000H]
指令代码,8B 0D 00 50 40 00
操作码和寻址方式,8B 0D
操作数:有效地址 00405000H
示意图微机原理与接口技术
·

4
版机械工业出版社
4,寄存器间接寻址
有效地址存放在寄存器中 (寄存器内容=偏移地址 )
MASM用中括号括起寄存器
可以方便地对数组的元素或字符串的字符进行操作
寄存器间接寻址没有说明存储单元类型
例如:
mov edx,[ebx]
mov [esi],ecx
微机原理与接口技术
·

4
版机械工业出版社
5,寄存器相对寻址
有效地址是寄存器内容与位移量之和
也可以方便地对数组的元素或字符串的字符进行操作
例如:
mov esi,[ebx+4] ;位移量,4
mov edi,[ebp-08h] ;位移量,-08H
mov esi,count[ebx] ;位移量,COUNT
主存以字节为可寻址单位地址的加减是以字节为单位微机原理与接口技术
·

4
版机械工业出版社
6,变址寻址
使用变址寄存器寻址操作数
便于支持两维数组等数据结构
例如:
mov edi,[ebx+esi]
mov edi,[ebx][esi]; 基址变址寻址,功能,EDI= DS:[EBX+ESI]
mov eax,[ebx+edx+80h]
mov eax,80h[ebx+edx]
mov eax,80h[ebx][edx];相对 基址变址寻址功能,EAX= DS:[EBX+EDX+80H]
微机原理与接口技术
·

4
版机械工业出版社
7,带比例的变址寻址
变址寄存器内容乘以比例 1( 可省略 ),2,4或 8
的变址寻址
比例 1,2,4和 8对应 8,16,32和 64位数据的字节个数,便于以数组元素为单位寻址相应数据
例如:
mov eax,[ebx*4] ; 带比例的变址寻址
mov eax,[esi*2+80h]; 带比例的相对变址寻址
mov eax,[ebx+esi*4]; 带比例的基址变址寻址
mov eax,[ebx+esi*8-80h]; 带比例的相对基址变址寻址微机原理与接口技术
·

4
版机械工业出版社
2.5.4 数据寻址的组合
立即数 imm
通用寄存器 reg
存储器操作数 mem
微机原理与接口技术
·

4
版机械工业出版社
〔 例 2-2〕 数据寻址程序- 1; 数据段
00000000 12345678
9ABCDEF0
00000000
00000000
00003721
count dword 12345678h,9abcdef0h,0,0,3721h
微机原理与接口技术
·

4
版机械工业出版社
〔 例 2-2〕 数据寻址程序- 2; 代码段
00000000 B8 33221100
mov eax,33221100h; EAX=33221100H( 立即数寻址 )
00000005 8B D8
mov ebx,eax ; EBX=EAX( 寄存器寻址 )
00000007 8B 0D 00000000 R
mov ecx,count; ECX=12345678H(直接寻址 )
0000000D BB 00000000 R
mov ebx,offset count; EBX=count变量的有效地址 ( 立即数寻址 )
微机原理与接口技术
·

4
版机械工业出版社
〔 例 2-2〕 数据寻址程序- 3
00000012 8B 13
mov edx,[ebx]; EDX=12345678H( 寄存器间接寻址 )
00000014 8B 73 04
mov esi,[ebx+4]; ESI=9ABCDEF0H( 寄存器相对寻址 )
00000017 BE 00000004
mov esi,4; ESI=4( 立即数寻址 )
0000001C 8B BE 00000000 R
mov edi,count[esi]; EDI=9ABCDEF0H( 寄存器相对寻址 )
微机原理与接口技术
·

4
版机械工业出版社
〔 例 2-2〕 数据寻址程序- 4
00000022 8B 3C 1E
mov edi,[ebx+esi]; EDI=9ABCDEF0H( 基址变址寻址 )
00000025 8B 0C B3
mov ecx,[ebx+esi*4]; ECX=3721H( 带比例的基址变址寻址 )
00000028 8B 54 B3 FC
mov edx,[ebx+esi*4-4]; EDX=0( 带比例的相对基址变址寻址 )
0000002C 8B EC
mov ebp,esp ; EBP=ESP( 寄存器寻址 )
微机原理与接口技术
·

4
版机械工业出版社
〔 例 2-2〕 数据寻址程序- 5
0000002E E8 00000000 E
call disprd; 显示 8个 32位通用寄存器内容操作演示
了解处理器的基本结构
熟悉 8086,80386和 Pentium处理器的结构
掌握 IA-32常用寄存器的名称和作用
掌握状态标志和控制标志的意义
理解 IA-32的存储器模型和工作方式
掌握基本段,逻辑地址和物理地址
掌握逻辑地址转换为物理地址的方法
理解汇编语言的语句格式和程序格式
掌握汇编语言程序的开发方法
掌握数据寻址方式及其应用教学要求第 2章 处理器结构钱晓捷,微机原理与接口技术 ·第 4版 —— 基于 IA-32处理器和 32位汇编语言第 2章 习题
2.1 简答题 ( 2,5,6,7,9)
2.2 判断题 ( 3,5,6,7,9)
2.3 填空题 ( 1,3,4,5,7)
2.6 2.8 2.9
2.12 2.13 2.16