zoukankan      html  css  js  c++  java
  • 汇编工具

    【常见的基本汇编书籍】

    《Windows.环境下32位汇编语言程序设计(第2版)》

    《汇编语言编程艺术》

    《Intel汇编语言程序设计(第四版)》

    《Intel汇编语言程序设计(第五版)范例》

    《80x86汇编语言程序设计教程》

    《IBM.PC.汇编语言程序设计(第五版)》

     

     《Microsoft MASM手册》

     《Intel® 64 and IA-32 Architectures Software Developer's Manuals》

     


     

    回页首

    【汇编编译器】

     

    MASM32

    MASM6.0

    NASM-Win32

    NASM-DOS

    NASM-Linux

    TASM5.0

    简易MASM附带Turbo Debugger

    Windows环境下编写汇编程序的工具 

     


    回页首

    汇编语言网站 

    编程中国 >>技术教程 >> 开发语言 >> 汇编  http://www.bccn.net/Article/kfyy/hb/

     

    汇编网  http://www.asmedu.net/

     

    80x86汇编小站  www.x86asm.com/

     

    AoGo汇编小站  http://www.aogosoft.com/

     

    Assembly Language for Intel-BasedComputers  http://kipirvine.com/asm/

     

    NASM  http://www.nasm.us/

     

    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——INThttp://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-OrientedFunction)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 AHinto 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 directionflag)
    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 (loopwhile 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称为基地址寄存器(BaseRegister)。它可作为存储器指针来使用; 
     寄存器 CX称为计数寄存器(CountRegister)。在循环和字符串操作时,要用它来控制循环次数;在位操作
     中,当移多位时,要用CL来指明 移位的位数; 
     寄存器DX称为数据寄存器(DataRegister)。在进行乘、除运算时,它可作为默认的操作数参与运算,也
     可 用于存放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 PrivilegeLevel)
    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方式下的工作状态,否则,处理机处于一般保护方式下的工作状态。

     

  • 相关阅读:
    win中使用curl上传文件报错
    S2-052
    S2-048
    S2-045、S2-046
    S2-033、S2-037
    S2-032
    S2-029
    day12-python之深灰魔法
    day10-11-python基础之字符串
    day09-python基础
  • 原文地址:https://www.cnblogs.com/Zblogs/p/3261213.html
Copyright © 2011-2022 走看看