Professional Documents
Culture Documents
5 Pentium微处理器的指令系统
5 Pentium微处理器的指令系统
Pentium微处理器的指令系统
1 2021/4/15
5.1 指令格式
格式:前缀、操作码、寻址方式、偏移量、立即数
2 2021/4/15
5.2寻址方式
操作数类型:
寻址方式是指在指令中操作数的表示方式 。 立即数、
寄存器、
5.2.1数据的寻址方式 存储器。
字节、字、双字和4倍字数据类型存储规定:
字节,8位二进制数,占1个地址单元。
字,16位二进制数,占用2个连续地址单元。
双字,32位二进制数,占4个连续地址单元。
4倍字,64位二进制数,占8个连续地址单元。
低序字节存在低位地址,高序字节存在高位地址(小端模
式,Little-endian)),将最低序字节地址作为其地址。
3 2021/4/15
1.立即寻址
操作数包含在本条指令代码中,是指令的一部分,完整
地取出该条指令之后也就获得了操作数。
例: MOV AL,12H
2.寄存器寻址
操作数在CPU的某个寄存器中,指令代码中指定寄存
器号。
例: MOV AL,BL
4 2021/4/15
3.存储器寻址
存储器寻址的操作数在存储器中,处理器要访问存储器操
作数,必须先计算操作数的物理地址。
物理地址通过段基址和段内偏移(有效地址)确定。
指令中给出的是有效地址的信息。 逻辑地址、物理地址;
段地址、段内偏移地址;
(1)有效地址的计算方法 有效地址。
Pentium有效地址的计算:
EA=基址+(变址×比例因子)+位移量
5 2021/4/15
有效地址可以由以下4部分组成:
基址:是存放在基址寄存器中的内容。
变址:是存放在变址寄存器中的内容。
比例因子:是80386以上微机新增加的寻址方式,其值
可为1,2,4或8。
位移量:是存放在指令中的一个0位、8位、16位或32
位的数,但它不是立即数,而是一个地址(地址的一部分)。
8086的有效地址: 基址+变址+相对寻址
𝐵𝑋 𝑆𝐼 8
+ + 位移量
𝐵𝑃 𝐷𝐼 16
6 2021/4/15
(2)存储器寻址方式
*:只取其中一个
7 2021/4/15
(3)寻址方式的段约定和段超越
存储器寻址时规定,如果使用寄存器BP、EBP和ESP参
与寻址,默认为是访问堆栈段SS。
使用除寄存器BP、 EBP和ESP以外的所有通用寄存器参
与寻址,默认为是访问数据段DS。
如果访问的段与默认的段不同,地址表达式中必须明确
写出相关逻辑段的段超越前缀(否则,将出现寻址错误)。
取指令操作默认的段为CS
8 2021/4/15
5.2.2 转移地址的寻址方式
控制转移指令使程序不再顺序执行,按指令中给出的操作
数转移到相应的目的地址;
控制转移指令中的操作数是转移的目的地址,称为转移地
址。
段内~只改变IP/EIP
段间~改变CS、IP/EIP
相对~IP/EIP加位移量
直接~指令中给的是存储器单元地址(有效地址)
间接~指令中给出的是寄存器或存储单元地址,其内容是一
个地址。
9 2021/4/15
1.段内相对寻址
对于16位指令模式转向的有效地址是当前IP寄存器的内容
和指令中指定的8位或16位位移量之和;
而对于32位指令模式转向的有效地址是当前EIP寄存器的
内容和指令中指定的8位或32位位移量之和。
2.段内间接寻址
目标的有效地址是一个寄存器或是一个存储单元的内容。
3.段间直接寻址
段间~修改CS、及IP/EIP
在指令中直接提供了目标地址的段地址和偏移地址。
4.段间间接寻址
用存储器单元中的内容来取代IP/EIP和CS中的值。
10 2021/4/15
5.2.3 堆栈地址寻址
堆栈是以“先进后出”方式工作的一个特定的存储区。
堆栈它必须存在于 堆栈段SS中 。
使用PUSH指令将操作数压入堆栈,
使用POP指令从堆栈中弹出操作数。
X86 处理器堆栈的基本特点:
向低地址生长;
(入栈)先指针后存数,出栈;先取数后变堆栈指针;
按照数据类型(数据的字节数)修改指针,字操作加 /
减 2 ,双字操作加 / 减 4 。
11 2021/4/15
5.3 指令系统
Pentium微处理器的指令按功能可分为:
数据传送指令、算术运算指令、BCD码调整指令、逻辑运
算指令、位处理指令、控制转移指令、条件设置指令、串操
作指令、处理器控制指令和保护模式系统控制指令。
指令学习注意:
格式、功能、使用了什么资源、改变了哪些寄存器存储器。
12 2021/4/15
5.3.1 数据传送类指令
数据传送指令的功能是,把源操作数传送到目标寄存器
或目标存储单元中。
指令执行后,源操作数不变,不影响状态标志(标志寄
存器传送指令除外)。
式中DST为目的操作数,SRC为源操作数。
功能:(DST)←(SRC)
13 2021/4/15
14 2021/4/15
2.MOVSX 符号扩展传送指令
3.MOVZX 零扩展传送指令
15 2021/4/15
4.PUSH进栈指令
格式:PUSH SRC
功能:堆栈栈顶 ←(SRC),修改SP、栈顶单元;
5.POP出栈指令
格式:POP DST
功能:(DST) ←堆栈栈顶内容,修改SP;
16 2021/4/15
16.LEA 有效地址送寄存器指令 初始化地址指针,
SRC为存储器类型
格式:LEA REG,SRC 操作数。
功能:REG ←(SRC)的有效地址
典型用法例:
( SI )=2000H
变量 逻辑地址
MOV SI ,Table
Table 00H 1000:2000H
( SI )= 0100H
01H
04H 1000:2002H
LEA BX,[2002H] 09H
17
MOV BX, [2002H] 10H 2021/4/15
20.XLAT 换码指令 往往用于查表
格式:XLAT
功能:AL<=[(BX)+(AL)]
例:
XLAT 01H
04H
Table=2000H;
09H
AL=09H 10H
18 2021/4/15
21.IN/OUT 输入/输出指令
AX ←( PORT+1, PORT)(字)
例:
IN AL,80H ;从地址为80H的端口输入一个字节数
IN AL,DX ;从地址为(DX)的端口输入一个字节数
19 2021/4/15
(2)OUT 输出指令 A为AL或AX;
例:
MOV AL,12H
20 2021/4/15
5.3.2 算术运算指令
功能:(DST)←(SRC)+(DST)
功能:(DST)←(SRC)+(DST)+CF
功能:(DST)←(DST)-(SRC)
功能:(DST)←(DST)-(SRC)-CF
22 2021/4/15
例5.3.8
MOV DX,7408H
ADD DX,0B809H
最低8位
23 2021/4/15
(5) INC 加1指令 影响标志位,
但不影响进位标志CF;
格式:INC OPR 可用于计数;
OPR可以是寄存器或存
功能:(OPR) ←(OPR)+1 储器类型操作数
例:
INC CX ;CX的内容加 1,结果存入CX
功能:(OPR1)-(OPR2)
编程中的应用:与条件转移指
令配合实现 IF ----THEN---
例:
JE L ; 如果AL的内容等于80H,就转到标号 L
L : …
25 2021/4/15
(12) MUL 无符号数乘法指令 为什么加减法指令没有区
分有符号数和无符号数?
MUL BL ; AL的内容与BL的内容按无符号数相乘,结果存入AX
MUL CX ;A X的内容与CX的内容按无符号数相乘,
结果存入DX:AX(高16位在DX,低16位在AX)
26 2021/4/15
(13) IMUL 带符号数乘法指令
格式1:IMUL SRC
功能:字节乘 AX ←(AL)×(SRC)
字乘 DX:AX ←(AX)×(SRC)
当乘积的高部分为符号扩展时,CF、OF为0;
否则CF、OF为1。
其它与MUL相同。
27 2021/4/15
(14) DIV 无符号数除法指令
例:
MOV AX, 13 ;十进制数13
MOV CL, 05
DIV CL ;商02在AL中,余数03在AH中
28 2021/4/15
(15) IDIV有符号数除法指令
格式:IDIV SRC
功能: 与DIV指令相同,
除数、被除数、商都是有符号数,
余数属性与被除数同。
其它与DIV相同
29 2021/4/15
5.3.3 BCD码调整指令
(1) DAA 压缩BCD码加法调整指令
格式:DAA 在加法后使用,实现十进制加法
功能:
如果AL的低4位大于9或AF=1,则(AL)+6→AL和
1→AF;如果AL的高4位大于9或CF=1,则(AL)+60H→AL和
1→CF 。
例:
MOV AL,36H BCD码36H(十进制36)与
ADD AL, 48H ; (AL)=7EH 48H(十进制48),结果应当为
DAA ; (AL)=84H BCD码84H(十进制84)
30 2021/4/15
5.3.4 逻辑运算指令
逻辑运算指令对操作数按位进行计算,操作数可以是字
节或字,也可以是双字。影响标志位
格式:XOR DST,SRC
功能:(OPR) ←(OPR)按位取反
32 2021/4/15
5.3.5 位处理指令
OPR为寄存器或存储
(7) SHL 逻辑左移指令 器操作数;CNT为8位立即
数或CL,给出移位次数
格式:SHL OPR,CNT
功能:如图
功能:如图
33 2021/4/15
(9) SHR 逻辑右移指令
格式:SHR OPR,CNT
功能:如图
格式:SAR OPR,CNT
功能:如图
34 2021/4/15
5.3.6 控制转移指令
怎么修改CS、IP
条件/无条件,段内/段间,绝对/相对,直接/间接,短/近/远
2. 无条件段内相对近转移指令 OPR是操作数。
汇编语言一般使用标号
格式:JMP NEAR PTR OPR
,由汇编过程生成对应
功能:IP←(IP)+16位位移量 的代码。
一般格式:
JMP L
L为标号
35 2021/4/15
3. 无条件段内间接转移指令 OPR为寄存器,寄存器的
内容送IP;当OPR为存储器
格式:JMP OPR ,存储单元字数据送IP
例:
功能:IP←由OPR表示的有效地址(EA) JMP BX
(BX)送IP
36 2021/4/15
6.条件相对转移指令
条件就是标志位的状态,
(1) 单条件相对转移指令 都是段内短转移
① JZ/JE OPR ;ZF=1转移(结果为零或相等转移)
③ JS OPR ;SF=1转移(结果为负转移)
例: 指令本身是否转移
MOV AL, 56H 只取决于标志位,
CMP AL, 80H 无论标志位是怎么
形成的。
JBE L ;(AL)小于等于80H转移到L
…
…
L:…
38 2021/4/15
(3) 有符号数比较 条件相对转移指令(A-B)
① JL/JNGE OPR ;(SF⊕OF)=1 (A<B转移)
② JGE/JNL OPR ;(SF⊕OF)=0 (A≥B转移)
③ JLE/JNG OPR ;((SF⊕OF) ∨ZF)=1 (A≤B转移)
④ JG/JNLE OPR ;((SF⊕OF) ∨ZF)=0 (A>B转移)
例:
MOV AL,56H
CMP AL, 80H
JLE L ;有符号数(AL)小于等于80H转移到L
…
…
L:…
39 2021/4/15
7. LOOP 循环控制相对转移指令
格式:LOOP OPR
功能:CX/ECX←(CX/ECX)-1;(CX/ECX)≠0转移
典型用法:
MOV CX, n ;循环n次
L : …
…
LOOP L
40 2021/4/15
10.子程序调用与返回指令 汇编语言中,一般格式:
CALL 子程序名
(1)段内相对调用指令
汇编程序,根据子程序情况
格式:CALL DST 生成对应指令。
或: CALL NEAR PTR DST
功能:当操作数长度为16位时, 调用指令基本执行过程:
(SP)-2→SP,(IP) →[SP], 1、返回地址压入堆栈;
2、根据操作数形成目标地址,并
IP ←(IP)+16位位移量
把目标地址偏移地址送IP(如果是
段间转移,再把段地址送CS)。
例:
CALLSUB1
保护返回地址,根据目标地址SUB1得到16位位移量送IP。
41 2021/4/15
(3)段间直接调用指令 汇编程序中DST为远过程名(定
格式:CALL DST 义为FAR类型的子程序)。
功能:(SP)-2→SP, (CS) →[SP]
(SP)-2→SP, (IP) →[SP] 段间返回地址压入堆栈;
IP ←DST的偏移地址
CS←DST所在段的段地址 目标地址送CS:IP
例:
CALL SUBF
子程序SUBF的类型为FAR,则返回地址段内偏移、段地址
保护到堆栈,SUBF段内偏移送IP,段地址送CS。
42 2021/4/15
(5)段内返回指令 类型为NEAR的过程中的返回指令
格式:RET 堆栈栈顶弹出返回地址送IP
功能: IP←堆栈弹出2字节,
(SP)+2→SP
(6)段内带参数返回指令
栈顶 返回地址L
格式:RET N 返回地址H
参数1
功能:IP←栈弹出2字节,
参数2
(SP)+2→SP …
原栈顶 …
SP ←(SP)+N …
带参数~用堆栈传递参数 …
43 2021/4/15
(7)段间返回指令
格式:RET
功能:IP←栈弹出2字节, 与段内返回怎么区别?
助记符相同,代码不同.
(SP)+2→SP, 过程说明/定义时,如果为远
过程(FAR类型),其返回
CS←栈弹出2字节, 指令按段间返回指令处理。
(SP)+2→SP
44 2021/4/15
11.中断指令
(1)INT 中断指令 8086、实模式中断响应过程
格式:INT n
功能:① SP←(SP)-2
② PUSH (FR) ;标志寄存器进栈 保护现场
③ SP←(SP)-2
④ PUSH (CS) ;断点段地址进栈
⑤ SP←(SP)-2 保护断点
⑥ PUSH (IP) ;断点地址指针进栈 (返回地址)
⑦ TF←0 ;禁止单步
⑧ IF←0 ;禁止中断
⑨ IP←[n×4] ;转向中断服务程序 从中断矢量表取中断
⑩ CS←[n×4+2] 服务程序入口地址送
CS:IP,转入中断
45 服务程序 2021/4/15
(4)IRET中断返回指令
格式:IRET
② SP←(SP)+2
③ CS←栈弹出2字节
④ SP←(SP)+2
⑥ SP←(SP)+2
46 2021/4/15
参考书后附录B
(6)INT 21H 系统功能调用指令
系统功能调用是DOS为系统程序员及用户提供的一组
常用中断服务程序。
DOS规定用中断指令 INT 21H 作为进入各功能调用
中断服务程序的总入口,再为每个功能调用规定一个功能
号,以便进入相应各个中断服务程序。
使用系统功能调用的过程是:
① 把功能调用编号置于寄存器AH中,
② 设置入口参数,
③ CPU执行 INT 21H,
47
④ 从出口获得结果参数。
2021/4/15
DOS共提供了约80个功能调用
几个常用的DOS系统功能调用的功能及使用方法:
① 功能号:1
功能:等待键盘输入,并回送显示器。
说明:等待按键。出口参数(AL)=键入字符的ASCII码。
48 2021/4/15
② 功能号:2
格式:MOV AH,2 ;功能号02H→(AH)
INT 21H ;调用21H号软中断
功能:输出字符送显示器。
说明:入口(DL)=输出字符的ASCII码,无出口参数。
例:
MOV DL,41H ;字符 A 的ASCII码送→DL
MOV AH,2 显示字符’A’
INT 21H
49 2021/4/15
③ 功能号:4CH
功能:终止程序,返回。
50 2021/4/15
5.3.9 处理器控制指令
1.标志处理指令
标志处理指令只设置或清除本指令的标志位,而不影响
其他标志位。
(1)CLC 进位位置0指令
功能:CF←0
(3)STC 进位位置1指令
功能:CF←1
(6)CLI 允许中断标志置0指令
功能:IF←0
(7)STI允许中断标志置1指令
51 功能:IF←1 2021/4/15
(6)CLI 允许中断标志置0指令
功能:IF←0
(7)STI允许中断标志置1指令
功能:IF←1
52 2021/4/15
2.处理器控制指令
(1) HLT暂停指令
退出:中断、DMA、复位
(5) LOCK封锁指令
53 吉林大学 微型计算机原理与接口技术
2021/4/15