微机原理与技术第2章
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
首地 ~ 址 IP ~ DS段首地 ~ 址
04000 H 08000 H
~
~
CS段首地 址 DS段首地 址
~ ~ ~
~
SS段首地 址
10000 H
~ 78H 56H 34H 12H 00H 04H
~
SS段首地 址
ESP(推入数据后 栈顶) EAX 12345678H ESP(推入CS后 栈顶) 10010 ESP(原栈 H 顶) 图2.11 堆栈操作示意图
2. 寄存器间接寻址
例1 IN AX, DX 从DX和DX+1所指的2个端口中输入1个字 例2 OUT DX, AL AL中的字节输出到DX所指的端口中 例3 OUT DX,EAX EAX中的双字由低到高依次输出到DX、 DX+1、DX+2和DX+3所指的4个端口中
2.2.3 存储器寻址
有效地址的完整表达式如下:
3. 乘法指令
1)无符号数的乘法指令 例:MUL WORD PTR [SI] 2)有符号数的乘法指令 IMUL有三种格式: (1) 单操作数 (2) 双操作数(始于80286) 例:IMUL BX, 100 (3) 三操作数(始于80286) 例:IMUL ECX, EDX, 1000
4. 除法指令
(1)非组合的BCD码加法调整指令AAA (2)非组合的BCD码减法调整指令AAS 例:SUB AL, BL AAS (3)非组合的BCD码乘法调整指令AAM 例:MUL DL AAM (4)非组合的BCD码除法调整指令AAD 例:AAD DIV CL
2.3.3 逻辑运算和位操作指令
逻辑运算指令
1)无符号数的除法指令DIV 例:DIV WORD PTR [DI] 2)有符号数的除法指令IDIV
5. BCD码调整指令
1)组合的BCD码加、减法调整指令 (1) 组合的BCD码加法调整指令DAA 例: ADD AL, CL DAA (2)组合的BCD码减法调整指令DAS
2)非组合的BCD码调整指令
控制标志
1)方向标志DF(direction flag) 2)中断允许标志IF(interrupt enable flag) 3)跟踪标志TF(trap flag)
存储器
1. 32位微处理器有三种工作方式: • 实地址方式, • 虚拟地址方式(保护方式) • 虚拟8086方式。
1.实地址方式
1) 逻辑地址: 16位的段码和16位的偏移量组合在一起称 为逻辑地址 段码:偏移量
第2章
Pentium的指令 系统
本章重点:
计算机的编程结构 逻辑地址、线性地址和物理地址的含义 操作数的寻址方式 堆栈操作的特点 换码指令的特点 串操作指令的特点和用法
2.1 计算机的编程结构
2.1.1 寄存器
32位 8位 8位 16位
EAX
EBX ECX EDX ESP EBP ESI EDI
2)取段码和偏移量指令
例1:LDS DX,[SI] 例2:LSS ESP, [ESI]
4. 输入/输出指令
1)输入指令 例:IN EAX,DX
2)输出指令 例:OUT 30H, EAX
3) 串输入指令
串输入指令有三种形式: 输入字节串INSB 例1:INSB 输入字串INSW 输入双字串INSD 例2:REP INSD
2. 减法指令
1)不带借位的减法指令SUB 例:SUB WORD PTR [SI],5678H 2)带借位的减法指令SBB与SUB指令 3)减量指令DEC 例:DEC CX 4)求补指令NEG 5)比较指令CMP 例:CMP BYTE PTR [SI],41H 6) 比较交换指令CMPXCHG 例:CMPXCHG BX, DX
(3) 段间直接寻址
例:JMP FAR PRT THIRD ;FAR是类型说明符,表示段间 转移
(4) 段间间接寻址
例:JMP DWORD PTR[BX] ;类型说明符DWORD和指针运算符 PTR指明从存储器中取双字,分 别放在IP和CS
2.3 Pentium的指令系统
通常,指令系统包含如下6类指令 l 传送指令 l 算术运算指令 l 逻辑运算和位操作指令 l 串操作指令 l 转移和调用类指令 l 控制指令
指令指针寄存器EIP/IP用于存放指令所在 单元地址的偏移量,与代码段寄存器CS 配合使用,以便得到指令所在单元地址。 标志寄存器EFLAGS/FLAGS用于存放系统 的状态标志和控制标志。
状态标志
1)符号标志SF(sign flag) 2)零标志ZF(zero flag) 3)奇偶标志PF(parity flag) 4)进位标志CF(carry flag) 5)辅助进位标志AF(auxiliary flag) 6)溢出标志OF(overflow flag)
EA=基址+变址×比例因子+位移量
1.直接寻址
例:MOV AX, [1000H] DS段偏移量为1000H和1001H两单 元的内容传送到AX中。 例:MOV EAX, ES:DATA ES段有效地址为DATA、DATA+1、 DATA+2、DATA+3的4个字节由低到 高依次传送到EAX中。
2.寄存器间接寻址
2.标志传送指令
1)提取标志指令LAHF 2)设置标志指令SAHF 3)标志进栈指令PUSHF/PUSHFD 4)标志出栈指令POPF/POPFD
标志寄存器FLAGS
3. 地址传送指令
1)取有效地址指令
例1: 例2: 例3: 例4: LEA LEA LEA LEA AX,[BX+SI] EAX, [EBX+ECX+1234H] SI,[EBX+ECX+1234H] EDI, [BX+21H]
2)物理地址:
物理地址=段首地址+偏移量=24×段 码+偏移量
实地址下物理地址的计算
计算物理地址的具体例子
2.虚地址方式
虚地址方式是32位微处理器最常用的方式。
虚地址方式下从逻辑地址到线性 地址
虚地址方式下物理地址的形成
2.1.3 输入/输出端口
接口芯片内部的寄存器:
1)数据寄存器 2)状态寄存器 3)命令(或控制)寄存器
2.2.4
关于地址的寻址
1. 一般寻址 (1)立即寻址
例:MOV AX, OFFSET DATA
(2) 存储器寻址
例: LEA AX, [BX+SI] ;设BX=1000H,SI=100H, 执行LEA指令之后 AX=1000H+100H=1100H.
2. 特殊寻址
(1)段内直接寻址
IP←IP+位移量 或 EIP←EIP+位移量 例1:JMP SHORT FIRST ;SHORT为类型说明符,表示短转 移,即位移量为8位,转移范围 在-128~+127之间。
与(AND) 或(OR) 取反(NOT) 异或(XOR)
例:MOV BX, 1000H ;偏移量1000H送入 BX(立即寻址) MOV EAX,[BX] ;DS段偏移量为 1000H、1001H、 1002H和1003H 单元的内容送 入EAX。
3.寄存器相对寻址
例: MOV AX, [SI+100H] 设DS=1000H, SI=0。则此指令 把物理地址为10100H和10101H两 单元的内容送入AX,
例:MOVZX AX, CL
2) 堆栈基本操作指令
(1) 进栈指令
例1:PUSH CS 例2:PUSH DWORD PRT[EBX+ESI]
(2) 出栈指令
例:POP EAX
04000 ~ H
~
08000 ~ H 78H 56H 34H 12H ~ 10000 H ~ 78H 56H 34H 12H 00H 04H
2.3.1
传送指令
按功能可分为5种: ․通用传送指令 ․标志传送指令 ․地址传送指令 ․输入输出指令 ․转换类指令
1.通用传送指令
数据传送指令 堆栈基本操作指令 数据交换指令。
1)数据传送指令
通用传输指令 MOV 符号扩展传送指令MOVSX
例:MOVSX EBX,DL
零扩展传送指令MOVZX
AH AL
BH BL CH CL DH DL
AX
BX CX DX SP BP SI DI
EIP EFLAGS
IP FLAGS
CS DS ES
SS
FS GS
1.段寄存器
16位微处理器 : 代码段CS(code segment) 数据段DS(data segment) 堆栈段SS(stack segment) 附加段ES(extra segment) 32位微处理器增加了FS和GS两个段寄存器
CS 0400H 10010 H
ESP(弹出数据后 栈顶)
(a)进 栈
(b)出 栈
(3) 16位通用寄存器进栈/出栈指令
PUSHA/POPA
(4) 32位通用寄存器进栈/出栈指令
PUSHAD/POPAD
3)数据交换指令
例1:XCHG AL, BL ;AL和BL之间交换字节 例2:XCHG [SI], DX ;DX和SI所指的字交换 例3:XCHG EAX, EDI ;EAX和EDI之间交换双字。
类型说明符dword和指针运算符ptr指明从存储器中取双字ptr指明从存储器中取双字分别放在ip和cs分23pentium的指令系统通常指令系统包含如下6类指令传送指令算术运算指令??算术运算指令逻辑运算和位操作指令串操作指令转移和调用类指令控制指令???????????231传送指令按功能可分为5种
寄存器相对寻址方式 示意图
4. 基址加变址寻址
例1. MOV AL, [EBX+EBP] 默认段为DS段 例2. MOV AX, [EBP+EBX] 默认段为SS段
5.相对基址加变址寻址
例1 对二维数组的访问 MOV AL, [EBX+ESI+TWOARRAY]
例2. 对堆栈中数组的访问
6.相对比例变址寻址
4)串输出指令
三种形式: 输出字节串OUTSB 例:REP OUTSB
输出字串OUTSW 例:OUTSW 输出双字串OUTSD
1)换码指令(XLAT访问编码表)
2) 字长扩展指令
(1)字节向字转换指令CBW (2)字向双字转换指令CWD和CWDE (3) 双字向4字转换指令CDQ
3)字节交换指令
寄存器寻址
例1: INC CX CX中的内容加1。 例2: ADD AX, SI AX和SI中的内容相加,结果放在AX中
2.2.2 输入/输出端口寻址
1.直接寻址 例 例1. IN AL, 50H 50H端口的字节读入AL。 例2. OUT 80H, AX AX中的内容输出到80H、81H两个端口 例3. IN EAX,60H 60H、61H、62H和63H端口的4个字节由低 到高依次输入到EAX中。
例2:JMP NEAR SECOND ;NEAR为类型说明符,表示近转移, 对于16位机,转移范围在32768~ +32767之间;对于32位机,移范 围可达±2G。
(2)段内间接寻址
例1:JMP ECX ;ECX的内容作为地址送入EIP。 例2:JMP WORD PTR[BX+SI] ;BX+SI所指字单元的内容 送入IP。
2.2 操作数的寻址方式
一条指令要明确两个问题: ․做什么操作__——操作码 ․所要操作的数据在何处——寻址
2.2.1
立即寻址
例1: MOV AL, 80H 16进制数80H送入AL。 例2: MOV CX, 1000H 1000H送入CX, CH中为10H,CL中为00H。 例3: MOV EBX,20031231H 20031231H送入EBX。
2.通用寄存器
EAX/AX EBX/BX ECX/CX EDX/DX ESP/SP EBP/BP ESI/SI EDI/DI
常用指令的执行 基址寄存器 用作计数器 用来存放高位的数据或I/O地址。 堆栈指针寄存器 基址指针寄存器 源变址寄存器 目的变址寄存器
3. 指令指针寄存器和标志寄存器
字节交换指令BSWAP 例:BSWAP EAX
2.3.2 算术运算指令
1.加法指令
1)不带进位的加法指令ADD 例:ADD AL, 60H 2)带进位的加法指令ADC 例: ADC BX,[SI] 3)增量指令INC 例:INC SI 4)交换加法指令XADD 例:XADD [BX+SI], AX
例:访问数组ARRAY的元素
7.基址加比例变址寻址
例:MOV EAX, [EBX][ESI*4] ;有效地址=EBX+ESI×4, 取出连续4个单元的内 容送入EAX。
8.相对基址加比例变址寻址
例:MOV AX, TWOARR[EBX][ESI*2] ;位移量TWOARR指向二维数组 首地址,基址寄存器EBX指向 某一行,变址寄存器ESI指向 某一列,数组元素为2字节长
04000 H 08000 H
~
~
CS段首地 址 DS段首地 址
~ ~ ~
~
SS段首地 址
10000 H
~ 78H 56H 34H 12H 00H 04H
~
SS段首地 址
ESP(推入数据后 栈顶) EAX 12345678H ESP(推入CS后 栈顶) 10010 ESP(原栈 H 顶) 图2.11 堆栈操作示意图
2. 寄存器间接寻址
例1 IN AX, DX 从DX和DX+1所指的2个端口中输入1个字 例2 OUT DX, AL AL中的字节输出到DX所指的端口中 例3 OUT DX,EAX EAX中的双字由低到高依次输出到DX、 DX+1、DX+2和DX+3所指的4个端口中
2.2.3 存储器寻址
有效地址的完整表达式如下:
3. 乘法指令
1)无符号数的乘法指令 例:MUL WORD PTR [SI] 2)有符号数的乘法指令 IMUL有三种格式: (1) 单操作数 (2) 双操作数(始于80286) 例:IMUL BX, 100 (3) 三操作数(始于80286) 例:IMUL ECX, EDX, 1000
4. 除法指令
(1)非组合的BCD码加法调整指令AAA (2)非组合的BCD码减法调整指令AAS 例:SUB AL, BL AAS (3)非组合的BCD码乘法调整指令AAM 例:MUL DL AAM (4)非组合的BCD码除法调整指令AAD 例:AAD DIV CL
2.3.3 逻辑运算和位操作指令
逻辑运算指令
1)无符号数的除法指令DIV 例:DIV WORD PTR [DI] 2)有符号数的除法指令IDIV
5. BCD码调整指令
1)组合的BCD码加、减法调整指令 (1) 组合的BCD码加法调整指令DAA 例: ADD AL, CL DAA (2)组合的BCD码减法调整指令DAS
2)非组合的BCD码调整指令
控制标志
1)方向标志DF(direction flag) 2)中断允许标志IF(interrupt enable flag) 3)跟踪标志TF(trap flag)
存储器
1. 32位微处理器有三种工作方式: • 实地址方式, • 虚拟地址方式(保护方式) • 虚拟8086方式。
1.实地址方式
1) 逻辑地址: 16位的段码和16位的偏移量组合在一起称 为逻辑地址 段码:偏移量
第2章
Pentium的指令 系统
本章重点:
计算机的编程结构 逻辑地址、线性地址和物理地址的含义 操作数的寻址方式 堆栈操作的特点 换码指令的特点 串操作指令的特点和用法
2.1 计算机的编程结构
2.1.1 寄存器
32位 8位 8位 16位
EAX
EBX ECX EDX ESP EBP ESI EDI
2)取段码和偏移量指令
例1:LDS DX,[SI] 例2:LSS ESP, [ESI]
4. 输入/输出指令
1)输入指令 例:IN EAX,DX
2)输出指令 例:OUT 30H, EAX
3) 串输入指令
串输入指令有三种形式: 输入字节串INSB 例1:INSB 输入字串INSW 输入双字串INSD 例2:REP INSD
2. 减法指令
1)不带借位的减法指令SUB 例:SUB WORD PTR [SI],5678H 2)带借位的减法指令SBB与SUB指令 3)减量指令DEC 例:DEC CX 4)求补指令NEG 5)比较指令CMP 例:CMP BYTE PTR [SI],41H 6) 比较交换指令CMPXCHG 例:CMPXCHG BX, DX
(3) 段间直接寻址
例:JMP FAR PRT THIRD ;FAR是类型说明符,表示段间 转移
(4) 段间间接寻址
例:JMP DWORD PTR[BX] ;类型说明符DWORD和指针运算符 PTR指明从存储器中取双字,分 别放在IP和CS
2.3 Pentium的指令系统
通常,指令系统包含如下6类指令 l 传送指令 l 算术运算指令 l 逻辑运算和位操作指令 l 串操作指令 l 转移和调用类指令 l 控制指令
指令指针寄存器EIP/IP用于存放指令所在 单元地址的偏移量,与代码段寄存器CS 配合使用,以便得到指令所在单元地址。 标志寄存器EFLAGS/FLAGS用于存放系统 的状态标志和控制标志。
状态标志
1)符号标志SF(sign flag) 2)零标志ZF(zero flag) 3)奇偶标志PF(parity flag) 4)进位标志CF(carry flag) 5)辅助进位标志AF(auxiliary flag) 6)溢出标志OF(overflow flag)
EA=基址+变址×比例因子+位移量
1.直接寻址
例:MOV AX, [1000H] DS段偏移量为1000H和1001H两单 元的内容传送到AX中。 例:MOV EAX, ES:DATA ES段有效地址为DATA、DATA+1、 DATA+2、DATA+3的4个字节由低到 高依次传送到EAX中。
2.寄存器间接寻址
2.标志传送指令
1)提取标志指令LAHF 2)设置标志指令SAHF 3)标志进栈指令PUSHF/PUSHFD 4)标志出栈指令POPF/POPFD
标志寄存器FLAGS
3. 地址传送指令
1)取有效地址指令
例1: 例2: 例3: 例4: LEA LEA LEA LEA AX,[BX+SI] EAX, [EBX+ECX+1234H] SI,[EBX+ECX+1234H] EDI, [BX+21H]
2)物理地址:
物理地址=段首地址+偏移量=24×段 码+偏移量
实地址下物理地址的计算
计算物理地址的具体例子
2.虚地址方式
虚地址方式是32位微处理器最常用的方式。
虚地址方式下从逻辑地址到线性 地址
虚地址方式下物理地址的形成
2.1.3 输入/输出端口
接口芯片内部的寄存器:
1)数据寄存器 2)状态寄存器 3)命令(或控制)寄存器
2.2.4
关于地址的寻址
1. 一般寻址 (1)立即寻址
例:MOV AX, OFFSET DATA
(2) 存储器寻址
例: LEA AX, [BX+SI] ;设BX=1000H,SI=100H, 执行LEA指令之后 AX=1000H+100H=1100H.
2. 特殊寻址
(1)段内直接寻址
IP←IP+位移量 或 EIP←EIP+位移量 例1:JMP SHORT FIRST ;SHORT为类型说明符,表示短转 移,即位移量为8位,转移范围 在-128~+127之间。
与(AND) 或(OR) 取反(NOT) 异或(XOR)
例:MOV BX, 1000H ;偏移量1000H送入 BX(立即寻址) MOV EAX,[BX] ;DS段偏移量为 1000H、1001H、 1002H和1003H 单元的内容送 入EAX。
3.寄存器相对寻址
例: MOV AX, [SI+100H] 设DS=1000H, SI=0。则此指令 把物理地址为10100H和10101H两 单元的内容送入AX,
例:MOVZX AX, CL
2) 堆栈基本操作指令
(1) 进栈指令
例1:PUSH CS 例2:PUSH DWORD PRT[EBX+ESI]
(2) 出栈指令
例:POP EAX
04000 ~ H
~
08000 ~ H 78H 56H 34H 12H ~ 10000 H ~ 78H 56H 34H 12H 00H 04H
2.3.1
传送指令
按功能可分为5种: ․通用传送指令 ․标志传送指令 ․地址传送指令 ․输入输出指令 ․转换类指令
1.通用传送指令
数据传送指令 堆栈基本操作指令 数据交换指令。
1)数据传送指令
通用传输指令 MOV 符号扩展传送指令MOVSX
例:MOVSX EBX,DL
零扩展传送指令MOVZX
AH AL
BH BL CH CL DH DL
AX
BX CX DX SP BP SI DI
EIP EFLAGS
IP FLAGS
CS DS ES
SS
FS GS
1.段寄存器
16位微处理器 : 代码段CS(code segment) 数据段DS(data segment) 堆栈段SS(stack segment) 附加段ES(extra segment) 32位微处理器增加了FS和GS两个段寄存器
CS 0400H 10010 H
ESP(弹出数据后 栈顶)
(a)进 栈
(b)出 栈
(3) 16位通用寄存器进栈/出栈指令
PUSHA/POPA
(4) 32位通用寄存器进栈/出栈指令
PUSHAD/POPAD
3)数据交换指令
例1:XCHG AL, BL ;AL和BL之间交换字节 例2:XCHG [SI], DX ;DX和SI所指的字交换 例3:XCHG EAX, EDI ;EAX和EDI之间交换双字。
类型说明符dword和指针运算符ptr指明从存储器中取双字ptr指明从存储器中取双字分别放在ip和cs分23pentium的指令系统通常指令系统包含如下6类指令传送指令算术运算指令??算术运算指令逻辑运算和位操作指令串操作指令转移和调用类指令控制指令???????????231传送指令按功能可分为5种
寄存器相对寻址方式 示意图
4. 基址加变址寻址
例1. MOV AL, [EBX+EBP] 默认段为DS段 例2. MOV AX, [EBP+EBX] 默认段为SS段
5.相对基址加变址寻址
例1 对二维数组的访问 MOV AL, [EBX+ESI+TWOARRAY]
例2. 对堆栈中数组的访问
6.相对比例变址寻址
4)串输出指令
三种形式: 输出字节串OUTSB 例:REP OUTSB
输出字串OUTSW 例:OUTSW 输出双字串OUTSD
1)换码指令(XLAT访问编码表)
2) 字长扩展指令
(1)字节向字转换指令CBW (2)字向双字转换指令CWD和CWDE (3) 双字向4字转换指令CDQ
3)字节交换指令
寄存器寻址
例1: INC CX CX中的内容加1。 例2: ADD AX, SI AX和SI中的内容相加,结果放在AX中
2.2.2 输入/输出端口寻址
1.直接寻址 例 例1. IN AL, 50H 50H端口的字节读入AL。 例2. OUT 80H, AX AX中的内容输出到80H、81H两个端口 例3. IN EAX,60H 60H、61H、62H和63H端口的4个字节由低 到高依次输入到EAX中。
例2:JMP NEAR SECOND ;NEAR为类型说明符,表示近转移, 对于16位机,转移范围在32768~ +32767之间;对于32位机,移范 围可达±2G。
(2)段内间接寻址
例1:JMP ECX ;ECX的内容作为地址送入EIP。 例2:JMP WORD PTR[BX+SI] ;BX+SI所指字单元的内容 送入IP。
2.2 操作数的寻址方式
一条指令要明确两个问题: ․做什么操作__——操作码 ․所要操作的数据在何处——寻址
2.2.1
立即寻址
例1: MOV AL, 80H 16进制数80H送入AL。 例2: MOV CX, 1000H 1000H送入CX, CH中为10H,CL中为00H。 例3: MOV EBX,20031231H 20031231H送入EBX。
2.通用寄存器
EAX/AX EBX/BX ECX/CX EDX/DX ESP/SP EBP/BP ESI/SI EDI/DI
常用指令的执行 基址寄存器 用作计数器 用来存放高位的数据或I/O地址。 堆栈指针寄存器 基址指针寄存器 源变址寄存器 目的变址寄存器
3. 指令指针寄存器和标志寄存器
字节交换指令BSWAP 例:BSWAP EAX
2.3.2 算术运算指令
1.加法指令
1)不带进位的加法指令ADD 例:ADD AL, 60H 2)带进位的加法指令ADC 例: ADC BX,[SI] 3)增量指令INC 例:INC SI 4)交换加法指令XADD 例:XADD [BX+SI], AX
例:访问数组ARRAY的元素
7.基址加比例变址寻址
例:MOV EAX, [EBX][ESI*4] ;有效地址=EBX+ESI×4, 取出连续4个单元的内 容送入EAX。
8.相对基址加比例变址寻址
例:MOV AX, TWOARR[EBX][ESI*2] ;位移量TWOARR指向二维数组 首地址,基址寄存器EBX指向 某一行,变址寄存器ESI指向 某一列,数组元素为2字节长