汇编资料收集
常见的基本汇编书籍
Windows.环境下32位汇编语言程序设计(第2版)
http://www.happycampus.cn/docs/957100583237@hc10/275980/
汇编语言编程艺术
Intel汇编语言程序设计(第四版)
Intel汇编语言程序设计(第五版)范例
http://download.csdn.net/source/1523425
80x86汇编语言程序设计教程
http://www.happycampus.cn/docs/957100583237@hc10/275982/
IBM.PC.汇编语言程序设计(第五版)
http://www.happycampus.cn/docs/957100583237@hc10/275981/
Microsoft MASM 手册
http://download.csdn.net/source/1592857
Intel ® 64 and IA-32 Architectures Software Developer's Manuals
http://www.intel.com/products/processor/manuals/
MASM32
http://www.masm32.com/masmdl.htm
MASM6.0
http://cid-6107b2426ac9abb3.skydrive.live.com/self.aspx/NamipanPublic/2009-07-08/MASM6.0.rar
NASM-Win32
http://www.nasm.us/pub/nasm/releasebuilds/2.08rc7/win32/nasm-2.08rc7-win32.zip
NASM-DOS
http://www.nasm.us/pub/nasm/releasebuilds/2.08rc7/dos/nasm-2.08rc7-dos.zip
NASM-Linux
http://www.nasm.us/pub/nasm/releasebuilds/2.08rc7/linux/
TASM5.0
http://download.csdn.net/source/2057474
简易MASM附带Turbo Debugger http://download.csdn.net/source/2036190
Windows 环境下编写汇编程序的工具 http://download.csdn.net/source/1513555
编程中国 >> 技术教程 >> 开发语言 >> 汇编
http://www.bccn.net/Article/kfyy/hb/
汇编网
80x86 汇编小站
AoGo 汇编小站
Assembly Language for Intel-Based Computers
NASM
Assembly Language Programming - MASM & Intel Docs
http://web.sau.edu/LillisKevinM/csci240/masmdocs/
自己写的一个汇编计算器
http://blog.csdn.net/KingWolfOfSky/archive/2009/11/11/4800028.aspx
Linux 汇编语言开发指南
http://blog.csdn.net/KingWolfOfSky/archive/2009/08/09/4427623.aspx
创 建Win32 图形界面应用程序
http://blog.csdn.net/KingWolfOfSky/archive/2009/08/07/4423958.aspx
架 设WIN32 汇编程序的开发环境
http://blog.csdn.net/KingWolfOfSky/archive/2009/07/23/4375411.aspx
汇编初学者问题合集
http://blog.csdn.net/mydo/archive/2007/09/07/1776304.aspx
[ 幽默机智问答] 汇编系列,给初学者
http://topic.csdn.net/u/20080423/21/e1fa715d-9613-4b8d-aa69-58b6f95be894.html
从汇编分析Win32
消息原理
http://coderarea.net/html/bianchengyuyan/huibianyuyan/huibianyingyong/2009/0316/74531.html
用汇编写特殊要求的strlen
http://coderarea.net/html/bianchengyuyan/huibianyuyan/huibianyingyong/2009/0316/74530.html
8051
存储器
http://coderarea.net/html/bianchengyuyan/huibianyuyan/huibianshili/2009/0316/74495.html
8051
寻址方式
http://coderarea.net/html/bianchengyuyan/huibianyuyan/huibianshili/2009/0316/74494.html
GCC
内联汇编基础
http://coderarea.net/html/bianchengyuyan/huibianyuyan/huibianshili/2009/0316/74493.html
汇编的角度来理解数组与指针
http://coderarea.net/html/bianchengyuyan/huibianyuyan/huibianrumen/2009/0316/74390.html
从汇编语言翻译到c
语言代码
http://coderarea.net/html/bianchengyuyan/huibianyuyan/huibianshili/2009/0316/74492.html
函数调用得到传递参数的想法
http://coderarea.net/html/bianchengyuyan/huibianyuyan/huibianshili/2009/0316/74491.html
汇编语言写ESMTP
电子邮件发送程序
http://coderarea.net/html/bianchengyuyan/huibianyuyan/huibianyingyong/2009/0316/74529.html
使用Mutex
防止程序运行两次
http://coderarea.net/html/bianchengyuyan/huibianyuyan/huibianshili/2009/0316/74489.html
汇编开发的进制输出的程序
http://coderarea.net/html/bianchengyuyan/huibianyuyan/huibianyingyong/2009/0316/74528.html
汇编实现:接受一个小写字母输出对应大写字母
http://coderarea.net/html/bianchengyuyan/huibianyuyan/huibianshili/2009/0316/74488.html
接受一个小写字母,找出前个字符和后续字符
http://coderarea.net/html/bianchengyuyan/huibianyuyan/huibianshili/2009/0316/74487.html
汇编排序&
查找实例
http://coderarea.net/html/bianchengyuyan/huibianyuyan/huibianshili/2009/0316/74486.html
16
位数拆分为4
组实例代码
http://coderarea.net/html/bianchengyuyan/huibianyuyan/huibianshili/2009/0316/74485.html
不定参函数实现方法
http://coderarea.net/html/bianchengyuyan/huibianyuyan/huibianrumen/2009/0316/74389.html
反汇编破解Radmin
密码实例
http://coderarea.net/html/bianchengyuyan/huibianyuyan/huibianshili/2009/0316/74484.html
对话框代码模块源码(
汇编)
http://coderarea.net/html/bianchengyuyan/huibianyuyan/huibianyuanma/2009/0316/74555.html
MASM32
编程读取网站首页代码
http://coderarea.net/html/bianchengyuyan/huibianyuyan/huibianyuanma/2009/0316/74554.html
Win32
汇编读者/
写者,写者具有优先权的问题
http://coderarea.net/html/bianchengyuyan/huibianyuyan/huibianrumen/2009/0316/74387.html
汇编程序在屏幕显示字符的源代码
http://coderarea.net/html/bianchengyuyan/huibianyuyan/huibianyuanma/2009/0316/74553.html
echo
命令基础
http://coderarea.net/html/bianchengyuyan/huibianyuyan/huibianrumen/2009/0316/74377.html
”VB“
版的汇编环境的配置方法
http://coderarea.net/html/bianchengyuyan/huibianyuyan/huibianyingyong/2009/0316/74527.html
程序转移指令
http://coderarea.net/html/bianchengyuyan/huibianyuyan/huibianrumen/2009/0316/74376.html
汇编语言串指令
http://coderarea.net/html/bianchengyuyan/huibianyuyan/huibianrumen/2009/0316/74375.html
汇编语言逻辑运算指令
http://coderarea.net/html/bianchengyuyan/huibianyuyan/huibianrumen/2009/0316/74374.html
汇编语言算术运算指令
http://coderarea.net/html/bianchengyuyan/huibianyuyan/huibianrumen/2009/0316/74373.html
常见修改(
机器码)
http://coderarea.net/html/bianchengyuyan/huibianyuyan/huibianrumen/2009/0316/74372.html
需要熟练掌握的全部汇编知识
http://coderarea.net/html/bianchengyuyan/huibianyuyan/huibianrumen/2009/0316/74371.html
汇编语言经典句式
http://coderarea.net/html/bianchengyuyan/huibianyuyan/huibianrumen/2009/0316/74370.html
断点设置表
http://coderarea.net/html/bianchengyuyan/huibianyuyan/huibianrumen/2009/0316/74369.html
汇编基础资料速查
http://coderarea.net/html/bianchengyuyan/huibianyuyan/huibianshili/2009/0316/74478.html
用内联汇编判断整数计算是否产生进位借位或溢出
http://coderarea.net/html/bianchengyuyan/huibianyuyan/huibianshili/2009/0316/74477.html
泛型类型的子类及通配符的使用
http://coderarea.net/html/bianchengyuyan/huibianyuyan/huibianrumen/2009/0316/74368.html
win32
下使用内存映射文件
http://coderarea.net/html/bianchengyuyan/huibianyuyan/huibianrumen/2009/0316/74367.html
直接系统服务(Direct System Service)
http://coderarea.net/html/bianchengyuyan/huibianyuyan/huibianrumen/2009/0316/74366.html
时钟服务(Clock Service——INT 1AH)
http://coderarea.net/html/bianchengyuyan/huibianyuyan/huibianrumen/2009/0316/74365.html
并行口服务(Parallel Port Service——INT 17H)
http://coderarea.net/html/bianchengyuyan/huibianyuyan/huibianrumen/2009/0316/74364.html
键盘服务(Keyboard Service——INT 16H)
http://coderarea.net/html/bianchengyuyan/huibianyuyan/huibianrumen/2009/0316/74363.html
杂项系统服务(Miscellaneous System Service——INT
http://coderarea.net/html/bianchengyuyan/huibianyuyan/huibianrumen/2009/0316/74362.html
串行口服务(Serial Port Service——INT 14H)
http://coderarea.net/html/bianchengyuyan/huibianyuyan/huibianrumen/2009/0316/74361.html
直接磁盘服务(Direct Disk Service——INT 13H)
http://coderarea.net/html/bianchengyuyan/huibianyuyan/huibianrumen/2009/0316/74360.html
显示服务(Video Service——INT 10H)
http://coderarea.net/html/bianchengyuyan/huibianyuyan/huibianrumen/2009/0316/74359.html
其它DOS
中断
http://coderarea.net/html/bianchengyuyan/huibianyuyan/huibianrumen/2009/0316/74358.html
鼠标功能中断INT 33H
http://coderarea.net/html/bianchengyuyan/huibianyuyan/huibianrumen/2009/0316/74357.html
时间和日期功能(Time and Date Function)
http://coderarea.net/html/bianchengyuyan/huibianyuyan/huibianrumen/2009/0316/74356.html
进程控制功能(Process-Control Function)
http://coderarea.net/html/bianchengyuyan/huibianyuyan/huibianrumen/2009/0316/74355.html
系统功能(System Function)
http://coderarea.net/html/bianchengyuyan/huibianyuyan/huibianrumen/2009/0316/74354.html
内存分配功能(Memory-Allocation Function)
http://coderarea.net/html/bianchengyuyan/huibianyuyan/huibianrumen/2009/0316/74353.html
记录操作功能(FCB)(Record Function)
http://coderarea.net/html/bianchengyuyan/huibianyuyan/huibianrumen/2009/0316/74352.html
文件操作功能(FCB)(File Operation Function)
http://coderarea.net/html/bianchengyuyan/huibianyuyan/huibianrumen/2009/0316/74350.html
磁盘管理功能(Disk-Management Function)
http://coderarea.net/html/bianchengyuyan/huibianyuyan/huibianrumen/2009/0316/74348.html
目录控制功能(Directory-Control Function)
http://coderarea.net/html/bianchengyuyan/huibianyuyan/huibianrumen/2009/0316/74347.html
字符功能调用类(Character-Oriented
Function)
http://coderarea.net/html/bianchengyuyan/huibianyuyan/huibianrumen/2009/0316/74346.html
鼠标中断实例学习
http://coderarea.net/html/bianchengyuyan/huibianyuyan/huibianshili/2009/0316/74475.html
断点设置原理
http://coderarea.net/html/bianchengyuyan/huibianyuyan/huibianrumen/2009/0316/74345.html
ESP
定律手工脱壳方法步骤
http://coderarea.net/html/bianchengyuyan/huibianyuyan/huibianshili/2009/0316/74474.html
汇编中的管道操作方法
http://coderarea.net/html/bianchengyuyan/huibianyuyan/huibianrumen/2009/0316/74343.html
汇编进程控制的实现方法
http://coderarea.net/html/bianchengyuyan/huibianyuyan/huibianrumen/2009/0316/74342.html
汇编中使用定时器的方法
http://coderarea.net/html/bianchengyuyan/huibianyuyan/huibianrumen/2009/0316/74341.html
汇编复杂形状的窗口实例学习
http://coderarea.net/html/bianchengyuyan/huibianyuyan/huibianrumen/2009/0316/74340.html
汇编图形界面的操作
http://coderarea.net/html/bianchengyuyan/huibianyuyan/huibianrumen/2009/0316/74339.html
控件的子类化
http://coderarea.net/html/bianchengyuyan/huibianyuyan/huibianrumen/2009/0316/74338.html
工具栏和状态栏的使用
http://coderarea.net/html/bianchengyuyan/huibianyuyan/huibianrumen/2009/0316/74337.html
汇编菜单和加速键
http://coderarea.net/html/bianchengyuyan/huibianyuyan/huibianrumen/2009/0316/74336.html
汇编语言中窗口的基本知识
http://coderarea.net/html/bianchengyuyan/huibianyuyan/huibianrumen/2009/0316/74335.html
检测不了的错误现象及解决方法
http://coderarea.net/html/bianchengyuyan/huibianyuyan/huibianshili/2009/0316/74473.html
汇编基础-
对话框和资源文件的使用
http://coderarea.net/html/bianchengyuyan/huibianyuyan/huibianrumen/2009/0316/74334.html
Win32
汇编程序的结构和语法
http://coderarea.net/html/bianchengyuyan/huibianyuyan/huibianrumen/2009/0316/74333.html
Win32
汇编的环境和基础
http://coderarea.net/html/bianchengyuyan/huibianyuyan/huibianrumen/2009/0316/74332.html
常量符号定义方法
http://coderarea.net/html/bianchengyuyan/huibianyuyan/huibianrumen/2009/0316/74331.html
一、通用数据传送指令
1
、传送指令 MOV (move)
指令的汇编格式:MOV DST,SRC
指令的基本 功能:(DST)<-(SRC)
将原操作数(
字节或字)
传送到目的地址。
指令支持的寻址方式:目的操作数和源操作数不能同时用存储器寻址 方式,这个限制适用于所有指令。
指令的执行对标志位的影响:不影响标志位。
指令的特殊要求:目的操作数DST
和源操作数SRC
不允许同时
为段寄存器;
目的操作数DST
不能是CS
,也不能用立即数方式。
2
、进栈指令 PUSH (push onto the stack)
出栈指令 POP (pop from the stack)
指令的汇编格式:PUSH SRC
;POP DST
指令的基本功能:PUSH
指令在程序中常用来暂存某些数据,而POP
指令又可将这些数据恢复。
PUSH SRC (SP)<-(SP)-2
;(SP)<-(SRC)
POP DST (DST)<-((SP))
;(SP)<-(SP)
指令支持的寻址方式:push
和 pop
指令不能不能使用立即数寻址方式。
指 令对标志位的影响:PUSH
和 POP
指令都不影响标志位。
指令的特殊要求:PUSH
和 POP
指令只能是字操作,因此,存取字数据后,SP
的修改必须是+2
或者 -2
;
POP
指令的DST
不允许是CS
寄存器;
3
、 交换指令 XCHG (exchange)
指令的汇编格式:XCHG OPR1,OPR2
指令的基本功能: (OPR1)<->(OPR2)
指令支持的寻址方式:一个操作数必须在寄存器中,另一个操作数可以在寄存器或存储器中。
指令 对标志位的影戏:不影响标志位。
指令的特殊要求:不允许使用段寄存器。
二、累加器专用传送指令
4
、输入指令 IN (input)
输出指令 OUT (output)
指令的汇编格式:IN ac,port port<=0FFH
IN ac,DX port>0FFH
OUT port,ac port<=0FFH
OUT DX,ac port>0FFH
指令的基本功能:对8086
及其后继机型的微处理机,所有I/O
端口与CPU
之间的通信都由输入输出指令IN
和OUT
来
完成。IN
指令将信息从I/O
输入到CPU
,OUT
指令将信息从CPU
输出到I/O
端口,因此,IN
和OUT
指令都要指出I/O
端口地址。
IN ac,port port<=0FFH (AL)<-(port)
传送字节 或
(AX)<-(port+1,port)
传送字
IN ac,DX port>0FFH (AL)<-((DX))
传送字节 或
(AX)<-((DX)+1,(DX))
传送字
OUT port,ac port<=0FFH (port)<-(AL)
传送字节 或
(port+1,port)<-(AX)
传送字
OUT DX,ac port>0FFH (DX)<-(AL)
传送字节 或
((DX)+1,(DX))<-(AX)
传送字
指令对 标志位的影响:不影响标志位。
指令的特殊要求:只限于在AL
或AX
与I/O
端口之间传送信息。
传送16
位信息用AX
,传送8
位信息用 AL
,这取决于外设端口的宽度。
5
、换码指令 XLAT (translate)
指令的汇编格式:XLAT opr
或 XLAT
指令的基本功能:这条指令根据AL
寄存器提供的位移量,将BX
指使的字节表格中的代码换存在AL
中。
(AL)<-((DS)*16+(BX)+(AL))
指 令对标志位的影响:
不影响标志位。
指令的特殊要求:所建字节表格的长度不能超过256
字节,因为存放位移量的是8
位寄存器AL
。
opr
为 表格的首地址,因为opr
所表示的偏移地址已存入BX
寄存器,所以opr
在换码指令中可有可无,有则提高程序的可读性。
三、地址传送指令
6
、 有效地址传送器 LEA (load effective address)
指令的汇编格式:LEA reg
,src
指令的基本 功能:LEA
指令把源操作数的有效地址送到指定的寄存器,这个有效地址是由src
选定的一种存储器寻址方式确定的。
指令支持的寻址方式:各种存储 器寻址方式。
指令对标志位的影响:不影响标志位。
指令的特出要求:指令中reg
不能是段寄存器;
7
、指针送寄存器和DS LDS (load DS with point)
指针送寄存器和ES LES (load ES with point)
指令的汇编 格式:LDS reg,src
LES reg,src
指令的基本功能:LDS
和LES
指令把确定内存单元位置的偏移地址送寄存器,段地址 DS
或ES
。这个偏移地址和段地址(也称地址指针)是由src
指定的两个相继字单元提供的。
LDS reg,src (reg)<-(src) (DS)<-(src+2)
LES reg,src (reg)<-(src) (ES)<-(src+2)
指令支持的寻址方式:src
必须为存储器寻址方式
指令对标志位的影响:不影响标志位。
指令的特 殊要求:指令中REG
不能是段寄存器;
四、标志寄存器传送指令
8
、标志寄存器的低字节送AH LAHF (load AH with FLAGS)
指令的汇编格式:LAHF
指令的基本功能:(AH)<-(FLAGS)0-7
指令对 标志位的影响:不影响标志位
9
、AH
送标志寄存器低字节 SAHF(store AH
into FLAGS)
指令的汇 编格式:SAHF
指令的基本功能:(FLAGS)0-7<-(AH)
指令对标志位的影响:由装入值来确定标志位的值。
10
、 标志进栈 PUSHF (push the flags)
指令的汇编格式:PUSHF
指令的基本功能: (SP)<-(SP)-2 ((SP)+1,(SP))<-(FLAGS)0-15
指令对标志位的影响:不影响标志位。
11
、 标志出栈 POPF (pop the FLAGES)
指令的汇编格式:POPF
指令的基本功能: (FLAGS)0-15<-((SP)+1,(SP)) (SP)<-(SP)+2
指令对标志位的影响:由装入值来确定标志位的值。
[
算 术指令]
一、加法指令
12
、加法指令 ADD (addition)
指令的汇编格式:add dst,src
指令的基本功能:(dst)<-(src)+(dst)
指令支持的寻址方式:他们两个操作数不能同时为存储器寻址。 即为除源操作数为立即数的情况外,源操作数和目地操作数必须有一个寄存器寻址方式。
指令对标志位的影响:
SF=1
加法结果为负数(符号位为1
)
SF=0
加法结果为正数(符号位为0
)
ZF=1
加法结果为零
ZF=0
加法结果不为零
CF=1
最高有效位向高位有进位
CF=0
最高有效位向高位无进位
OF=1
两个同符号数相加(正数+
正数 或 负数+
负数),结果符号与其相反。
OF=0
两个不同符号数相加,或同符号数相加,结果符号与其相同。
13
、带进为加法指令 ADC (add with carry)
指令的汇编格式:ADD dst,src
指令的基本功能: (dst)<-(src)+(dst)+CF
指令支持的寻址方式:他们两个操作数不能同时为存储器寻址。即为除源操作数为立即数的情况外, 源操作数和目地操作数必须有一个寄存器寻址方式。
指令对标志位的影响:SF=1
加法结果为负数
SF=0
加法结果为正数
ZF=1
加法结果为零
ZF=0
加法结果不为零
CF=1
最高有效位向高位有进位
CF=0
最低有效位相高位无进位
OF=1
两个同符号数相加,结果符号与其相反,
OF=0
两个同符号数相加,或同符号相加,结果符号与其相同
14
、加1
指令 INC (increament)
指令的汇编格式:INC opr
指令的基本功能:(opr)<-(opr)
指令支持的寻址方式 可以使用除立即数方式外的任何寻址方式
指令对标志位的影响:SF=1
加法结果为负数
SF=0
加法结果为正数
ZF=1
加法结果为零
ZF=0
加法结果不为零
OF=1
两个同符号数相加,结果符号与其相反,
OF=0
两个同符号数相加,或同符号相加,结果符号与其相同。
二、减法指令
15
、减法指令 SUB (subtract)
指 令的汇编格式:SUB dst,src
指令的基本功能:(dst)<-(dst)-(src)
指令支持的寻址方式:他们两个操作数 不能同时为存储器寻址。即为除源操作数为立即数的情况外,源操作数和目地操作数必须有一个寄存器寻址方式。
指令对标志位的影响:SF=1
减法结果为负数(符号位为1
)
SF=0
减法结果为正数(符号位为0
)
ZF=1
减法结果为零
ZF=0
减法结果不为零
CF=1
二进制减法运算中最高有效位向高位有借位(被减数小于减数,不够减的情况)
CF=0
二进制减法运算中最高有效为向高位无借位(被减数〉=
减数,够减的情况)
OF=1
两数符号相反(正数-
负数,或负数-
正数),而结果符号与减数相同。
OF=0
同符号数相减时,或不同符号数相减,其结果符号与减数不同。
16
、 带借位减法指令 SBB (subtract with borrow)
指令的汇编格式:SBB dst,src
指令的基本功 能:(dst)<-(dst)-(src)-CF
指令支持的寻址方式:他们两个操作数不能同时为存储器寻址。即为除源操作数为立即数的情况 外,源操作数和目地操作数必须有一个寄存器寻址方式。
指令对标志位的影响:SF=1
减法结果为负数(符号位为1
)
SF=0
减法结果为正数(符号位为0
)
ZF=1
减法结果为零
ZF=0
减法结果不为零
CF=1
二进制减法运算中最高有效位向高位有借位(被减数小于减数,不够减的情况)
CF=0
二进制减法运算中最高有效为向高位无借位(被减数〉=
减数,够减的情况)
OF=1
两数符号相反(正数-
负数,或负数-
正数),而结果符号与减数相同。
OF=0
同符号数相减时,或不同符号数相减,其结果符号与减数不同。
17
、 减1
指令 DEC (decrement)
指令的汇编格式:DEC opr
指令的基本功能:(opr)<-(opr)-1
指 令支持的寻址方式:可以使用除立即数方式外的任何寻址方式。
指令对标志位的影响:SF=1
减法结果为负数(符号位为1
)
SF=0
减法结果为正数(符号位为0
)
ZF=1
减法结果为零
ZF=0
减法结果不为零
OF=1
两数符号相反(正数-
负数,或负数-
正数),而结果符号与减数相同。
OF=0
同符号数相减时,或不同符号数相减,其结果符号与减数不同。
18
、 比较指令 CMP (compare)
指令的汇编格式:CMP opr1,opr2
指令的基本功能: (opr1)-(opr2),
根据相减结果设置条件码,但不回送结果。
指令支持的寻址方式:他们两个操作数不能同时为存储器寻址。即为除源操作数 为立即数的情况外,源操作数和目地操作数必须有一个寄存器寻址方式。
指令对标志位的影响:SF=1
减法结果为负数(符号位为1
)
SF=0
减法结果为正数(符号位为0
)
ZF=1
减法结果为零
ZF=0
减法结果不为零
CF=1
二进制减法运算中最高有效位向高位有借位(被减数小于减数,不够减的情况)
CF=0
二进制减法运算中最高有效为向高位无借位(被减数〉=
减数,够减的情况)
OF=1
两数符号相反(正数-
负数,或负数-
正数),而结果符号与减数相同。
OF=0
同符号数相减时,或不同符号数相减,其结果符号与减数不同。
19
、 求补指令 NEG (negate)
指令的汇编格式:NEG opr
指令的基本功能:(opr)<- -(opr)
指 令支持的寻址方式:可以使用除立即数方式外的任何寻址方式。
指令对标志位的影响:CF=1
不为0
的操作数求补时
CF=0
为0
的操作数求补时
OF=1
操作数为-128
(字节运算)或操作数为-32768
(字运算)
OF=0
当求补运算的操作数不为-128
(字节)或-32768
(字)时
三、乘法指令
20
、无符号乘法指令 NUL (unsigned multiple)
有符号乘法指令 IMUL(signed muliple)
指令的汇编格式:NUL src
IMUL src
指令的基本功能:(AX)<-(AL)*(src)
(DX,AX)<-(AX)*(src)
指 令支持的寻址方式:src
可以使用除立即数方式以外的任一种寻址方式。
指令对标志位的影响:乘法指令只影响标志位CF
和OF
,其他条件码位无定
义。
MUL
指令的条件码设置为:
CF OF=0 0
乘积的高一半为0
(字节操作的(AH
)或字操作的(DX
))
CF OF=1 1
乘积的高一半不为0
IMUL
指令的条件码设置为:
CF OF=0 0
乘积的高一半为低一半的符号扩展.
CF OF=1 1
其他情况
指令的特殊要求:MUL
和IMUL
指令的区别仅在于操作数是无符号还是带符号数,它们的共同点是,指令中只给出源操作数src
,目的操 作数是隐含的,它只能是累加器(字运算为AX
,字节运算为AL
)。隐含的乘积寄存器是AX
或DX
(高位)和AX
(低位)。
四、符 号扩展指令
21
、节扩展为字 CBW (convert byte to word)
指令的汇编格式:CBW
指 令的基本功能:(AH)=00H
当(AL)
的最高有效位为0
时
(AH)=FFH
当(AL)
的最高有效位为1
时
指令对标志位的影响:不 影响标志位
指令的特殊要求:这是条无操作数的指令,进行符号扩展的操作数必须存放在AL
寄存器或AX
寄存器中。
22
、字扩展为双 字 CWD (convert word to double word)
指令的汇编格式:CWD
指令的基本功能: (DX)=0000H
当(AX)
的最高有效位为0
时
(DX)=FFFFH
当(AX)
的最高有效位为1
时
指令对标志位的影响:不影响标 志位
指令的特殊要求:这是条无操作数的指令,进行符号扩展的操作数必须存放在AL
寄存器或AX
寄存器中。
五、除法指令
23
、 无符号数除法 DIV (unsigned divide)
带符号数除法 IDIV (singed divide)
指令的汇编 格式:DIV src
IDIV src
指令的基本功能:字操作
(AL)<-(AX)/src
的商
(AH)<-(AX)/src
的余数
字节操作
(AX)<-(DX,AX)/src
的商
(DX)<-(DX,AX)/src
的余数
指令支持 的寻址方式:src
作为除数,可用除立即数以外的任一种寻址方式来取得。
指令对标志位的影响:不影响条件码。
指令的特殊要求:除法指令要 求字操作时,被除数必须为32
位,除数是16
位,商和余数是16
位的;
字节操作时,被除数必须为16
位,除数是8
位,得到的商和余数是8
位的。
六、 十进制调整指令
[
逻辑指令]
一、逻辑运算
24
、逻辑与 AND (logic and)
指 令的汇编格式:AND dst,src
指令的基本功能:(dst)<-(dst)
与(src)
指令支持的寻址方式:两个操作数不能 同时为存储器寻址。即为除源操作数为立即数的情况外,源操作数和目地操作数必须有一个寄存器寻址方式。
指令对标志位的影响:指令执行后 CF
和 OF
置零,AF
无定义。
SF=1
指令执行后的结果为负数(符号位为1
)
SF=0
指令执行后的结果为正数(符号位为0
)
ZF=1
指令执行后的结果为零
ZF=0
指令执行后的结果不为零
PF=1
结果操作数中1
的个数为偶数时置1
PF=0
结果操作数中1
的个数为奇数时置0
25
、逻辑或 OR (logic or)
指令的汇编格式:OR dst
,src
指 令的基本功能:(dst)<-(dst)
或(src)
指令支持的寻址方式:两个操作数不能同时为存储器寻址。即为除源操作数为立即数的情况 外,原操作数和目的操作数必须有一个寄存器寻址方式。
指令对标志位的影响:令执行后 CF
和 OF
置零,AF
无定义。
SF=1
指令执行后的结果为负数(符号位为1
)
SF=0
指令执行后的结果为正数(符号位为0
)
ZF=1
指令执行后的结果为零
ZF=0
指令执行后的结果不为零
PF=1
结果操作数中1
的个数为偶数时置1
PF=0
结果操作数中1
的个数为奇数时置0
26
、 逻辑非 NOT (logic not)
指令的汇编格式:NOT orc
指令的基本功能:(dst)<-(opr)
指 令支持的寻址方式:除立即数寻址方式以外的其余寻址方式
指令对标志位的影响:对标志位无影响
27
、异或 XOR (exclusice or)
指令的汇编格式:XOR dst,src
指令的基本功能:(dst)<-(dst)
异或 (src)
指令支持的寻址方式:两个操作数不能同时为存储器寻址。即为除源操作数为立即数的情况外,原操作数和目的操作数必须有一个寄存器寻址方 式。
指令对标志位的影响:令执行后 CF
和 OF
置零,AF
无定义。
SF=1
指令执行后的结果为负数(符号位为1
)
SF=0
指令执行后的结果为正数(符号位为0
)
ZF=1
指令执行后的结果为零
ZF=0
指令执行后的结果不为零
PF=1
结果操作数中1
的个数为偶数时置1
PF=0
结果操作数中1
的个数为奇数时置0
28
、测试指令 TEST
指令的 汇编格式:TEST opr1,opr2
指令的基本功能:(opr1)
与(opr2)
指令支持的寻址方式:两个操作数不能同时为存储器寻 址,即为除源操作数为立即数的情况外,源操作数和目的操作数必须有一个寄存器寻址方式。
指令对标志位的影响:令执行后 CF
和 OF
置零,AF
无定义。
SF=1
指令执行后的结果为负数(符号位为1
)
SF=0
指令执行后的结果为正数(符号位为0
)
ZF=1
指令执行后的结果为零
ZF=0
指令执行后的结果不为零
PF=1
结果操作数中1
的个数为偶数时置1
PF=0
结果操作数中1
的个数为奇数时置0
二、移位指令
29
、逻辑左移 SHL (shift logical left)
指 令的汇编格式:SHL dst,cnt
指令的基本功能:SHL
指令向左逐位移动cnt
次,每次逐位移动后,最低位用0
来补充,最高位移入CF
。
指 令支持的寻址方式:目的操作数dst
可以是除立即数外的任何寻址方式。移位次数(或位数)cnt=1
时,1
可以直接写在指令中,cnt
〉1
时,cnt
必须 放入CL
寄存器中。
指令对标志位的影响:CF=
移入的数值
OF=1
当cnt=1
时,移动后最高位的值发生变化。
OF=0
当cnt=1
时,移动时最高位的值未发生变化。
SF
、ZF
、PF
根据移动后的结果设置。
30
、逻辑右移 SHR (shift logical right)
指令的汇编格式:SHR dst,cnt
指令的基本功能:SHR
指令向右逐位移动cnt
次,每次逐
位移动后,最高位用0
来补充,最低位移入CF
。
指令支持的寻址方式:目的操作数dst
可以是除立即数外的任何寻址方式。移位次数(或位 数)cnt=1
时,1
可以直接写在指令中,cnt
〉1
时,cnt
必须放入CL
寄存器中。
指令对标志位的影响:CF=
移入的数值
OF=1
当cnt=1
时,移动后最高位的值发生变化。
OF=0
当cnt=1
时,移动时最高位的值未发生变化。
SF
、ZF
、PF
根据移动后的结果 设置。
31
、算术左移 SAL (shift arithmetic left)
指令的汇编格式:SAL dst cnt
指令的基本功能:SAL
指令向左逐位移动cnt
次,每次逐位移动后,最低位用0
来补充,最高位移入CF
。
指令支持的寻址方式:目的 操作数dst
可以是除立即数外的任何寻址方式。移位次数(或位数)cnt=1
时,1
可以直接写在指令中,cnt
〉1
时,cnt
必须放入CL
寄存器中。
指 令对标志位的影响:CF=
移入的数值
OF=1
当cnt=1
时,移动后最高位的值发生变化。
OF=0
当cnt=1
时,移动时最高位的值未发生变化。
SF
、ZF
、PF
根据移动后的结果设置。
32
、算术右移 SAR (shift arithmetic right)
指令的汇编格式:SAR dst,cnt
指令的基本功能:SAR
指令向右逐位移动cnt
次,
每次逐位移动后,最高位用符号位来补充,最低位移入CF
。
指令支持的寻址方式:目的操作数dst
可以是除立即数外的任何寻址方式。移位次数(或位 数)cnt=1
时,1
可以直接写在指令中,cnt
〉1
时,cnt
必须放入CL
寄存器中。
指令对标志位的影响:CF=
移入的数值
OF=1
当cnt=1
时,移动后最高位的值发生变化。
OF=0
当cnt=1
时,移动时最高位的值未发生变化。
SF
、ZF
、PF
根据移动后的结果 设置。
33
、循环左移 ROL (rotate left)
指令的汇编格式:ROL dst,cnt
指令的基本 功能:ROL
对由dst
指定的寄存器或存储器操作数左移循环移动cnt
所指定的次数,每左移一次,把最高位同时移入CF
和操作数最低位。
指令支 持的寻址方式:目的操作数dst
可以是除立即数外的任何寻址方式。移动次数(或位数)cnt=1
时,1
可以直接写在指令中,cnt
〉1
时,cnt
必须放入 CL
寄存器中。
指令对标志位的影响:CF=
移入的数值
OF=1
当cnt=1
时,移动后最高位的值发生变化。
OF=0
当cnt=1
时,移动时最高位的值未发生变化。
SF
、ZF
、PF
根据移动后的结果设置。
34
、循环右移 ROR (rotate right)
指令的汇编格式:ROR dst,cnt
指令的基本功能:ROR
对由dst
指定的寄存器或存储器操作数右移循环移动cnt
所指定的次数,每右移一次,把最低位同时移入CF
和操作数最高位。
指令支持的寻址方式: 目的操作数dst
可以是除立即数外的任何寻址方式。移动次数(或位数)cnt=1
时,1
可以直接写在指令中,cnt>1
时,cnt
必须放入CL
寄存 器中。
指令对标志位的影响:CF=
移入的数值
OF=1
当cnt=1
时,移动后最高位的值发生变化。
OF=0
当cnt=1
时,移动时最高位的值未发生变化。
SF
、ZF
、PF
根据移动后的结果设置。
35
、带进位的循环左移 RCL (rotate left through carry)
指令的汇编格式:RCL dst,cnt
指令的基本功能:RCL
对由dst
指定的寄存器或存储器操作数,连同进位标志CF
左循环移动,m
所指定的次数,每左移一次,把操作数的最高位移入CF
,而CF
中原有内容移入操作 数的最低位。
指定支持的寻址方式:目的操作数dst
可以是除立即数外的任何寻址方式。移动次数(或位数)cnt=1
时,1
可以直接写在指令 中,cnt
〉1
时,cnt
必须放入CL
寄存器中。
指令对标志位的影响:CF=
移入的数值。
OF=1
当cnt=1
时,移动后最高位的值未发生变化。
OF=0
当cnt=1
时,移动后最高位的值发生变化。
SF
、ZF
、PF
标志位不受影响。
36
、 带进位的循环右移 RCR (rotate right through carry)
指令的汇编格式:RCR dst
,cnt
指 令的基本功能:RCR
对由dst
指定的寄存器或存储器操作数,连同进位标志CF
右循环移动,m
所指定的次数,每右移一次,把操作数的最高低位移入CF
,而CF
中原有内容移入操 作数的最高位。
指令支持的寻址方式:目的操作数dst
可以是除立即数外的任何寻址方式。移动次数(或位数)cnt=1
时,1
可以直接写入指令 中,cnt
〉1
时,cnt
必须放入CL
寄存器中。
指令对标志位的影响:CF=
移入的数值。
OF=1
当cnt=1
时,操作数最高位的值未发生变化。
OF=0
当cnt=1
时,操作数最高位的值发生变化。
SF
、ZF
、PF
标志位不受影响。
[
串 处理指令]
一、设置方向标志指令
37
、DF
置零 CLD (clear direction
flag)
DF
置 一 STD (set direction flag)
指令的汇编格式:CLD
STD
指令的基本功能:CLD DF=0
STD DF=1
二、串处理指令
38
、串传送 MOVSB / MOVSW (move string byte/word)
指 令的汇编格式:MOVSB
MOVSW
指令的基本功能:(ES:DI)<-(DS:SI)
(SI)<-(SI)+/-1(
字 节)
或+/-2(
字)
(DI)<-(DI)+/-1(
字节)
或+/-2(
字)
指令对条件码的影响:不影响条件码。
指令的特 殊要求:源串必须在数据段中,目的串必须在附加段中,串处理指令隐含的寻址方式是SI
和DI
寄存器的间接寻址方式。源串允许使用段跨越前缀来指定段。
39
、 存串 STOSB / STOSW (stroe from string byte/word)
指令的汇编格式:STOSB
STOSW
指 令的基本功能:(ES:DI)<-(AL)
或(AX)
(DI)<-(DI)+/-1(
字节)
或+/-2(
字)
指令对条件码的 影响:不影响条件码。
指令的特殊要求:源串必须在数据段中,目的串必须在附加段中,串处理指令隐含的寻址方式是SI
和DI
寄存器的间接寻址方式。 源串允许使用段跨越前缀来指定段。
40
、取串LODSB / LODSW (load from string byte/word)
指 令的汇编格式:LODSB
LODSW
指令的基本功能:(AL)
或(AX)<-(DS:SI)
(SI)<-(SI)+/-1(
字 节)
或+/-2(
字)
指令对条件码的影响:不影响条件码。
指令的特殊要求:源串必须在数据段中,目的串必须在附加段中,串处理指令隐含的 寻址方式是SI
和DI
寄存器的间接寻址方式。源串允许使用段跨越前缀来指定段。
41
、串比较 CMPSB / CMPSW (compare string byte/word)
指令的汇编格式:CMPSB
CMPSW
指令的基本功能: (DS:SI)-(ES:DI)
根据比较结果设置条件码
(SI)<-(SI)+/-1(
字节)
或+/-2(
字)
(DI)<-(DI)+/-1(
字 节)
或+/-2(
字)
指令对条件码的影响:SF=1
减法结果为负数(符号位为1
)
SF=0
减法结果为正数(符号位为0
)
ZF=1
减法结果为零
ZF=0
减法结果不为零
CF=1
二进制减法运算中最高有效位向高位有借位(被减数小于减数,不够减的情况)
CF=0
二进制减法运算中最高有效为向高位无借位(被减数〉=
减数,够减的情况)
OF=1
两数符号相反(正数-
负数,或负数-
正数),而结果符号与减数相同。
OF=0
同符号数相减时,或不同符号数相减,其结果符号与减数不同。
三、 循环指令
68
、循环 LOOP (loop)
指令的汇编格式:LOOP label
指令的基本功能:① (CX)←(CX)
-1
②
若(CX)≠0
,则(IP)←(IP)
当前+位移量,否则循环结束。
指令的特殊要求:循环指 令都是短转移格式的指令,也就是说,位移量是用8
位带符号数来表示的,转向地址在相对于当前IP
值的-128 ~
+127
字节范围之内。
69
、 为零/
相等时循环 LOOPZ/LOOPE (loop
while nonzero or equal)
指令的汇编格 式:LOOPNZ/LOOPNE label
指令的基本功能:① (CX)←(CX)
-1
②
若ZF=1
且(CX)≠0
,则(IP)←(IP)
当前+位移量,否则循环结束。
指令的特殊要求:循环指令都是短转移格式的指令,也就是说,位移量 是用8
位带符号数来表示的,转向地址在相对于当前IP
值的-128 ~
+127
字节范围之内。
70
、不为零/
不相等时循环 LOOPNZ/LOOPNE
(loop while nonzero or not equal)
指令的汇编格式:LOOPNZ/LOOPNE label
指令的基本功能:① (CX)←(CX)
-1
②
若ZF=0
且(CX)≠0
,则(IP)←(IP)
当前+位移量,否则循环结束。
指令的特殊要求:循环指令都是短转移格式的指令,也就是说,位移量 是用8
位带符号数来表示的,转向地址在相对于当前IP
值的-128 ~
+127
字节范围之内。
CPU常见寄存器介绍
32
位CPU
所含有的寄存器有:
4
个数据寄存器(EAX
、EBX
、ECX
和EDX)
2
个变址和指针寄存器(ESI
和 EDI) 2
个指针寄存器(ESP
和EBP)
6
个段寄存器(ES
、CS
、SS
、DS
、FS
和GS)
1
个指令指针寄存器(EIP) 1
个标志寄存器(EFlags)
1 、数据寄存器
数据寄存器主要用来保存操作数和运算结果等信息,从而节省读取操作数所需占用总线和访问存储器的时间。
32
位CPU
有4
个32
位的通用寄存器EAX
、EBX
、ECX
和EDX
。对低16
位数据的存取,不会影响高16
位的数据。这些
低16
位寄存 器分别命名为:AX
、BX
、CX
和DX
,它和先前的CPU
中的寄存器相一致。
4
个16
位寄存器又可分割成8
个独立的8
位寄存器(AX
:AH-AL
、BX
:BH-BL
、CX
:CH-CL
、DX
:DH-DL)
,每个寄
存 器都有自己的名称,可独立存取。程序员可利用数据寄存器的这种“
可分可合”
的特性,灵活地处理字/
字
节的信息。
寄存器AX
和AL
通常称为累加器(Accumulator)
,用累加器进行的操作可能需要更少时间。累加器可用于乘、
除、输入/
输出等 操作,它们的使用频率很高;
寄存器BX
称为基地址寄存器(Base
Register)
。它可作为存储器指针来使用;
寄存器 CX
称为计数寄存器(Count
Register)
。在循环和字符串操作时,要用它来控制循环次数;在位操作
中,当移多位时,要用CL
来指明 移位的位数;
寄存器DX
称为数据寄存器(Data
Register)
。在进行乘、除运算时,它可作为默认的操作数参与运算,也
可 用于存放I/O
的端口地址。
在16
位CPU
中,AX
、BX
、CX
和DX
不能作为基址和变址寄存器来存放存储单元的地址,但在32
位CPU
中,其32
位
寄存器 EAX
、EBX
、ECX
和EDX
不仅可传送数据、暂存数据保存算术逻辑运算结果,而且也可作为指针寄存器,
所以,这些32
位寄存器更具有通用性。
2 、变址寄存器
32
位CPU
有2
个32
位通用寄存器ESI
和EDI
。其低16
位对应先前CPU
中的SI
和DI
,对低16
位数据的存取,不影响
高16
位的数 据。
寄存器ESI
、EDI
、SI
和DI
称为变址寄存器(Index Register)
,它们主要用于存放存储单元在段内的偏移量,
用它们可实 现多种存储器操作数的寻址方式,为以不同的地址形式访问存储单元提供方便。
变址寄存器不可分割成8 位寄存器。作为通用寄存器,也可存储算术逻辑运算的操作数和运算结果。
它们可作一般的存储器指针使用。在字符串操作指令的执行过程中,对它们有特定的要求,而且还具有特
殊的功能。
3 、指针寄存器
32
位CPU
有2
个32
位通用寄存器EBP
和ESP
。其低16
位对应先前CPU
中的SBP
和SP
,对低16
位数据的存取,不影
响高16
位的 数据。
寄存器EBP
、ESP
、BP
和SP
称为指针寄存器(Pointer Register)
,主要用于存放堆栈内存储单元的偏移量,
用它们可实 现多种存储器操作数的寻址方式,为以不同的地址形式访问存储单元提供方便。
指针寄存器不可分割成8 位寄存器。作为通用寄存器,也可存储算术逻辑运算的操作数和运算结果。
它们主要用于访问堆栈内的存储单元,并且规定:
BP
为基指针(Base Pointer)
寄存器,用它可直接存取堆栈中的数据;
SP
为堆栈指针(Stack Pointer)
寄存器,用它只可访问栈顶。
4 、段寄存器
段寄存器是根据内存分段的管理模式而设置的。内存单元的物理地址由段寄存器的值和一个偏移量组合而成
的,这样可用两个较少位数的值组合成一 个可访问较大物理空间的内存地址。
CPU
内部的段寄存器:
CS——
代码段寄存器(Code Segment Register)
,其值为代码段的段值;
DS ——
数据段寄存器(Data Segment Register)
,其值为数据段的段值;
ES——
附加段寄存器(Extra Segment Register)
,其值为附加数据段的段值;
SS——
堆栈段寄存器(Stack Segment Register)
,其值为堆栈段的段值;
FS——
附加段寄存器(Extra Segment Register)
,其值为附加数据段的段值;
GS——
附加段寄存器(Extra Segment Register)
,其值为附加数据段的段值。
在16
位CPU
系统中,它只有4
个段寄存器,所以,程序在任何时刻至多有4
个正在使用的段可直接访问;在32
位
微机系统中,它有6
个段寄存 器,所以,在此环境下开发的程序最多可同时访问6
个段。
32
位CPU
有两个不同的工作方式:实方式和保护方式。在每种方式下,段寄存器的作用是不同的。有关规定简
单描述如下:
实方式: 前4
个段寄存器CS
、DS
、ES
和SS
与先前CPU
中的所对应的段寄存器的含义完全一致,内存单元的逻辑
地址仍为“
段值:偏移 量”
的形式。为访问某内存段内的数据,必须使用该段寄存器和存储单元的偏移量。
保护方式: 在此方式下,情况要复杂得多,装入段寄存器的不再是段值,而是称为“
选择子”(Selector)
的某个值。。
5 、指令指针寄存器
32 位CPU 把指令指针扩展到32 位,并记作EIP ,EIP 的低16 位与先前CPU 中的IP 作用相同。
指令指针EIP
、IP(Instruction Pointer)
是存放下次将要执行的指令在代码段的偏移量。在具有预取指令功
能的系统 中,下次要执行的指令通常已被预取到指令队列中,除非发生转移情况。所以,在理解它们的功能
时,不考虑存在指令队列的情况。
在实方式下,由于每个段的最大范围为64K
,所以,EIP
中的高16
位肯定都为0
,此时,相当于只用其低16
位
的IP
来反映程序中指令的执 行次序。
6 、标志寄存器
一、运算结果标志位
1
、进位标志CF(Carry Flag)
进位标志CF
主要用来反映运算是否产生进位或借位。如果运算结果的最 高位产生了一个进位或借位,那么,其值为1
,否则其值为0
。
使用该标志位的情况有:多字( 字节) 数的加减运算,无符号数的大小比较运算,移位操作,字( 字节) 之间移位,专门改变CF 值的指令等。
2
、奇偶标志PF(Parity Flag)
奇偶标志PF
用于反映运算结果中“1”
的个数的奇偶性。如果“1”
的个数为偶数,则PF
的值为 1
,否则其值为0
。
利用PF 可进行奇偶校验检查,或产生奇偶校验位。在数据传送过程中,为了提供传送的可靠性,如果采用奇偶校验的方法,就可使用该标志位。
3
、辅助进位标志AF(Auxiliary Carry Flag)
在发生下列情况时,辅助进位标志AF
的值被置为1
,否则其值为0
:
(1)
、在字操作时,发生低字节向高字节进位或借位时;
(2)
、在字节操作时,发生低4
位向高4
位进位或借位时。
对以上6 个运算结果标志位,在一般编程情况下,标志位CF 、ZF 、SF 和OF 的使用频率较高,而标志位PF 和AF 的使用频率较低。
4
、零标志ZF(Zero Flag)
零标志ZF
用来反映运算结果是否为0
。如果运算结果为0
,则其值为1
,否则其值为0
。在判断运算结果
是否为0
时,可使用此标志位。
5
、符号标志SF(Sign Flag)
符号标志SF
用来反映运算结果的符号位,它与运算结果的最高位相同。在微机系统中,有符号数采用补 码表示法,所以,SF
也就反映运算结果的正负号。运算结果为正数时,SF
的值为0
,否则其值为1
。
6
、溢出标志OF(Overflow Flag)
溢出标志OF
用于反映有符号数加减运算所得结果是否溢出。如果运算结果超过当前运算位数所 能表示的范围,则称为溢出,OF
的值被置为1
,否则,OF
的值被清为0
。
“ 溢出” 和“ 进位” 是两个不同含义的概念,不要混淆。如果不太清楚的话,请查阅《计算机组成原理》课程中的有关章节。
二、状态控制标志位
状态控制标志位是用来控制CPU
操作的,它们要通过专门的指令才能使之发生改变。
1
、追踪标志TF(Trap Flag)
当追踪标志TF
被置为1
时,CPU
进入单步执行方式,即每执行一条指令,产生一个单步中断请求。这 种方式主要用于程序的调试。
指令系统中没有专门的指令来改变标志位TF 的值,但程序员可用其它办法来改变其值。
2
、中断允许标志IF(Interrupt-enable Flag)
中断允许标志IF
是用来决定CPU
是否响应CPU
外部的可屏蔽中断发 出的中断请求。但不管该标志为何值,CPU
都必须响应CPU
外部的不可屏蔽中断所发出的中断请求,以及CPU
内部产生的中断请求。具体规定如下:
(1) 、当IF=1 时,CPU 可以响应CPU 外部的可屏蔽中断发出的中断请求;
(2) 、当IF=0 时,CPU 不响应CPU 外部的可屏蔽中断发出的中断请求。
CPU 的指令系统中也有专门的指令来改变标志位IF 的值。
3
、方向标志DF(Direction Flag)
方向标志DF
用来决定在串操作指令执行时有关指针寄存器发生调整的方向。具体规定在第 5.2.11
节——
字符串操作指令——
中给出。在微机的指令系统中,还提供了专门的指令来改变标志位DF
的值。
三、32
位标志寄存器增加的标志位
1
、I/O
特权标志IOPL(I/O Privilege
Level)
I/O
特权标志用两位二 进制位来表示,也称为I/O
特权级字段。该字段指定了要求执行I/O
指令的特权级。如果当前的特权级别在数值上小于等于IOPL
的值,那么,该I/O
指令 可执行,否则将发生一个保护异常。
2
、嵌套任务标志NT(Nested Task)
嵌套任务标志NT
用来控制中断返回指令IRET
的执行。具体规定如下:
(1) 、当NT=0 ,用堆栈中保存的值恢复EFLAGS 、CS 和EIP ,执行常规的中断返回操作;
(2) 、当NT=1 ,通过任务转换实现中断返回。
3
、重启动标志RF(Restart Flag)
重启动标志RF
用来控制是否接受调试故障。规定:RF=0
时,表示“
接受”
调试故障,否则 拒绝之。在成功执行完一条指令后,处理机把RF
置为0
,当接受到一个非调试故障时,处理机就把它置为1
。
4
、虚拟8086
方式标志VM(Virtual 8086 Mode)
如果该标志的值为1
,则表示处理机处于虚拟的8086
方式下的工作状
态,否则,处理机处于一般保护方式下的工作状态。