微机原理指令小结.doc_第1页
微机原理指令小结.doc_第2页
微机原理指令小结.doc_第3页
微机原理指令小结.doc_第4页
微机原理指令小结.doc_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

8086cpu指令小结所有指令:(1)立即数不能作为目的操作数。(2)不能在2个存储单元之间直接进行操作(串操作除外)。(3)mov指令和堆栈指令是惟一能对段寄存器进行操作的指令。(4)源和目的操作数的数据类型必须匹配,都是8位,或都是16位。(5) cs 、ip不能直接作为操作数。(6)指令中至少要有一项明确说明传送的是字节还是字,如果没有,可通过ptr进行设置。一、传送指令(1)6种指令:通用传送指令、堆栈操作指令、交换操作指令、i/o操作指令、目的地址传送指令和标志传送指令。(2)对标志位的影响:除标志传送(sahf、popf)外,均不影响标志位。(3)操作数表示方法:立即数data,存储器单元地址mem,寄存器reg, 段寄存器segreg。1. 通用传送指令:完成数据传送 (1)指令格式:mov oprd1,oprd2 ;目的操作数oprd1 源操作数oprd2(2)源oprd2: data、mem、reg、segreg。(3)目的oprd1: mem、reg、segreg。(4)通用传送指令mov和堆栈指令是唯一允许以段寄存器(代码段寄存器cs和指令指针ip除外,即cs 、ip不能作为直接操作数)作为操作数的指令,不允许通过mov指令直接以立即数方式给段寄存器赋值,不允许直接在两个段寄存器之间直接进行传送。(5)8位/16位操作。2. 堆栈操作指令:将数据压入/弹出堆栈(1)指令格式:入栈:push oprd;先修改堆栈指针sp-2,然后将数据压入堆栈。 ;sp =sp-1,sp=操作数高8位; sp =sp-1,sp= 操作数低8位。出栈:pop oprd; 先将数据弹出堆栈,然后修改堆栈指针sp+2。 ;(操作数低8位)sp,sp =sp+1;(操作数高8位)sp,sp =sp+1。(2)操作数:mem、reg、segreg。操作数不能是立即数data。(3)仅能进行字运算(16位操作)。(4)堆栈存取原则为后进先出,只有一个入/出口ss:sp, sp始终指向栈顶,sp是自动修改的,sp在初始化中需要设置。(5)push、pop指令必须成对使用。3. 交换操作指令:xchg数据交换;xlat完成一个字节的换码转换(1)指令格式:交换操作指令: xchg oprd1,oprd2;oprd1 oprd2累加器换码指令(表转换指令、查表指令):xlat;(al) (ds)16(bx)+(al)(2)xchg:段寄存器和立即数不能作为一个操作数,8位/16位操作。(3)xlat:表首地址在bx中,al的内容作为某一项到表首的偏移量(256字节的表的下标),转换后的结果存放在al中。4. i/o操作指令:累加器(ax/al)与i/o端口之间的数据传送(1)指令格式:输入指令:in al/ ax,port;(al/ ax) portin al/ ax,dx ;(al/ ax) dx输出指令:out port,al/ ax ;port(al/ ax)out dx ,al/ ax ;dx(al/ ax)(2)当端口地址 255时,使用port(8位端口直接地址);当端口地址255时,必须用dx( 16位端口直接地址)作桥梁。dx作端口寻址最多可寻找64k个端口。(3)port为直接寻址,8位/16位操作。5. 目的地址传送指令(1)取有效地址指令:lea oprd1,oprd2 或: lea reg,add ;( reg) add, add为有效地址把存储器的有效地址ea(源操作数的地址偏移量)送入一个寄存器reg;常用于将一个16位的通用寄存器作为地址指针。传送的是有效地址ea。(2)将双地址指针装入ds和另一个寄存器指令lds指令:lds oprd1,oprd2 或: lds reg,add ;(reg) (add+1)(add), (ds)(add+3)(add +2)(3)将双地址指针装入es和另一个寄存器指令les指令: les oprd1,oprd2 或: les reg,add ;(reg)(add+1)(add), (es)(add+3)(add +2) 从源操作数指定的存储单元中取出4字节的地址指针(包括2字节的段地址和2字节的偏移量)传送到ds/es和reg。指定将段地址送入ds/es,偏移量部分送入一个16位的指针寄存器或变址寄存器。 源操作数mem,目的操作数必须是一个16位的通用寄存器。 传送的是存储单元的内容,而不是存储器的有效地址ea。6. 标志传送指令(1)读标志指令:lahf; (ah) (fr)07功能:将标志寄存器中的sf、zf、af、pf和cf(即低8位)传送至ah寄存器的指定位,空位没有定义。(2)存标志指令:sahf; (fr)07 (ah)功能:将寄存器ah的指定位,送至标志寄存器的sf、zf、af、pf和cf位(即低8位)。根据ah的内容,影响上述标志位,对of、df、 if和tf无影响。(3)标志入栈指令:pushf;将fr入栈。(sp)(sp)2,(sp)+1,(sp)(fr)功能:将标志寄存器fr压入堆栈顶部,同时修改堆栈指针,不影响标志位。(4)标志弹出栈指令:popf;将栈顶的内容弹出到fr中。;(fr)(sp)+1,(sp), (sp) (sp)+ 2功能:堆栈顶部的一个字,传送到标志寄存器fr,同时修改堆栈指针,影响标志位。二、算术运算指令(1)9种指令:加法指令、减法指令、增量/减量指令、求补指令、比较指令、乘法指令、除法指令、字节字/转换为字扩展指令和十进制调整指令。(2)对标志位的影响: 加、减、比较指令(cmp)、取补指令(neg)指令均影响6个标志位cf、of、pf、sf、zf和af。 乘法指令影响cf和of标志;除法指令所有标志位都不确定,无意义。 增量/减量指令影响除进位标志cf以外的5个标志位af、of、pf、sf和zf。 字节字/转换为字扩展指令不影响标志位。 加法的ascii调整指令aaa,十进制调整指令 daa影响除溢出标志of以外5个标志: cf、pf、sf、zf和af;of没有意义。 减法的ascii调整指令 aas、十进制调整指令 das影响 2个标志:cf和af;其余标志没有意义。 乘法的ascii调整指令aam 、除法的ascii调整指令aad 根据al寄存器的结果影响sf、zf和pf。1加法指令 (addition):完成加法操作。(1)格式:add/ adc oprd1,oprd2 ;(oprd1)(oprd1)+(oprd2)(2)源: data、mem、reg;目的:reg,mem。(3)adc指令主要用于多字节运算中。(4)8位/16位操作。2减法指令(subtraction) :完成减法操作。(1)格式:sub/ sbb oprd1,oprd2;(oprd1)(oprd1)(oprd2)(2)规定同加法指令。3. 增量(加1 )/减量(减1 )指令inc/ dec:完成+1/-1操作。(1)格式:inc/ dec oprd; (oprd)(oprd)1(2)功能:主要用于在循环程序中修改地址指针和循环次数等。(3)操作数:reg、mem。4. 求补指令neg:完成补码操作。(1)格式:neg oprd(2)操作数:reg、:mem。5. 比较指令cmp:完成减法操作,结果不回送,反映在标志位上。(1)格式:cmp oprd1,oprd2; (oprd1)(oprd2)(2)功能:主要用于比较两个数之间的关系。在比较指令之后,根据标志即可判断两者之间的关系。减法操作,结果不回送目的操作数。(3)两数关系的判断标志 a=b 用 zf=1 判断; 两个无符号数的大小用cf判断。cf=1,ab。 两个符号数的大小用sfof判断。sfof=1,ab。 jg/jnle(大于, sfof=0且 zf=0 ) jl/jnge (小于, sfof=1且 zf=0 )6. 乘法指令mul/ imul:完成无符号乘法/带符号(整数)乘法操作。(1)格式:mul/ imul oprd ;8位:(ax) (al)( oprd ) ;16位:(dx) (ax) (ax)( oprd ) (2)源操作数:reg、mem,由指令给出。(3)目的操作数:默认在al/ax中。(4)带符号数乘法指令imul当结果的高半部分不是结果的低半部分的符号扩展时,标志位cf和of将置位。(6)可完成字节与字节乘法、字与字乘法操作。7. 除法指令div/ idiv:完成无符号除法/带符号(整数)除法操作。(1)格式:div/ idiv oprd; 8位:(al) (ax)/( oprd ) (ah) (余数) ;16位:(ax) (dx) (ax)/( oprd) ( dx )(余数)(2)源/目的操作数规定同乘法指令。(3)对于符号数,当被除数不够位数时,需要对高8/16位进行扩展符号扩展。8. 字节字/转换为字扩展指令cbw/cwd:将al/ax寄存器的最高位扩展到ah/dx。(1)格式:cbw/cwd(2)功能:将al/ax寄存器的最高位扩展到ah/dx, al.7(ax.15)=0,则ah(dx)=0;al.7(ax.15)= 1,则ah=0ffh(dx=0ffffh)。9. 十进制调整指令(1)压缩bcd码:每个字节表示两位bcd数;非压缩bcd码:用一个字节表示一位bcd数,在这字节的高四位用0填充。(2)每条十进制调整指令在使用时都与相应的算术运算指令配合,并自动对相应的算术运算指令结果进行相应的十进制调整。(3)格式: daa:压缩的bcd码加法调整 das:压缩的bcd码减法调整 aaa:非压缩的bcd码加法调整 aas:非压缩的bcd码减法调整 aam:乘法后的bcd码调整 aad:除法前的bcd码调整三、逻辑运算和移位指令1. 逻辑运算指令(1)5种指令:逻辑与、或、非、异或和测试指令。(2)指令格式 逻辑与指令and oprd1,oprd2; (oprd1)(oprd1)(oprd2) 逻辑或指令or oprd1,oprd2; (oprd1)(oprd1)(oprd2 ) 逻辑非指令 not oprd; (oprd) (/oprd) 逻辑异或指令xor oprd1,oprd2;(oprd1)(oprd1)(oprd2) 测试指令test oprd1,oprd2 ; (oprd1)( oprd2 ) ,结果不回送。(3)操作数范围源操作数为reg 、mem、data;目的操作数为reg 、mem(not指令只有一个操作数)。单操作数指令not的操作数不能为立即数。双操作数逻辑指令中,必须有一个操作数为寄存器寻址方式,且目的操作数不能为立即数。(4)功能:实现相应的逻辑功能。 与指令可实现屏蔽(复位)数据的某些位(使一个字或字节中的某些位清0,而其余位不变),提取某些位或拆字。 或指令可实现置位数据的某些位(使一个字或字节中的某些位置1,而其余位不变),拼字。 非指令常用于使某个数取反,或取反后+1而得补码。 异或指令可实现某个寄存器清0,或使目的操作数的某些位取反(使一个字或字节中的某些位取反,而其余位不变)。 测试指令通常用于测试。目的操作数的某些位是1还是0,用zf标志判断。(5)对标志位的影响 逻辑与、或、异或和测试指令影响zf,pf,sf标志;cf=0,of=0;af无意义。 逻辑非指令不影响标志位。2. 移位指令(1)4组8种指令:算术移位sa,逻辑移位sh,循环移位ro,带进位位的循环移位rc。右移r,左移l。(2)指令格式:操作码 oprd,mm =1时,只移1位; m1时,可将指令格式中的cnt改为cl寄存器,并在移位指令前将移位次数预先送入cl寄存器中。(3)功能:将oprd的内容移位m次。算术移位适用于带符号数的2,2。逻辑移位适用于无符号数的2,2。(4)操作数范围: reg、mem。 (5)对标志位的影响: 算术/逻辑移位指令影响cf、sf、zf、pf标志,在移1位时,影响of标志。不影响af标志。 循环移位指令只影响cf、 of标志,不影响其他标志位。四、串操作类指令 (1)5种指令:串传送movs,串比较cmps,串搜索scas,存串stos,取串lods。(2)指令格式:操作码 dst,srcmovsb(字节)/movsw(字) 串传送movs dst,src;(es:dst)(ds:src )movsb; (es:di)(ds:si),si=si1,di=di1movsw; (es:di)(ds:si),(es:di+1)(ds:si+1),si=si2,di=di2 串比较cmps dst,src; (es:di)(ds:si);si=si1,di=di1 串搜索scas dst; al (es:di);di=di1 存串stos dst; (es:di) al;di=di1 取串lods src; al (ds:si);si=si1字操作与字节操作类似,alax。(3)功能根据方向标志df及所传送数据的类型(字节/字)对si及di进行修改,在指令重复前缀rep的控制下实现。 串传送:把数据段中由si间接寻址的一个字节/字传送到附加段中由di间接寻址的一个字节/字单元中。 串比较:把数据段中由si间接寻址的一个字节/字与附加段中由di间接寻址的一个字节/字进行比较操作,使比较的结果影响标志位。可在两个数据串中寻找第一个不相等的字节/字,或者第一个相等的字节/字。 串搜索:用指令指定的关键字节/字(分别存放在al/ax中),与附加段中由di间接寻址的字节串中的一个字节进行比较操作,使比较的结果影响标志位。可在指定的数据串中搜索第一个与关键字节匹配(或者不匹配)的字节。 存串:把指令中指定的字节(或字)串(存放在al/ax中) 传送到附加段中由di间接寻址的字节内存单元中。可连续将al(或ax)的内容存入到附加段中的一段内存区域中去,该指令不影标志位。 取串:从串中取指令实现从指定的字节(或字)串中读出信息的操作。(4)规定 串操作类指令是唯一的一组源和目的操作数均在存储单元的指令。 源串在数据段,目的串在附加段。各指令所使用的默认寄存器是:源串地址ds:si;目的串地址es:di;字串长度cx;存取或搜索的默认值 al 串操作时,地址的修改由方向标志确定。cld;df=0,si/di地址作自动增量(自动+1)修改;std;df=1,si/di地址作自动减量(自动1)修改。 任何一个串操作指令均可在指令前面加上一个重复操作作为前缀,于是就重复执行,直至cx、zf满足要求为止。 重复指令前缀rep;若(cx)0,则退出; cx=cx-1;执行后续指令;重复-repe/repz;若(cx)0或zf=0,则退出;cx=cx-1;执行后续指令;重复-repne/repnz;若(cx)0或zf=1,则退出;cx=cx-1;执行后续指令;重复-五、控制转移类指令改变指令执行顺序的指令(1)6种指令:无条件转移指令、子程序调用和返回指令、条件转移指令、循环控制指令、中断指令、处理器控制命令。(2)概念直接转移:转移的目的地址(标号)直接出现在指令码中。间接转移:转移的目的地址间接存储于某一个寄存器或某一个内存变量中。段内转移/调用:转移的目的地址和本条指令在同一代码段中,转移时只改变ip,不改变cs。程序转向的有效地址ea等于当前ip的内容加上8/16位位移量。可分为:段内近转移near 16位位移量,适用于无条件转移指令和条件转移指令,转移范围为-32768 - +32768。段内短转移short 8位位移量,适用于条件转移指令,转移范围为-128 - +127 。段间转移/调用(远转移far):转移的目的地址和本条指令不在同一代码段中,转移时同时改变cs和ip内容,即程序转移到另一个代码段。1. 无条件转移指令jmp 转移方式oprd;转移到oprd所指向的存储器单元处执行程序(1)段内直接短转移指令jmp short oprd;(ip) (ip)+ oprd(2)段内直接近转移指令jmp near ptr oprd;(ip) (ip)+ oprd(3)段内间接转移指令jmp word ptr oprd;(ip) ea(4)段间直接(远)转移指令jmp far ptr oprd;(ip)oprd的段内偏移地址,(cs)oprd所在的段地址。oprd为直接寻址方式。(5)段间间接转移指令jmp dword ptr oprd;(ip) ea,(cs) ea+22. 条件转移指令指令助记符 目的地址(1)标志条件转移指令助记符:j/jn+标志(c, p, s, s, o);(2)比较条件转移指令助记符:j/jn+比较符(a高于, b低于, e等于, g大于, l小于)(3)无符号数比较:测试标志位为cf、zf,分高于a、等于e、低于b等3种情况:zf=1,等于;cf=0,大于。 (4)符号数比较:测试标志位为zf、of和sf,分大于g、等于e、小于l等3种情况:zf=1,等于;sfof =0,大于。3. 子程序调用和返回指令(1)子程序(过程)调用指令call 子程序名 dst段内调用: call near ptr oprd ;(sp)(sp)-2,(sp)-2)(sp)-1) (ip), (ip)子程序dst的地址( 即:ip+16位位移)段间调用:call far ptr oprd ;(sp)(sp)-2 ,(sp)-2)(sp)-1)= ( cs ), (sp)(sp)-2 ,(sp)-2)(sp)-1)=( ip ),(ip)=ea,(cs)=ea+2(2)子程序返回指令ret;段内返回( ip ) (sp) +1 ,sp),( sp ) ( sp) + 2 ;段间返回( ip ) (sp) +1 ,sp),( sp ) ( sp) + 2 ( cs ) (sp) +1 ,sp),( sp ) ( sp) + 24. 循环控制指令对cx或标志位zf进行测试,确定是否循环。(1)loop oprd(短标号);(cx) (cx)1,若cx 0,则循环,否则顺序执行。(2)loopnz/loopne oprd;(cx)(cx)1,若cx

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论