汇编介绍

汇编大多是指汇编语言,汇编程序。把汇编语言翻译成机器语言的过程称为汇编。在汇编语言中,用助记符(Memoni)代替操作码,用地址符号(Symbol)或标号(Label)代替地址码。这样用符号代替机器语言的二进制码,就把机器语言变成了汇编语言。于是汇编语言亦称为符号语言。用汇编语言编写的程序,机器不能直接识别,要由一种程序将汇编语言翻译成机器语言,这种起翻译作用的程序叫汇编程序,汇编程序是系统软件中语言处理的系统软件。

目录

词语解释
汇编简介
相关教材
编译环境
常用命令
汇编基础
展开

编辑本段词语解释

huì biān1.动词,把资料或文章等编辑在一起2.名词,编辑在一起的资料,文献3.名词,一种计算机语言

编辑本段汇编简介

汇编语言(Assembly Language)是面向机器的 程序设计语言。汇编语言比 机器语言易于读写、易于调试和修改,同时也具有机器语言执行速度快,占内存空间少等优点,但在编写复杂程序时具有明显的局限性,汇编语言依赖于具体的机型,不能通用,也不能在不同机型之间移植。是能完成一定任务的机器指令的集合。常说汇编语言过时,是低级语言,并不是说汇编语言要被弃之,相反,汇编语言仍然是程序员必须了解的语言,在某些行业与领域,汇编是必不可少的,非它不可适用。只是,现在 计算机最大的领域为IT 软件,也是我们常说的 Windows编程,在熟练的程序员手里,使用汇编语言编写的程序,运行效率与性能比其它语言写的程序是成倍的优秀,但是代价是需要更长的时间来优化,如果对计算机原理及编程基础不扎实,实在是得不偿失,对比现在的软件开发,已经是市场化的软件行业,加上 高级语言的优秀与跨平台,一个公司不可以让一个团队使用汇编语言来编写所有的东西,花上几倍甚至几十倍的时间,不如使用其它语言来完成,只要最终结果不比汇编语言编写的差太多,就能抢先一步完成,这是市场经济下的必然结果。

汇编语言 (6张)
但是,至今为止,还没有程序员敢断定汇编语言是不需要学的,一个不懂汇编语言的程序员,只是三流的程序员,这是大部分人的共识,同时,技术汇编语言(Assembly Language)是面向机器的程序设计语言精湛的汇编程序员,已经脱离软件开发,挤身于工业电子编程中,一个电子工程师,主要开发语言就是汇编, c语言使 用只占极少部分,而电子开发工程师是千金难求,在一些工业公司,一个核心的电子工程师比其它任何职员待遇都高,对比起来,一般电子工程师待遇是程序员的十 倍以上。这种情况是因为现在学习汇编的人虽然也不少,但是真正能学到精通的却不多,它难学,难用,适用范围小,虽然简单,但是过于灵活,学习过高级语言的 人去学习汇编比一开始学汇编的人难得多,但是学过汇编的人学习高级语言却很容易,简从繁易,繁从简难。总之,汇编语言是程序员的必修语言。目前国内最好的汇编网站是“AoGo汇编小站”。其站长aogo,就是一个在工业方面有所成就的工程师,有意者可多参考。其次就是 罗云彬的汇编站点:这个大概是国内建站时间最长的汇编站点,其编写的《Windows坏境下32位 汇编语言程序设计》一书。是站长十几年的经验的集合,不妨看看。熟悉指令,可以尝试破解,加强兴趣,参考看雪学院,国内最好的破解组织,其中看雪与众高手打造的破解书《加密 解密完全方案》非常有名。汇编语言是一种低级的程序语言可直接控制硬件。

编辑本段相关教材

《80X86汇编语言基础教程》

基本信息 教材名称:80X86汇编语言基础教程ISBN编号: 9787111253822出版时间:2009-3-1出版社: 机械工业出版社 页数: 213版次印次: 1作者: (美)德特默(Detmer,R.C.) 著, 郑红,陈丽琼 译开本: 16开装帧: 平装印数: 1 内容简介 学会一门具体的汇编语言对理解 计算机体系结构是非常有益的,然而,许多关于计算机组成和体系结构的教材对这方面的知识介绍得不多。《80x86汇编语言基础教程(附光盘)》主要针对Intel 80x86体系结构介绍汇编语言知识,因此既是计算机组成和体系结构课程的很好的补充教材,同时也适合作为单独的汇编语言课程教材。通过《80x86汇编语言基础教程(附光盘)》的学习,学生能够使用 微软的MASM汇编器来编译32位的平面存储模式程序,并在微软的Windbg调试器控制下跟踪程序指令的执行,从中了解计算机内部存储器和寄存器内容的变化。《80x86汇编语言基础教程(附光盘)》附带的 软件包为编写和调试控制台应用程序提供了很好的环境。 目录 出版者的话前言第1章计算机中数的表示第2章软件工具和汇编语言语法第3章基本指令第4章分支与循环第5章过程第6章位运算第7章浮点运算附录A 十六进制/ASC 码转换附录B 有用的 MS-DOS命令附录C MASM 6.11 保留字附录D 80x86 指令(按助记符排列)附录E 80x86 指令(按操作码排列)

《汇编语言》

基本信息 教材名称:汇编语言(第2版)ISBN编号: 9787302172284出版时间: 2008-4-1出版社: 清华大学出版社页数: 337版次印次: 2作者: 王爽 著开本: 16开装帧: 平装印数: 1字数: 527000 内容简介 汇 编语言是各种CPU提供的机器指令的助记符的集合,人们可以用汇编语言直接控制硬件系统进行工作。汇编语言是很多相关课程(如数据结构、操作系统、微机原 理等)的重要基础。为了更好地引导、帮助读者学习汇编语言,作者以循序渐进的思想精心创作了这本书。本书具有如下特点:采用了全新的结构对课程的内容进行 组织,对知识进行最小化分割,为读者构造了循序渐进的学习线索;在深入本质的层面上对汇编语言进行讲解;对关键环节进行深入的剖析。本书可用作大学计算机专业本科生的汇编教材及希望深入学习计算机科学的读者的自学教材。 目录第1章 基础知识第2章 寄存器第3章 寄存器(内存访问)第4章 第一个程序第5章 [BX]和loop指令第6章 包含多个段的程序第7章 更灵活的定位内存地址的方法第8章 数据处理的两个基本问题第9章 转移指令的原理第10章 CALL和RET指令第11章 标志寄存器第12章 内中断第13章 int指令第14章 端口第15章 外中断第16章 直接定址表第17章 使用BIOS进行键盘输入和磁盘读写综合研究附注

《新版汇编语言程序设计》

基本信息 教材名称:新版汇编语言程序设计ISBN编号: 9787121026966出版时间: 2007-01-01出版社: 电子工业出版社 作者: 钱晓捷 主编装帧: 平装字数: 563200 内容简介 本 书以Intel 80x86指令系统和MASM 6.x为主体,全面而系统地介绍16/32位整数、浮点、多媒体指令的汇编语言程序设计方法。全书可分为基础和提高两部分。前5章作为基础部分,以当前 “汇编语言程序设计”课程的教学为目标,为读者讲解16位基本整数指令及其汇编语言程序设计的知识。基础部分的主要内容是:汇编语言程序设计的基础知 识,8086指令详解,MASM伪指令和操作符,程序格式,程序结构及其设计方法。后4章为提高部分,从不同的方面介绍汇编语言程序设计的深入内容和实际 应用知识。提高部分各章的内容相对独立,主要有:32位80x86 CPU的整数指令系统及其编程,汇编语言与C/C++的混合编程,80x87 FPU的浮点指令系统及其编程,多媒体扩展指令系统及其编程,64位指令简介。本书可作为高等院校《汇编语言程序设计》课程的教材或参考书,主要读者为计 算机及相关学科的本科和高职、高专学生。本书内容广博、语言浅显、结构清晰、实例丰富,也适合于电子、自动控制等专业的高校学生和成教学生,计算机应用开 发人员,深入学习微机应用技术的普通读者等。 目录第1章汇编语言基础知识第2章 8086的指令系统第3章汇编语言程序格式第4章基本汇编语言程序设计第5章高级汇编语言程序设计第6章 32位指令及其编程第7章汇编语言与C/C++的混合编程第8章 80x87浮点指令及其编程第9章多媒体指令及其编程第10章 64位指令简介附录A 调试程序CodeView附录B 汇编程序MASM的伪指令和操作符附录C 80x86整数指令系统附录D 输入输出子程序库IO.LIB参考文献

《汇编语言程序设计》

基本信息 产品名称:汇编语言程序设计ISBN编号:9787111272601出版时间:2009-10-1出版社: 机械工业出版社页数: 340版次印次: 1作者: 何超主编开本: 16开装帧: 平装印数: 1字数: 544000 内容简介 本书共8章,主要讨论汇编语言的编程基础、程序开发过程和调试方法。本书的主要特点是通俗易懂,遵循由浅入深、由简到繁、循序渐进的原则。力争改变汇编语言难学难教的状况。与本书配套的《 汇编语言程序设计实验与习题解答》一书另行出版,该书包含详尽的汇编语言程序设计实验和本书所有习题的解答。本书既可作为高等院校信息类(如计算机、自动控制、电工电子等)专业的本科教材,也可作为 工程技术人员的参考书。 目录出版说明前言第1章 汇编语言的基本概念第2章 汇编语言程序中的指令与伪指令第3章 汇编语言程序设计初步第4章 子程序设计第5章 汇编语言程序的应用示例第6章 输入输出和中断处理第7章 宏和多模块程序设计第8章 汇编语言程序开发与调试附录参考文献

编辑本段编译环境

汇编的调试环境总的来说比较少,也很少有非常好的 编译器。reallychenchi设计的 轻松汇编是一款非常适合初学者的汇编编译器。轻松汇编是一个汇编语言 集成开发环境,主要面向汇编语言初学者,也可以用它进行开发。除了普通的编辑功能以外,它还可以自动整理格式、高亮显示和编译、链接、调试 汇编程序,非常方便实用。轻松汇编的最大特点是可以格式整理,就像VC6.0一样,可以设置断点调试,省却了使用者的不少工作。它可以在Win98/2k/XP下运行,是一款很优秀的软件。

编辑本段常用命令

MOV指令为双操作数指令,两个操作数中不能全为内存操作数执行操作: dst = src1.目的数可以是通用寄存器, 存储单元和段寄存器(但不允许用CS段寄存器).2.立即数不能直接送段寄存器3.不允许在两个存储单元直接传送数据4.不允许在两个段寄存器间直接传送信息 PUSH入栈指令及 POP出栈指令: 堆栈操作是以“后进先出”的方式进行数据操作。PUSH SRC //Word入栈的操作数除不允许用立即数外,可以为通用寄存器,段寄存器(全部)和存储器。入栈时高位字节先入栈,低位字节后入栈。POP DST //Word出栈操作数除不允许用立即数和CS段寄存器外,可以为通用寄存器,段寄存器和存储器。执行POP SS指令后,堆栈区在存储区的位置要改变。执行POP SP 指令后,栈顶的位置要改变。 XCHG(eXCHanG)交换指令: 将两操作数值交换。XCHG OPR1,OPR2 //Byte/Word执行操作: Tmp=OPR1 OPR1=OPR2 OPR2=Tmp1.必须有一个操作数是在寄存器中2.不能与段寄存器交换数据3.存储器与存储器之间不能交换数据。 XLAT(TRANSLATE)换码指令: 把一种代码转换为另一种代码。XLAT (OPR 可选) //Byte执行操作: AL=(BX+AL)指令执行时只使用预先已存入BX中的表格首地址,执行后,AL中内容则是所要转换的代码。 LEA(Load Effective Address) 有效地址传送寄存器指令LEA REG,SRC //指令把源操作数SRC的有效地址送到指定的寄存器中。执行操作: REG = EAsrc注: SRC只能是各种寻址方式的存储器操作数,REG只能是16位寄存器MOV BX,OFFSET OPER_ONE 等价于 LEA BX,OPER_ONEMOV SP,[BX] //将BX间接寻址的相继的二个存储单元的内容送入SP中LEA SP,[BX] //将BX的内容作为存储器有效地址送入SP中 LDS(Load DS with pointer) 指针送寄存器和DS指令LDS REG,SRC //常指定SI寄存器。执行操作: REG=(SRC),DS=(SRC+2) //将SRC指出的前二个存储单元的内容送入指令中指定的寄存器中,后二个存储单元送入DS段寄存器中。 LES(Load ES with pointer) 指针送寄存器和ES指令LES REG,SRC //常指定DI寄存器执行操作: REG=(SRC),ES=(SRC+2) //与LDS大致相同,不同之处是将ES代替DS而已。 LAHF ( Load AH with Flags ) 标志位送AH指令LAHF //将PSW寄存器中的低8位的状态标志(条件码)送入AH的相应位,SF送D7位,ZF送D6位......执行操作: AH=PSW的低位字节。 SAHF( Store AH into Flags ) AH送标志寄存器指令SAHF //将AH寄存器的相应位送到PSW寄存器的低8位的相应位,AH的D7位送SF,D6位送ZF......执行操作: PSW的低位字节=AH。 PUSHF( PUSH the Flags) 标志进栈指令PUSHF //将标志寄存器的值压入堆栈顶部,同时栈指针SP值减2执行操作: SP=SP-1,(SP)=PSW的高8位,SP=SP-1,(SP)=PSW的低8位 POPF( POP the Flags ) 标志出栈指令POPF //与PUSHF相反,从堆栈的顶部弹出两个字节送到PSW寄存器中,同时堆栈指针值加2执行操作: PSW低8位=(SP),SP=SP+1,PSW高8位=(SP),SP=SP+1输入输出指令( IN,OUT):只限于使用累加器AX或AL与外部设备的端口传送信息.IN (INput)输入指令:信息从I/O通过累加器传送到CPUIN AL,PORT //直接的字节输入,PORT是外设端口编号(即端口地址),只能取 00H ~ 0FFH共256个端口地址。IN AX,PORT //直接的字输入,AX存储连续两个端口地址PORT+1,PORTIN AL,DX //间接的字节输入,端口地址范围可通过DX设置为0000H ~ 0FFFFH共65536个端口地址IN AX,DX //间接的字输入OUT( OUTput)输出指令 :信息从CPU通过累加器传送到I/OOUT PORT,AL //直接的字节输出,PORT规定与IN指令相同。OUT PORT,AXOUT DX,AL //间接的字节输出OUT DX,AXMOV AL,05H OUT 27H,AL //将字节05H传送到地址27H的端口 ADD(ADD)加法指令ADD DST,SRC //Byte/Word执行操作: dst=dst+src1.两个存储器操作数不能通过ADD指令直接相加,即DST 和SRC必须有一个是通用寄存器操作数。2.段寄存器不能作为SRC 和DST.3.影响标志位Auxiliary Crray Flag,Carry Flag,Overflow Flag,Parity Flag,Sign Flag 和Zero Flag,如下所示:CF 根据最高有效位是否有进(借)位设置的:有进(借)位时CF=1,无进(借)位时CF=0.OF 根据操作数的符号及其变化来设置的:若两个操作数的符号相同,而结果的符号与之相反时OF=1,否则为0.ZF 根据结果来设置:不等于0时ZF=0,等于0时ZF=1SF 根据结果的最高位来设置:最高位为0,则SF=0.AF 根据相加时D3是否向D4进(借)位来设置:有进(借)位时AF=1,无进(借)位时AF=0PF 根据结果的1的个数时否为奇数来设置:1的个数为奇数时PF=0,为偶数时PF=1 ADC( ADd with Carry)带进位加法指令ADC DST,SRC //Byte/Word执行操作: dst=dst+src+CF //与ADD不同之处是还要加上进位标志位的值。 INC( INCrement) 加1指令INC OPR //Byte/Word执行操作: OPR=OPR+11.OPR可以是寄存器和存储器操作数,但不能是立即数和段寄存器2.影响标志位OF,SF,ZF,PF 和AF,不影响CF. SUB( SUBtract ) 不带借位的减法指令SUB DST,SRC //Byte/Word执行操作:dst=dst - src1.DST和SRC寻址方式及规定与ADD相同。2.影响全部标志位。(判断标志位参见ADD) SBB ( SuBtract with Borrow) 带借位减法指令SBB DST,SRC //Byte/Word执行操作:dst= dst - src - CF DEC( DECrement ) 减1指令DEC OPR //Byte/Word执行操作:OPR = OPR - 1 //除CF标志位,其余标志位都受影响。 NEG( NEGate ) 求补指令NEG OPR执行操作:opr = 0- opr //将操作数按位求反后末位加1. CMP ( CoMPare ) 比较指令CMP OPR1,OPR2执行操作:OPR1 - OPR2 //与SUB指令一样执行运算,但不保存结果。比较情况 无符号数 有符号数A=B ZF=1 ZF=1A>B CF=0 && ZF=0 SF^OF=0 && ZF=0A<B CF=1 && ZF=0 SF^OF=1 && ZF=0A>=B CF=0 || ZF=1 SF^OF=0 || ZF=1A<=B CF=1 || ZF=1 SF^OF=1 || ZF=1 MUL( unsigned MULtiple ) 无符号数乘法指令MUL SRC //Byte/Word .执行操作:Byte => AX= AL *src //字节运算时目的操作数用AL,乘积放在AX中Word => DX=AX *src //字运算时目的操作数用AX,DX存放乘积的高位字,AX放乘积的低位字1.目的数必须是累加器 AX 或AL,指令中不需写出2. 源操作数SRC可以是通用寄存器和各种寻址方式的存储器操作数,而绝对不允许是立即数或段寄存器。 IMUL(sIgned MULtiple) 有符号数乘法指令IMUL SRC //与MUL指令相同,但必须是带符号数 DIV ( unsigned DIVide) 无符号数除法指令DIV SRC //Byte/Word 其中: SRC的规定同乘法指令MUL执行操作:Byte => AX / src //字节运算时目的操作数在AX中,结果的商在AL中,余数在AH中Word=> DX,AX /src //字运算时目的操作数在DX高位字和AX低位字中,结果的商在AX中,余数在DX中存储器操作数必须指明数据类型:BYTE PTR src 或 WORD PTR src IDIV (sIgned DIVied) 有符号数除法指令IDIV SRC //Byte/Word 与DIV指令相同,但必须是带符号数 CBW(Convert Byte to Word) 字节转换为字指令CBW执行操作: AL中的符号位(D7)扩展到8位AH中,若AL中的D7=0,则AH=00H,若AL中的D7=1,则AH=FFH. CWD(Convert Word to Double word) 字转换为双字指令CWD执行操作: AX中的符号位(D15)扩展到16位DX中,若AX中的D15=0,则DX=0000H,若AX中的D15=1,则DX=FFFFH十进制调整指令当计算机进行计算时,必须先把十进制数转换为 二进制数,再进行二进制数运算,最后将结果又转换为十进制数输出。在计算机中,可用4位二进制数表示一位十进制数,这种代码称为BCD ( Binary Coded Decimal ).BCD码又称8421码,在PC机中,BCD码可用压缩的BCD码和非压缩的BCD码两种格式表示。压缩的BCD码用4位二进制数表示一个十制数,整个十进数形式为一个顺序的以4位为一组的数串。非压缩的BCD码以8位为一组表示一个十进制数,8位中的低4位表示8421的BCD码,而高4位则没有意义。压缩的BCD码调整指令 DAA(Decimal Adjust for Addition) 加法的十进制调整指令DAA执行操作:执行之前必须先执行ADD或ADC指令,加法指令必须把两个压缩的BCD码相加,并把结果存话在AL寄存器中。 DAS(Decimal Adjust for Subtraction) 减法的十进制调整指令DAS执行操作:执行之前必须先执行SUB或SBB指令,减法指令必须把两个压缩的BCD码相减,并氢结果存放在AL寄存器中。非压缩的BCD码调整指令 AAA(ASCII Adjust for Addition) 加法的ASCII调整指令AAA执行操作:执行之前必须先执行ADD或ADC指令,加法指令必须把两个非压缩的BCD码相加,并把结果存话在AL寄存器中。 AAS(ASCII Adjust for Subtraction) 减法的ASCII调整指令AAS执行操作:执行之前必须先执行SUB或SBB指令,减法指令必须把两个非压缩的BCD码相减,并氢结果存放在AL寄存器中。 MOVS( MOVe String) 串传送指令MOVB //字节串传送 DF=0,SI = SI + 1,DI = DI + 1 ;DF = 1,SI = SI - 1,DI = DI - 1MOVW //字串传送 DF=0,SI = SI + 2,DI = DI + 2 ;DF = 1,SI = SI - 2,DI = DI - 2执行操作:[DI] = [SI],将位于DS段的由SI所指出的存储单元的字节或字传送到位于ES段的由DI 所指出的存储单元,再修改SI和DI,从而指向下一个元素。在执行该指令之前,必须预置SI和DI的初值,用STD或CLD设置DF值。MOVS DST,SRC //同上,不常用,DST和SRC只是用来用类型检查,并不允许使用其它寻址方式来确定操作数。1.目的串必须在附加段中,即必须是ES:[DI]2.源串允许使用段跨越前缀来修饰,但偏移地址必须是[SI]. STOS(STOre into String) 存入串指令STOS DSTSTOSB //存放字节串 ( DI ) = ALSTOSW //存放字串 ( DI ) = AX执行品作:把AL或AX中的内容存放由DI指定的附加段的字节或字单元中,并根据DF值修改及数据类型修改DI的内容。1.在执行该指令之前,必须把要存入的数据预先存入AX或AL中,必须预置DI的初值。2.DI所指向的存储单元只能在附加段中,即必须是ES:[DI] LODS ( LOaD from String ) 从串取指令LODS SRCLODSB //从字节串取 AL=(SI)LODSW //从字串取 AX= (SI±1) (SI)执行操作:把由SI指定的数据段中字节或字单元的内容送入AL或AX中,并根据DF值及数据类型修改SI的内容。1.在执行该指令之前,要取的数据必须在存储器中预先定义(用DB或DW),必须预置SI的初值。2.源串允许使用段超越前缀来改变数据存储的段区。 REP(REPeat)重复操作前缀REP String Primitive //其中:String Primitive可为MOVS,STOS或LODS指令执行操作:使REP前缀后的串指令重复执行,每执行一次CX=CX-1,直至CX=0时退出REP.方向标志设置 CLD(CLear Direction flag) 清除方向标志指令CLD执行操作:令DF=0,其后[SI],[DI]执行增量操作 STD(SeT Direction flag) 设置方向标志指令STD执行操作:令DF=1,其后[SI],[DI]执行减量操作 CMPS(CoMPare String) 串比较指令CMPS SRC,DSTCMPSB //字节串比较 (SI)-(DI)CMPSW //字串比较 (SI+1)(SI) - (DI+1)(DI)执行操作:把由SI指向的数据段中的一个字节或字与由DI指向的附加段中的一个字节或字相减,不保留结果,只根据结果置标志位。 SCAS (SCAn String ) 串扫描指令SCAS DSTSCASBSCASW执行操作:把AX或AL的内容与由DI指向的在附加段中的一个字节或字相减,不保留结果,根据结果置标志位。 AND,OR,XORTEST都是双字节操作指令,操作数的寻址方式的规定与算术运算指令相同。 NOT是单字节操作指令,不允许使用立即数。逻辑运算均是按位进行操作,真值表如下:AND (位与&) OR ( 位或| ) XOR ( 位异或^ )1.& 1 = 1 1 | 1 = 1 1 ^ 1 = 01.& 0 = 0 1 | 0 = 1 1 ^ 0 = 10 & 1 = 0 0 | 1 = 1 0 ^ 1 = 10 & 0 = 0 0 | 0 = 0 0 ^ 0 = 0A:逻辑运算指令 AND(and) 逻辑与指令AND DST,SRC //Byte/Word执行操作:dst = dst & src1.AND指令执行后,将使CF=0,OF=0,AF位无定义,指令执行结果影响SF,ZF和PF标志位。2.AND指令典型用法A:用于屏蔽某些位,即使某些位为0.屏蔽AL的高4位:即将高4位和0000B相与,低4位和1111B相与MOV AL,39H //AL= 0011 1001B[39H]ADD AL,0FH // AL= 0000 1001B[09H] 即0011 1001B[39H] & 0000 1111B[0FH] = 0000 1001B[09H]3.AND指令典型用法B:取出某一位的值(见TEST) OR(or) 逻辑或指令OR DST,SRC //Byte/Word执行操作:dst = dst | src1.OR指令执行后,将使CF=0,OF=0,AF位无定义,指令执行结果影响SF,ZF和PF标志位。2.常用于将某些位置1.将AL的第5位置1:MOV AL,4AH // AL=0100 1010B[4AH]OR AL,10H // AL=0101 1010B[5AH] 即0100 1010B[4AH] | 0001 0000B[10H] =0101 1010B [5AH] XOR(eXclusive OR) 逻辑异或指令XOR DST,SRC //Byte/Word执行操作:dst = dst ^ src1.XOR指令常用于使某个操作数清零,同时使CF=0,清除进位标志。2.XOR指令使某些位维持不变则与 '0' 相异或,若要使某些位取反则与 '1'相异或。将AL的高4位维持不变,低4位取反:MOV AL,B8H //AL=1011 1000B[B8H]XOR AL,0FH //AL=1011 0111B[B7H] 即1011 1000B[B8H] ^ 0000 1111[0FH]=1011 0111B[B7H]测试某一个操作数是否与另一确定操作数相等:XOR AX,042EHJZ .... //如果AX==042EH,则ZF=TRUE(1),执行JZ... NOT (not) 逻辑非指令NOT OPR //Byte/Word执行操作:opr = ~opr // ~ 01100101 [65H] =10011010 [9AH]1.操作数不能使用立即数或段寄存器操作数,可使用通用寄存器和各种方式寻址的存储器操作数。2.NOT指令不影响任何标志位。将AL各位取反:MOV AL,65H //AL=0110 0101B[65H]NOT AL //AL=1001 1010B[9AH] 即 ~ 0110 0101B[65H]=1001 1010B[9AH] TEST(test) 指令TEST OPR1,OPR2 //Byte/Word执行操作:opr1 & opr21.两个操作数相与的结果不保存,结果影响标志位PF,SF和ZF,使CF=0,OF=0,而AF位无定义。2.TEST指令常用于在不改变原有的操作数的情况下,检测某一位或某几位的条件是否满足。只要令用来测试的操作数对应检测位为1,其余位为0,相与后判断零标志ZF值的真假。检测某位是否为1:令用来测试的操作数对应检测位为1,其余位为0,TEST指令后,若该位为1则 JNZ...TEST AL,0000 00001B //测试AL最低位是否为1:: 令用来测试的操作数对应检测位为1,其余位为0,执行TEST指令JNZ THER //最低位若为1,则ZF=FALSE(0),执行JNZ THER,否则执行下一条指令。或者:先对操作数求反,令用来测试的操作数对应检测位为1,其余位为0,TEST指令后,若该位为1则JZ...MOV DL,AL //将AL 传送到DL,主要是不要影响AL的值。 以下测试AL的b2位是否为1NOT DL //先对操作数求反TEST 0000 0100B //令用来测试的操作数对应检测位为1,其余位为0,执行TEST指令JZ THER //若AL的b2位为1,则ZF=TRUE(1),执行JZ THERB:移位指令[所有的移位指令都影响标志位 CF、OF、PF、SFZF、AF无定义。]非循环逻辑移位:把操作数看成无符数来进行移位。 SHL( SHift logical Left )逻辑左移指令SHL OPR,CNT //Byte/Word执行操作:使OPR左移CNT位,并使最低CNT位为全0.1.OPR操作数不能使用立即数或段寄存器操作数,可使用通用寄存器和各种方式寻址的存储器操作数。2.移位次数由CNT决定。每次将OPR的最高位移出并移到CF,最低位补0.MOV CL,7 //若移位多次,先预置移位次数CLSHL DX,CL //CNT可取1或CL寄存器操作数 SHR(SHift logical Right) 逻辑右移指令SHR OPR,CNT //Byte/Word同SHL,每次将OPR的最低位D0移出并移到CF.最高位补0.非循环算术移位:将操作数看成有符号数来进行移位。 SAL(Shift Arithmetic Left) 算术左移指令SAL OPR,CNT //Byte/WordSAL指令与SHL指令完全相同 SAR(Shift Arithmetic Right) 算术右移指令SAR OPR,CNT //Byte/WordSAR指令每次移位时,将最高位移入次高位的同时最高位值不变,最低位D0移出并移到CF.循环移位指令 ROL( ROtate Left) 循环左移指令ROL OPR,CNT //Byte/Word每次移位时,最高位移出并同时移到CF和最低位D0. ROR (ROtate Right)循环右移指令ROR OPR,CNT //Byte/Word每次移位时,最低位D0移出并同时移到CF和最高位。带进位循环移位指令 RCL(Rotate Left through Carry)带进位循环左移指令RCL OPR,CNT //Byte/Word RCR (Rotate Right through Carry)带进位循环右移指令RCR OPR,CNT //Byte/Word处理器控制指令 CLC(CLear Carry) 进位位置0指令CLC //执行操作后,CF=0 CMC(CoMplement Carry) 进位位求反指令CMC //执行操作后,CF=!CF STC (SeT Carry) 进位位置1指令STC //执行操作后,CF=1 NOP(No Operetion) 无操作指令NOP //此指令不执行任何操作,其机器码占一个字节单元 HLT (HaLT) 停机指令HLT执行操作后,使机器暂停工作,使处理器CPU处于停机状态,以等待一次外部中断到来,中断结束后,程序继续执行,CPU继续工作。 JMP ( JuMP ) 无条件转移指令名称 格式 执行操作段内直接短跳转 JMP SHORT OPR IP=IP+8 位偏移量段内直接近转移 JMP NEAR PTR OPR IP=IP+16位偏移量段内间接转移 JMP WORD PTR OPR IP=(EA)段间直接转移 JMP FAR PTR OPR IP=OPR 偏移地址,CS=OPR 段地址段间间接转移 JMP DWORD PTR OPR IP=(EA),CS=(EA+2)1.无条件转移到指定的地址去执行从该地址开始的指令。2.段内转移是指在同一代码段的范围内进行转移,只需改变IP寄存器内容。3.段间转移则要转移到另一个代码段执行程序,此时要改变IP寄存器和CS段寄存器的内容。条件转移指令:根据上一条指令所设置的条件码(标志位)来判断测试条件。根据五个标志位:ZF、SF、OF、 PF、 CF的两种状态(0 FALSE或1 TRUE)产生10种测试条件。Name Flag Flag == TRUE [1] Flag ==FALSE [ 0]Zero Falg ZF JE/JZOPR //结果为零转移 JNE/ JNZOPR //结果不为零转移Sign Falg SF JSOPR //结果为负转移 JNSOPR //结果为正转移Overflow Flag OF JOOPR //溢出转移 JNOOPR //不溢出转移Parity Flag PF JP/JPEOPR //结果为偶转移 JNP/JPOOPR //结果为奇转移Carry Flag CF JCOPR //有进位转移 JNCOPR //无进位转移两个数比较:情况 指令 满足条件 指令 满足条件A < B JCCF==1 JLSF^OF==1 && ZF==0A ≥ B JNCCF==0 JNLSF^OF==0 || ZF==1A ≤ B JNA CF==1 || ZF==1 JLGSF^OF==1 || ZF==1A > B JA CF==0 && ZF==0 JGSF^OF==0 && ZF==0测试CX转移指令 JCXZ OPR //CX==0时转移 LOOP(LOOP)循环指令LOOP OPR 测试条件:CX ≠ 0 //OPR在程序中实际是个标号LOOPZ OPR 测试条件:ZF == 1 && CX ≠ 0LOOPNZ OPR 测试条件:ZF == 0 && CX ≠ 0执行操作: 先执行CX=CX-1,再检测上面的测试条件,如满足则IP=IP+符号扩展的D8,不满足则退出循环。过程调用及返回指令 CALL(CALL) 过程调用指令CALL DST //DST在程序中实际是子程序标号执行操作:先将过程的返回地址(即CALL的下一条指令的首地址)存入堆栈,然后转移到过程入口地址执行子程序。调用方式 格式 断点保护入栈情况 过程入口地址段内直接 CALL NEAR PTR PR1 (SP-1)(SP-2)←IP,CS不进栈 CS值保持不变,IP←DST段内间接 CALL WORD PTR (EA) (SP-1)(SP-2)←IP,CS不进栈 CS值保持不变,IP←(EA)段间直接 CALL FAR PTR PR1 (SP-1)(SP-2)←CS,(SP-3)(SP-4)←IP IP←DST偏移地址,CS←DST段地址段间间接 CALL DWORD PTR (EA) (SP-1)(SP-2)←CS,(SP-3)(SP-4)←IP IP←(EA),CS←(EA+2)注:为了表明是段内调用,可使用NEAR PTR属性操作符作说明。 RET(RETurn)子程序返回指令RETRET EXP //带立即数返回子程序返回指令RET放在子程序末尾,它使子程序在执行完全部任务后返回主程序继续执行被打断后的程序。返回地址在子程序调用时入栈保存的断点地址-IP或IP和CS.

编辑本段汇编基础

汇编也可以是一个种类的集合,如英语语法汇编,XX科目汇编……等等`详细点的指令用法

数据传送指令

一、数据传送指令1.通用数据传送指令MOV(Move)传送PUSH(Push onto the stack)进栈POP(Pop from the stack)出栈XCHG(Exchange)交换.MOV指令格式为: MOV DST,SRC执行的操作:(DST)<-(SRC).PUSH进栈指令格式为:PUSH SRC执行的操作:(SP)<-(SP)-2((SP)+1,(SP))<-(SRC).POP出栈指令格式为:POP DST执行的操作:(DST)<-((SP+1),(SP))(SP)<-(SP)+2.XCHG 交换指令格式为:XCHG OPR1,OPR2执行的操作:(OPR1)<-->(OPR2)2.累加器专用传送指令IN(Input) 输入OUT(Output) 输出XLAT(Translate) 换码这组指令只限于使用累加器AX或AL传送信息。.IN 输入指令长格式为: IN AL,PORT(字节)IN AX,PORT(字)执行的操作: (AL)<-(PORT)(字节)(AX)<-(PORT+1,PORT)(字)短格式为: IN AL,DX(字节)IN AX,DX(字)执行的操作: AL<-((DX))(字节)AX<-((DX)+1,DX)(字).OUT 输出指令长格式为: OUT PORT,AL(字节)OUT PORT,AX(字)执行的操作: (PORT)<-(AL)(字节)(PORT+1,PORT)<-(AX)(字)短格式为: OUT DX,AL(字节)OUT DX,AX(字)执行的操作: ((DX))<-(AL)(字节)((DX)+1,(DX))<-AX(字)在 IBM-PC机里,外部设备最多可有65536个I/O端口,端口(即外设的端口地址)为0000~FFFFH.其中前256个端口(0~FFH)可以直 接在指令中指定,这就是长格式中的PORT,此时机器指令用二个字节表示,第二个字节就是端口号。所以用长格式时可以在指定中直接指定端口号,但只限于前 256个端口。当端口号>=256时,只能使用短格式,此时,必须先把端口号放到DX寄存器中(端口号可以从0000到0FFFFH),然后再用 IN或OUT指令来 传送信息。.XLAT 换码指令格式为: XLAT OPR或: XLAT执行的操作:(AL)<-((BX)+(AL))3.有效地址送寄存器指令LEA(Load effective address)有效地址送寄存器LDS(Load DS with Pointer)指针送寄存器和DSLES(Load ES with Pointer)指针送寄存器和ES.LEA 有效地址送寄存器格式为: LEA REG,SRC执行的操作:(REG)<-SRC指令把源操作数的有效地址送到指定的寄存器中。.LDS 指针送寄存器和DS指令格式为: LDS REG,SRC执行的操作:(REG)<-(SRC)(DS)<-(SRC+2)把源操作数指定的4个相继字节送到由指令指定的寄存器及DS寄存器中。该指令常指定SI寄存器。.LES 指针送寄存器和ES指令格式为: LES REG,SRC执行的操作: (REG)<-(SRC)(ES)<-(SRC+2)把源操作数指定的4个相继字节送到由指令指定的寄存器及ES寄存器中。该指令常指定DI寄存器。4.标志寄存器传送指令LAHF(Load AH with flags)标志送AHSAHF(store AH into flags)AH送标志寄存器PUSHF(push the flags) 标志进栈POPF(pop the flags) 标志出栈.LAHF 标志送AH格式为: LAHF执行的操作:(AH)<-(PWS的低字节).SAHF AH送标志寄存器格式为: SAHF执行的操作:(PWS的低字节)<-(AH).PUSHF 标志进栈格式为: PUSHF执行的操作:(SP)<-(SP)-2((SP)+1,(SP))<-(PSW).POPF 标志出栈格式为: POPF执行的操作:(PWS)<-((SP)+1,(SP))(SP)<-(SP+2)

算术指令

二、算术指令1.加法指令ADD(add)加法ADC(add with carry)带进位加法INC(increment)加1.ADD 加法指令格式: ADD DST,SRC执行的操作:(DST)<-(SRC)+(DST).ADC 带进位加法指令格式: ADC DST,SRC执行的操作:(DST)<-(SRC)+(DST)+CF.ADD 加1指令格式: INC OPR执行的操作:(OPR)<-(OPR)+12.减法指令SUB(subtract)减法SBB(subtract with borrow)带借位减法DEC(Decrement)减1NEG(Negate)求补CMP(Compare)比较.SUB 减法指令格式: SUB DST,SRC执行的操作:(DST)<-(DST)-(SRC).SBB 带借位减法指令格式: SBB DST,SRC执行的操作:(DST)<-(DST)-(SRC)-CF.DEC 减1指令格式: DEC OPR执行的操作:(OPR)<-(OPR)-1.NEG 求补指令格式: NEG OPR执行的操作:(OPR)<- -(OPR).CMP 比较指令格式: CMP OPR1,OPR2执行的操作:(OPR1)-(OPR2)该指令与SUB指令一样执行减法操作,但不保存结果,只是根据结果设置条件标志 西半球。3.乘法指令MUL(Unsigned Multiple)无符号数乘法IMUL(Signed Multiple)带符号数乘法.MUL 无符号数乘法指令格式: MUL SRC执行的操作:字节操作数:(AX)<-(AL)*(SRC)字操作数:(DX,AX)<-(AX)*(SRC).IMUL 带符号数乘法指令格式: IMUL SRC执行的操作:与MUL相同,但必须是带符号数,而MUL是无符号数。4.除法指令DIV(Unsigned divide)无符号数除法IDIV(Signed divide)带符号数除法CBW(Convert byte to word)字节转换为字CWD(Contert word to double word)字转换为双字.DIV 无符号数除法指令格式: DIV SRC执行的操作:字节操作:(AL)<-(AX)/(SRC)的商(AH)<-(AX)/(SRC)的余数字操作: (AX)<-(DX,AX)/(SRC)的商(DX)<-(DX,AX)/(SRC)的余数.IDIV 带符号数除法指令格式: DIV SRC执行的操作:与DIV相同,但操作数必须是带符号数,商和余数也均为带符号数,且余数的符号与被除数的符号相同。.CBW 字节转换为字指令格式: CBW执行的操作:AL的内容符号扩展到AH.即如果(AL)的最高有效位为0,则(AH)=00;如(AL)的最高有效位为1,则(AH)=0FFH.CWD 字转换为双字指令格式: CWD执行的操作:AX的内容符号扩展到DX.即如(AX)的最高有效位为0,则(DX)=0;否则(DX)=0FFFFH.这两条指令都不影响条件码。

逻辑指令

三、逻辑指令1.逻辑运算指令AND(and) 逻辑与OR(or) 逻辑或NOT(not) 逻辑非XOR(exclusive or)异或TEST(test) 测试.AND 逻辑与指令格式: AND DST,SRC执行的操作:(DST)<-(DST)^(SRC).OR 逻辑或指令格式: OR DST,SRC执行的操作:(DST)<-(DST)V(SRC).NOT 逻辑非指令格式: NOT OPR执行的操作:(OPR)<-(OPR).XOR 异或指令格式: XOR DST,SRC执行的操作:(DST)<-(DST)V(SRC).TEST 测试指令格式: TEST OPR1,OPR2执行的操作:(DST)^(SRC)两个操作数相与的结果不保存,只根据其特征置条件码2.移位指令SHL(shift logical left) 逻辑左移SAL(shift arithmetic left) 算术左移SHR(shift logical right) 逻辑右移SAR(shift arithmetic right) 算术右移ROL(Rotate left) 循环左移ROR(Rotate right) 循环右移RCL(Rotate left through carry) 带进位循环左移RCR(Rotate right through carry) 带进位循环右移格式: SHL OPR,CNT(其余的类似)其中OPR可以是除立即数以外的任何寻址方式。移位次数由CNT决定,CNT可以是1或CL.循环移位指令可以改变操作数中所有位的位置;移位指令则常常用来做乘以2除以2操作。其中算术移位指令适用于带符号数运算,SAL用来乘2,SAR用来除以2;而逻辑移位指令则用来无符号数运算,SHL用来乘2,SHR用来除以2.

串处理指令

四、串处理指令1.与REP相配合工作的MOVS,STOS和LODS指令.REP重复串操作直到(CX)=0为上格式: REP string primitive其中String Primitive可为MOVS,LODS或STOS指令执行的操作:1)如(CX)=0则退出REP,否则往下执行。2)(CX)<-(CX)-13)执行其中的串操作4)重复1)~3).MOVS 串传送指令格式:可有三种MOVS DST,SRCMOVSB(字节)MOVSW(字)其中第二、三种格式明确地注明是传送字节或字,第一种格式则应在操作数中表明是字还是字节操作,例如:MOVS ES:BYTE PTR[DI],DS:[SI]执行的操作:1)((DI))<-((SI))2)字节操作:(SI)<-(SI)+(或-)1,(DI)<-(DI)+(或-)1当方向标志DF=0时用+,当方向标志DF=1时用-3)字操作:(SI)<-(SI)+(或-)2,(DI)<-(DI)+(或-)2当方向标志DF=0时用+,当方向标志DF=1时用-该指令不影响条件码。.CLD(Clear direction flag)该指令使DF=0,在执行串操作指令时可使地址自动增量;.STD(Set direction flag)该指令使DF=1,在执行串操作指令时可使地址自动减量。.STOS 存入串指令格式: STOS DSTSTOSB(字节)STOSW(字)执行的操作:字节操作:((DI))<-(AL),(DI)<-(DI)+-1字操作: ((DI))<-(AX),(DI)<-(DI)+-2该指令把AL或AX的内容存入由(DI)指定的附加段的某单元中,并根据DF的值及数据类型修改DI的内容,当它与REP联用时,可把AL或AX的内容存入一个长度为(CX)的 缓冲区中。.LODS 从串取指令格式: LODS SRCLODSBLODSW执行的操作:字节操作:(AL)<-((SI)),(SI)<-(SI)+-1字操作: (AX)<-((SI)),(SI)<-(SI)+-2该指令把由(SI)指定的数据段中某单元的内容送到AL或AX中,并根据方向标志及数据类型修改SI的内容。指令允许使用段跨越前缀来指定非数据段的存储区。该指令也不影响条件码。一般说来,该指令不和REP联用。有时缓冲区中的一串字符需要逐次取出来测试时,可使用本指令。2.与REPE/REPZ和REPNZ/REPNE联合工作的CMPS和SCAS指令.REPE/REPZ 当相等/为零时重复串操作格式: REPE(或REPZ) String Primitive其中String Primitive可为CMPS或SCAS指令。执行的操作:1)如(CX)=0或ZF=0(即某次比较的结果两个操作数不等)时退出,否则往下执行2)(CX)<-(CX)-13)执行其后的串指令4)重复1)~3).REPNE/REPNZ 当不相等/不为零时重复串操作格式: REPNE(或REPNZ) String Primitive其中String Primitive可为CMPS或SCAS指令执行的操作:除退出条件(CX=0)或ZF=1外,其他操作与REPE完全相同。.CMPS 串比较指令格式: CMP SRC,DSTCMPSBCMPSW执行的操作:1)((SI))-((DI))2)字节操作:(SI)<-(SI)+-1,(DI)<-(DI)+-1字操作: (SI)<-(SI)+-2,(DI)<-(DI)+-2指令把由(SI)指向的数据段中的一个字(或字节)与由(DI)指向的附加段中的一个字(或字节)相减,但不保存结果,只根据结果设置条件码,指令的其它特性和MOVS指令的规定相同。.SCAS 串扫描指令格式: SCAS DSTSCASBSCASW执行的操作:字节操作:(AL)-((DI)),(DI)<-(DI)+-1字操作: (AL)-((DI)),(DI)<-(DI)+-2该指令把AL(或AX)的内容与由(DI)指定的在附加段中的一个字节(或字)进行比较,并不保存结果,只根据结果置条件码。指令的其他特性和MOVS的规定相同。

控制转移指令

五、控制转移指令1.无条件转移指令.JMP(jmp) 跳转指令1)段内直接短转移格式:JMP SHORT OPR执行的操作:(IP)<-(IP)+8位位移量2)段内直接近转移格式:JMP NEAR PTR OPR执行的操作:(IP)<-(IP)+16位位移量3)段内间接转移格式:JMP WORD PTR OPR执行的操作:(IP)<-(EA)4)段间直接(远)转移格式:JMP FAR PTR OPR执行的操作:(IP)<-OPR的段内偏移地址(CS)<-OPR所在段的段地址5)段间间接转移格式:JMP DWORD PTR OPR执行的操作:(IP)<-(EA)(CS)<-(EA+2)2.条件转移指令1)根据单个条件标志的设置情况转移.JZ(或JE)(Jump if zero,or equal) 结果为零(或相等)则转移格式:JE(或JZ) OPR测试条件:ZF=1.JNZ(或JNE)(Jump if not zero,or not equal) 结果不为零(或不相等)则转移格式:JNZ(或JNE) OPR测试条件:ZF=0.JS(Jump if sign) 结果为负则转移格式: JS OPR测试条件:SF=1.JNS(Jump if not sign) 结果为正则转移格式:JNS OPR测试条件:SF=0.JO(Jump if overflow) 溢出则转移格式: JO OPR测试条件:OF=1.JNO(Jump if not overflow) 不溢出则转移格式: JNO OPR测试条件:OF=0.JP(或JPE)(Jump if parity,or parity even) 奇偶位为1则转移格式: JP OPR测试条件:PF=1.JNP(或JPO)(Jump if not parity,or parity odd) 奇偶位为0则转移格式: JNP(或JPO) OPR测试条件:PF=0.JB(或JNAE,JC)(Jump if below,or not above or equal,or carry) 低于,或者不高于或等于,或进位位为1则转移格式:JB(或JNAE,JC) OPR测试条件:CF=1.JNB(或JAE,JNC)(Jump if not below,or above or equal,or not carry) 不低于,或者高于或者等于,或进位位为0则转移格式:JNB(或JAE,JNC) OPR测试条件:CF=02)比较两个无符号数,并根据比较的结果转移.JB(或JNAE,JC)格式:同上.JNB(或JAE,JNC)格式:同上.JBE(或JNA)(Jump if below or equal,or not above) 低于或等于,或不高于则转移格式:JBE(或JNA) OPR测试条件:CFVZF=1.JNBE(或JA)(Jump if not below or equal,or above) 不低于或等于,或者高于则转移格式:JNBE(或JA) OPR测试条件:CFVZF=03)比较两个带符号数,并根据比较的结果转移.JL(或LNGE)(Jump if less,or not greater or equal) 小于,或者不大于或者等于则转移格式:JL(或JNGE) OPR测试条件:SFVOF=1.JNL(或JGE)(Jump if not less,or greater or equal)不小于,或者大于或者等于则转移格式:JNL(或JGE) OPR测试条件:SFVOF=0.JLE(或JNG)(Jump if less or equal,or not greater) 小于或等于,或者不大于则转移格式:JLE(或JNG) OPR测试条件:(SFVOF)VZF=1.JNLE(或JG)(Jump if not less or equal,or greater) 不小于或等于,或者大于则转移格式:JNLE(或JG) OPR测试条件:(SFVOF)VZF=04)测试CX的值为0则转移指令.JCXZ(Jump if CX register is zero) CX寄存器的内容为零则转移格式:JCXZ OPR测试条件:(CX)=0注:条件转移全为8位短跳!3.循环指令.LOOP 循环指令格式: LOOP OPR测试条件:(CX)<>0.LOOPZ/LOOPE 当为零或相等时循环指令格式: LOOPZ(或LOOPE) OPR测试条件:(CX)<>0且ZF=1.LOOPNZ/LOOPNE 当不为零或不相等时循环指令格式: LOOPNZ(或LOOPNE) OPR测试条件:(CX)<>0且ZF=0这三条指令的步骤是:1)(CX)<-(CX)-12)检查是否满足测试条件,如满足则(IP)<-(IP)+D8的符号扩充。4.子程序.CALL调用指令.RET返回指令5.中断.INT指令格式: INT TYPE或 INT执行的操作:(SP)<-(SP)-2((SP)+1,(SP))<-(PSW)(SP)<-(SP)-2((SP)+1,(SP))<-(CS)(SP)<-(SP)-2((SP)+1,(SP))<-(IP)(IP)<-(TYPE*4)(CS)<-(TYPE*4+2).INTO 若溢出则中断执行的操作:若OF=1则:(SP)<-(SP)-2((SP)+1,(SP))<-(PSW)(SP)<-(SP)-2((SP)+1,(SP))<-(CS)(SP)<-(SP)-2((SP)+1,(SP))<-(IP)(IP)<-(10H)(CS)<-(12H).IRET 从 中断返回指令格式: IRET执行的操作:(IP)<-((SP)+1,(SP))(SP)<-(SP)+2(CS)<-((SP)+1,(SP))(SP)<-(SP)+2(PSW)<-((SP)+1,(SP))(SP)<-(SP)+2

处理机控制指令

六、处理机控制指令1.标志处理指令.CLC进位位置0指令(Clear carry)CF<-0.CMC进位位求反指令(Complement carry)CF<-CF.STC进位位置1指令(Set carry)CF<-1.CLD方向标志置0指令(Clear direction)DF<-0.STD方向标志置1指令(Set direction)DF<-1.CLI中断标志置0指令(Clear interrupt)IF<-0.STI中断标志置1指令(Set interrupt)IF<-02.其他处理机控制指令NOP(No Opreation) 无操作HLT(Halt) 停机WAIT(Wait) 等待ESC(Escape) 换码LOCK(Lock) 封锁这些指令可以控制处理机状态。这们都不影响条件码。.NOP 无操作指令该指令不执行任何操作,其机器码占有一个字节,在调试程序时往往用这条指令占有一定的存储单元,以便在正式运行时用其他指令取代。.HLT停机指令该指令可使机器暂停工作,使处理机处于停机状态以便等待一次外部中断到来,中断结束后可继续执行下面的程序。.WAIT等待指令该指令使处理机处于空转状态,它也可以用来等待外部中断的发生,但中断结束后仍返回WAIT指令继续执行。.ESC换码指令格式ESC mem其 中mem指出一个存储单元,ESC指令把该存储单元的内容送到数据总线去。当然ESC指令不允许使用立即数和寄存器寻址方式。这条指令在使用协处理机 (Coprocessor)执行某些操作时,可从存储器指得指令或操作数。协处理机(如8087)则是为了提高速度而可以选配的硬件。.LOCK封锁指令该指令是一种前缀,它可与其他指令联合,用来维持总线的锁存信号直到与其联合的指令执行完为止。当CPU与其他处理机协同工作时,该指令可避免破坏有用信息。

你可能感兴趣的:(汇编)