ImageVerifierCode 换一换
格式:DOCX , 页数:17 ,大小:47.79KB ,
资源ID:25293153      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/25293153.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(微机原理总汇编指令集合.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

微机原理总汇编指令集合.docx

1、微机原理总汇编指令集合微机原理与接口技术常用编指令一.存放器用来存放存储单元的段地址或偏移地址、参与运算的数据、状态标志等相关指令8086 CPU 中有14个16位的存放器,这14个存放器按照功能分为四类:通用存放器、段存放器组、指令指针、标志位存放器FR。1.通用存放器8个数据存放器:AX(accumulator):存放器累加器它的由来来源于EAX存放器32位:EAX累加存放器EAX分为高16位和低16位。其中低16位又可单独访问,命名为AX,16位存放器AX又可单独访问,可分为高、低分别为AH、AL字节个8位。AX常用于运算;在乘法和除法中指定用来存放操作数,另外所有的I/O指令都使用这一

2、个存放器与外接设备传送数据。BX(base):基址存放器,存放器基址存放器它的由来来源于EBX存放器32位:EB X累加存放器EBX分为高16位和低16位。其中低16位又可单独访问,命名为BX,16位存放器BX又可单独访问,可分为高、低分别为BH、BL字节个8位。BX常用于地址索引,查表和间接寻址时存放基地址。CX(count):计数存放器,存放器计数存放器它的由来来源于ECX存放器32位:EC X累加存放器ECX分为高16位和低16位。其中低16位又可单独访问,命名为CX,16位存放器CX又可单独访问,可分为高、低分别为CH、CL字节个8位。常用于计数;常用于保存计算值,如在移位指令,循环(

3、loop)和串处理指令中用作隐含的计数器.DX(data):数据存放器,存放器数据存放器它的由来来源于EDX存放器32位:ED X累加存放器EDX分为高16位和低16位。其中低16位又可单独访问,命名为DX,16位存放器DX又可单独访问,可分为高、低分别为DH、DL字节个8位。常用于数据传递。指针和变址存放器这些存放器存放的是段内的偏移量,用来形成操作数的存储地址。SPStack Pointer:堆栈指针,与SS配合使用,可指向目前的堆栈位置,SP指向栈顶。BPBase Pointer:基址指针存放器,可用作SS的一个相对基址位置,BP指向栈的任何一单元。SISource Index:源变址存

4、放器可用来存放相对于DS段之源变址指针。DIDestination Index:目的变址存放器,可用来存放相对于 ES 段之目的变址指针,指令中SI对应DS , DI对应ES不能互换。2.指令指针IP(Instruction Pointer)1个16位的指令指针IP,用来存放下一条指令在CS代码段存放器中的偏移量。当发现中断或调用时BIU【Bus Interface Unit总线部件,功能是取指令、读操作数和送出结果】自动将IP的偏移量压入堆栈保存,并调整IP的内容。程序不能直接访问IP,但可以通过中断、转移等指令来修改IP的内容。(Segment Register)4个为了运用所有的内存空间

5、,8086设定了四个段存放器,专门用来保存段地址:CSCode Segment:代码段存放器;存放当前执行的指令在内存中的地址段。CS和IP决定了当前指令的逻辑地址。DSData Segment:数据段存放器;存放当前数据段的段地址。DS和SI决定了字符串操作时目的操作数的地址。SSStack Segment:堆栈段存放器;存放当前数据段的堆栈地址,SS与SP决定了当前堆栈的顶部,所谓堆栈是以“后进后出规如此保存信息的一种存储机构。8086CPU的堆栈段地址在SS存放器中,堆栈当前偏移地址在SP存放器中,SP的初值代表了堆栈区的大小。ESExtra Segment:附加段存放器。附加段是一个附

6、加的数据段。ES和DI决定了字符串操作时目的操作数的地址。4.标志位存放器FRFlag Regise8086CPU设置了一个16位的标志存放器FR,用来显示微机的运行结果或控制机制操作,规定了其中的9位,标志的设置,FR的九个标志按作用可分为两大类:一类叫状态标志,用来表示运算结果的特征,他们是:CF、PF、AF、ZF、SF、OF。另一类叫做控制标志,用来控制CPU的操作,它们是:IP、DF、TF。CF(carrier flag)进位标志位:运算中高四位中发生进位或错位时,CF=1;否如此CF=0;STC指令可置CF=1,CLR指令对CF求反;循环指令也会影响该标志位。DF(direction

7、 flag)方向标志位:控制串指令对字符串处理的方向。DF=0时,变址地址指针SI、DI作增量操作,即由低地址向高地址进展串操作,字节操作增量为1,字操作增量为2;DF=1时,作减量操作,即由高地址向低地址进展串操作。STD指令可置DF=1,CLD指令置DF=0。OF(overflow flag)溢出标志位:当运算结果超出机器的的表示X围时OF=1;否如此为0;存在以下几种情况可称之为溢出【即使OF=1】两个正数相加得到一个负数;l两个负数相加得到一个正数;两个一样符号的数相乘得到一个负数;两个异号的数相乘得到一个正数。PF(parity flag)奇偶校验位:当运算结果的低8位中1的个数为偶

8、数时,PF=1;否如此PF=0;AF(auxiliary flag)辅助进位标志:在运算结果的低4位向高4位有进位加法或有错位减法时,AF=1否如此AF=0.该标志一般在BCD码运算中作为是否进展十进制调整的判断。ZF(zero flag)零标志位:结果为0,ZF=1,否如此ZF=0. SF(sign flag) 符号标志位:在进展有符号运算数的算术运算,当运算结果为负时SF=1,否如此为0。IF(interrupt flag)中断允许标志位:控制可屏蔽中断的标志。当IF=1时,允许CPU响应屏蔽中断请求;当IF=0时,禁止响应。TF(trap flag)陷阱标志位:这是为程序调试而提供的CP

9、U单步工作方式。TF=1时,CPU每执行完 一个条指令就产生一个内部中断,以便对每一个指令的执行结果进展跟踪调查。二、数据传送指令1、数据传送指令通用数据传送指令MOVMove 数据传送。Mov指令形式【MOV OPRD1目的操作数 OPRD2源操作数】它允许在CPU的存放器之间、存储器和存放器之间传送字节和字数据,也可以将立即数传送到存放器或存储器中。功能即:将源操作数送入目的操作数中,源操作数保持不变。以下注意点:立即数、代码段存放器CS代码段存放器只能做源操作数;IP指令指针存放器不能作源操作数或目的操作数;MOV指令不能在两个存储单元之间直接传递数据,也不能在两个段存放器之间直接传送数

10、据;两个操作数的类型属性要一致。堆栈操作指令POPPop from the stack、PUSHPush onto the stack堆栈是以“先进后出方式工作的一个存储区,栈区的段地址由SS存放器的内容确定,而栈顶位置由堆栈指针SP存放器的内容来确定。堆栈操作指令包括入栈PUSH和出栈指令POP指令两类。这两条指令必须以字为操作,不能采用立即寻址方式。入栈操作:PUSH OPRD ; OPRD为源操作数。功能将源操作数压入堆栈。 源操作数可以是16位通用存放器、段存放器或存储器中的数据字。堆栈是以“先进后出|的原如此工作,栈区的段地址由SS存放器的内容确定。每一次执行PUSH的步骤为:首先修

11、改SP的值,SP=SP-2;低位字节地址在较低地址单位【SP】=OPRD低8位;高字节放在较高地址单位,【SP+1】=OPRD高八位。由于堆栈操作都是以字为单位进展的,所以SP总是指向偶地址单元。出栈操作:POP OPRD ; OPRD为目的操作数。将当前SP所指向的堆栈顶部的一个字送到指定目的操作数中。目的操作数可以是16位通用存放器、段地址存放器或存储单元,但CS不能做目的操作数。每执行一次POP指令后,SP=SP+2,即SP向高地址方向移动,指向栈顶。数据交换指令XCGHExchangeXCGH OPRD1【目的操作数】 OPRD2【源操作数】把一个字节或一个字的源操作数和目的操作数相互

12、交换。交换能在通用存放器与累加器之间、通用存放器与存储器之间进展。但段存放器和立即数不能作为一个操作数,也不能在累加器之间进展。字节交换指令XLAT(Translate)XLAT 转换表 ;换码。用查表方式将一种代码。XLAT指令有两种格式,第一种格式中的“转换表为表格的首地址,一般为符号表示,以提高程序的可读性,但它也可以省略,即用第二种格式。使用XLAT指令时,要求BX存放器指向该表的首地址,AL中为表中某一项与表格首地址之间的偏移量。指令执行时,会将BX和AL中的值相加,把得到的值作为地址,然后将此地址所得对应的存储器单元中的数值读送到AL中去。该指令是通过查表方式来完成翻译功能的。因此

13、,在执行该指令之前,必须在内存中建立好一X翻译表,该表的最大容量为256个字节。输入输出指令IN(input)/OUT(output)输入指令格式: IN AL,端口地址N ; IN AX,端口地址N+1N; IN AL,DX; IN AX,DX;说明:从I/O端口输入数据至AL/AX,允许一个字节由一个输入端口传送到AL中,或者把一个字由一个输入端口传送到AX中,假如端口地址超过25600FFH,如此需用DX存放器来保存该端口地址,这样用DX作端口地址时,最多可寻址64K0000FFFFH。输出指令格式: OUT AL,端口地址N ; OUT AX,端口地址N+1N; OUT DX , AL

14、; OUT DX, AX,说明:将AL或AX的内容输出至I/O端口。可将AL和AX中的内容传送到一个输出端口,端口寻址方式与IN指令一样。LEA(Load effective address) 有效地址送存放 ,格式:LEA OPRD1 , OPRD 2。把源操作数的偏移地址传送到目的操作数。LDS(Load DS with Pointer) 指针送存放器和DS。格式:LDS OPRD1,OPRD2。功能:完成一个地址指针的传送。地址指针包括偏移地址和段地址,它们已分别存放在由源操作数给出最低地址的四个连续存储单元中即存放了一个32位的双子数据,指令可将该数据的高16位段地址送入到DS,低16

15、位偏移地址送入目的操作数所指出的一个16位通用存放器或者是变址存放器。LES(Load ES with Pointer) 指针送存放器和ES。格式:LES OPRD1, OPRD2功能:这条指令除将地址指针的段地址送入ES外,与LDS类似。指令LAHF(Load AH with flags) 标志存放器8位送AH。将标识为位低8位的的数据传至AH存放器 SAHF(store AH into flags) AH送标志存放器8位。该条指令与LAHF指令的操作相反,可以将存放器AH的内容送至标志存放器的低8位。PUSHF(push the flags) 标志进栈。将标志存放器的内容压入堆栈顶部,同时

16、修改堆栈指针,但不影响标志位。POPF(pop the flags) 标志出栈。把当前堆栈顶部的一个字,传送到标志存放器,同时修改堆栈指针,影响标志位。二、算术指令ADDadd加法 格式:ADD OPRD1,OPRD2。功能:完成两个操作数相加,结果送至目的操作数OPRD1,源操作数OPRD2不变。目的操作数可以是通用存放器以与存储器,源操作数可以是通用存放器、存储器或立即数。这条指令对标志位CF、OF、PF、SF、ZF和AF有影响。注意:源操作数和目的操作数不能同时为存储器,而且它们的类型必须一致,即同为字或字节。ADC (add with carry) 带进位的加法指令。格式ADC OPR

17、D1,OPRD2.功能这条指令类似,只是在两个操作数相加时,要把进位标志位CF的现行值加上去,结果送至目的操作数OPRD1。ADC指令主要用于多字节运算中。这条指令对标志位的影响与ADD一样。INC (increment) 自增指令。格式:INC OPRD。功能:完成对指定的操作数OPRD加1,然后返回操作数。此指令主要用于在循环程序中修改地址指针和循环次数等。这条指令执行结果影响标志位AF、OF、PF、SF和ZF,对地址标志位CT没有影响。 SUB(subtract) 减法。格式:SUB OPRD1,OPRD2功能:完成两个操作数相减,从OPRD1中减去OPRD2,结果放在OPRD1中即目的

18、数中。 SBB(subtract with borrow) 带借位减法。格式:SBB OPRD1,OPRD2,指令功能,两个数相减时,发生借位现象,还要减去借位标志位CF的当前值,本指令对标志位AF、CF、OF、SF、PF、ZF都有影响。 DEC(Decrement) 减1。格式DEC OPRD。功能:对指令的操作数减去1,然后送回此操作数OPRD中。 CMP(pare) 比拟。比拟指令主要是比拟两个数的大小关系,在比拟指令之后,可根据CF、ZF、OF等标志位来判断两者大小关系, 只改变标志位,不改变目的操作数。MUL(Unsigned Multiple) 无符号数乘法。格式:MULL OPR

19、D ;OPRD为源操作数。A) 8位乘法,内容放在AXB) 16位乘法,内容放在DX高8位AX低8位IMUL(Signed Multiple) 带符号数乘法。格式:IMUL OPRD; OPRD为源操作数。 乘法不允许使用立即数,除非是带符号的立即数乘法。DIV(Unsigned divide) 无符号数除法IDIV(Signed divide) 带符号数除法,该指令认为最高位为符号位。在进展除法运算中,在字节运算时被除数在AX中,运算结果商在AL中,余数在AH中。字运算时被除数为DX;AX构成的32位数,运算结果商在AX中,余数在DX中。A) 8位商AL余数AHB) 16位商AX余数DXC)

20、 除以0,或者溢出均错误CBW(Convert byte to word) 字节转换为字有符号数格式:CBW,将AL中字节数的符号位扩展到AH的各个位,形成AX中的数据。CWD(Contert word to double word) 字转换为双字有符号数格式:CWD,将AX中字数据的符号位扩展到DX中的各个位,形成DX和AX中的双字数据。6.BCD调节指令【此处的BCD是指数字的表现形式采用的是BCD码即16进制】组合BCD数 格式:DAA或DAS 功能:组合数BCD数的加法/减调整指令,半字节1位BCD相加/减,超过9或有进位/有错位,要加6进展调整/减6进展调整。假如低半字节调整后有进位

21、,如此高半字节在做,加6进展调整。别离BCD 数 格式AAA :别离BCD数的加法调整指令,只取低半字节,其余同DAA指令。 格式 AAS 别离BCD数的减法调成指令,只取低半字节,其余同DAS指令。 格式AAM 别离BCD数的乘法调整指令,两个BCD数相乘,结果在AL中,除以10后的商在AH中,余数在AL中。 格式 AAD 别离BCD数的除法调整指令,先将两个BCD码转换为一个字节二进制数高位*10+低位得到被除数,放于AL中,AH清零,运算后,商送AL,余数送AH。7三、逻辑指令AND(and) 逻辑与,可用于清1OR(or) 逻辑或,可用于清0NOT(not) 逻辑非,按位取反即可XOR

22、(exclusive or) 异或NEG 取反指令,即用零减去操作数,再把结果送回操作数中。TEST 测试指令。格式:TEST OPRD1,OPRD2功能:完成AND指令一样的操作,结果只影响标志位,不改变目的操作数。通常使用它进展数据中某些位是1或是0的测试。符合测试要求如此转移。SHL(shift logical left) 逻辑左移。SAL(shift arithmetic left) 算术左移。格式:SHL/SAL OPRD1,移位次数。功是将OPRD1中的8位或16位移动假如干位如果没给出移位次数,如此默认向做移动一位;如果给出移动位次数,如此向做移动CL位最左边位即最高位或者最后移

23、出位至CF,最右边的1位即最低位或右边的CL位移入0。SHR(shift logical right) 逻辑右移SAR(shift arithmetic right) 算术右移。格式:SHR/SAR OPRD1,移位次数。功是将OPRD1中的8位或16位移动假如干位如果没给出移位次数,如此默认向右边移动一位;如果给出移动位次数,如此向右移动CL位最右边位即最低位或者最后移出位至CF,最左边的1位即最高位或右边的CL位移入0。算数移位和逻辑移位的最区别:逻辑移位用于无符号数 算术移位用于有符号数。逻辑右移将数字右移高位补0;算术右移将数字右移高位补原来最高位的数。逻辑和算术左移都是将数字左移低位

24、补0。ROL(Rotate left) 循环左移。ROR(Rotate right) 循环右移格式:ROL/ROR OPRD1功能:将OPRD1中的8位或16位二进制数向左/向右移动,移位次数。如果没给出移位次数,如此默认向做移动一位;如果给出移动位次数,如此向做移动CL位,从左边/右边移出位既移入CF又移入右边/左边的空出位,最后移出位移至最右边位即最低位/最左边位即最高位,同时保存在CF。RCL(Rotate left through carry) 带进位循环左移RCR(Rotate right through carry) 带进位循环右移。格式:RCR/RCL OPRD1,移位次数。将O

25、PRD1和进位CF中的9位或17位二级制数一同向右移/左移1位或CL位,最右/左边位即最低/高位或者最后移出位至CF,CF原内容移至OPRD1的最左边/最右边或者是中间。四、串处理指令指令虽然字符串指令只允许一次处理一个字节或一个字数据,但是你字符串操作指令前均可以加REF指令重复前缀,以实现对字符串中数据的重复处理。指令重复前缀包括无条件指令重复前缀PER、条件指令重复前缀REPE/REPZ与REPNE/REPNZ,它们必须置于字符串指令之前,其间用空格间隔,不能单独使用。使用指令重复前缀,还必须先将重复的次数送入CX。每执行一次字符串操作指令,CX自动减1,直到CX=0时终止重复。方向标志

26、位决定重复运算的方向:1使用CLD指令,设定DF=0;存放器SI、DI由低地址到高地址变化。 2使用STD指令,设定DF=1;存放器SI、DI由高到低地址变化。使用指令重复前缀的一般格式位:REP(Repeat) REPC(Repeat when carry flag)重复串操作直到(CX)=0为上。无条件的重复前缀指令。REP 将使得紧跟其后的字符串操作指令无条件地重复执行CX存放器中内容指定的次数,直到cx=0为止。它通常用在字符串传送指令MOVS、字符串存储指令STOS之前。假如CX的初值为0,如此字符串指令一次也不执行。REPNZ(Repeat when not zero flag)

27、EPNE(Repeat when not empty)REPNC(Repeat when not carry flag)字符串比拟指令CMPS与字符串扫描指令SCAS也会影响状态标志,使指令的执行在指定的条件下能够立即停止。为配合此目的,REP还有两种条件重复形式:REPE和REPNE。 与REPE配合使用的指令有以下4种格式REPE(Repeat when empty) 假如(CX)=0,如此退出,否如此CX=CX+1;REPZ(Repeat when flag ) 假如ZF=0,如此退出,否如此CX=CX+1;。字符串操作指令的实质是对一片连续的存储单元进展处理,这片连续的存储单元由隐含指

28、针DS:SI或ES:DI来指定;字符串操作指令可对内存单元按照字节、字、双字进展处理,并能根据操作对象的字节数使变址存放器SI/DI增加或减少1、2、4字节;规定如下:A.当DF=0时,变址存放器SI/DI增加1、2、4字节;即:变址存放器SI/DI递增的步长可以是1、2、4字节;B.当DF=1时,变址存放器SI/DI减少1、2、4字节;即:变址存放器SI/DI递减的步长可以是1、2、4字节;取字符串数据指令(Load String Instruction)从指针DI:SI所指定的内存单元开始,取一个字节/字/双字,然后存入到AL/AX/EAX中,并根据标志位DF的值对存放器SI做相应的增减;

29、把存放字符串数据的连续存储区当做是数据源,使用存放器SI;该指令的执行不会影响任何标志位;指令格式:LODSB/LODSW 地址表达式 LODSD 地址表达式 ;80386+在指令LODS中,它会根据地址表达式的属性来决定读取一个字节、字或双字;即:当该地址表达式的属性为字节、字或双字时,将从指针DI:SI处读取一个字节到AL中,或读取一个字到AX中,或读取一个双字到EAX中,与此同时,SI还将分别增减1、2、4字节;取字符串数据指令的功能示意图如如下图所示:置字符串数据指令(Store String Instruction)该指令把存放器AL/AX/EAX中的值存入指针ES:DI所指向内存单元开始的一片存储单元中,并根据标志位DF的值对存放器DI做相应的增减;把存放字符串的连续存储区当做是数据的目的地,使用存放器DI;该指令的执行并不会影响任何标志位;指令格式: STOSB/STOSW 地址表达式 STOSD 地址表达式 ;80386+置字符串数据指令的功能示意图如如下图所示:字符串传送指令(Move String Instruction)该指令把指针DS:SI所指向的字节、字或双字传送给指针ES:DI所指向的内存单元,并根据标志位DF的值对存放器DI和SI分别作相应的增减;该指令的执行并不会影响任何标志位;指令格式:

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1