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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

微机原理与接口技术常用指令.docx

1、微机原理与接口技术常用指令 微原指令一、立即寻址方式 所提供的操作数直接包含在指令中。它紧跟在操作码的后面,与操作码一起放在代码段区域中,如图所示。 例如: MOV CX,2A50H 立即寻址方式的指令常用来给寄存器赋初值。立即数不但可以送到寄存器中,还可以送到一个存储单元(8位)中或两个连续的存储单元(16位)中去。在所有的指令中,立即数只能作源操作数,不能作目的操作数。另外要注意,以AF打头的数字出理在指令中时,前面一定要加一个数字0,以免与其它符号相混淆。如将立即FF00H送到AX的指令必须写成如下形式: MOV AX,0FF00H二、寄存器寻址方式 在这种寻址方式下,操作数包含在寄存器

2、中,由指令指定寄存器的名称。对于16位操作数,寄存器可以是AX、BX、CX、DX,SI、D1、SP和BP等。对于8位操作数,则用寄存器AH、AL、BH、BL、CH、CL、DH和DL。 例如:MOV DX,AX MOV CL,AH注意:源操作数的长度必须与目的操作数一致,否则会出错。例如,不能将AH寄存器的内容传送到CX中去,尽管CX寄存器放得下AH的内容,但汇编程序不知道将它放到CH还是CL中。这种寻址方式的优点是:寄存器数量一般在几个到几十个,比存储器单元少很多,因此它的地址码短,从而缩短了指令长度,节省了程序存储空间;另一方面,从寄存器里取数比从存储器里取数的速度快得多,从而提高了指令执行

3、速度。三、直接寻址方式1.直接寻址方式在IBM PC机中,把操作数的偏移地址称为有效地址EA。使用直接寻址方式的指令时,存储单元的有效地址直接由指令给出,在它们的机器码中,有效地址存放在代码段中指令的操作码之后。而该地址单元中的数据总是存放在存储器中,所以必须先求出操作数的物理地址,然后再访问存储器,才能取得操作数。当采用直接寻址指令时,如果指令中没有用前缀指明操作数存放在哪一段,则默认为使用的段寄存器为数据段寄存器DS,操作数的物理地址16DSEA10HDSEA。 指令中有效地址上必须加一个方括号,以便与立即数相区别。例如:MOV AX,2000H MOV AL,2000H2.段超越前缀 如

4、果要对代码段、堆栈段或附加段寄存器所指出的存储区进行直接寻址,应在指令中指定段超越前缀。例如,数据若放在附加段中,则应在有效地址前加“ES:”,这里的冒号“:”称为修改属性运算符,计算物理地址时要用ES作基地址,而不再是默认值DS。 例如: MOV AX,ES:500H该指令的源操作数的物理地址等于16ES500H。 2.段超越前缀如果要对代码段、堆栈段或附加段寄存器所指出的存储区进行直接寻址,应在指令中指定段超越前缀。例如,数据若放在附加段中,则应在有效地址前加“ES:”,这里的冒号“:”称为修改属性运算符,计算物理地址时要用ES作基地址,而不再是默认值DS。 例如: MOV AX,ES:5

5、00H该指令的源操作数的物理地址等于16ES500H。 3.符号地址 在汇编语言中还允许用符号地址代替数值地址,实际上就是给存储单元起一个名字,这样,如果要与这些单元打交道,只要使用其名字即可,不必记住具体数值是多少。例如: MOV AX,AREA1 光从指令的形式上看,AREAl不仅可代表符号地址,也可以表示它是一个16位的立即数,两者之间究竟如何来区别呢?程序中还必须事先安排说明语句也叫做伪指令来加以说明。例如:AREA1 EQU 0867H MOV AX,AREA1例如:AREA1 DW 0867H MOV AX,AREA1 (该指令也可写为 MOV AX,AREA1)符号地址也允许段超

6、越,下面两条指令是等价的,即: MOV AX,ES:AREA1 MOV AX,ES:AREA1源操作数的物理地址16ESAREA1四、寄存器间接寻址 指令中给出的寄存器中的值不是操作数本身,而是操作数的有效地址,这种寻址方式称为寄存器间接寻址。寄存器名称外面必须加方括号,以与寄存器寻址方式相区别。这类指令中使用的寄存器有基址寄存器BX、BP及变址寄存器SI、DI。如果指令中指定的寄存器是BX、SI或DI,则默认操作数存放在数据段中,这时要用数据段寄存器DS的内容作为段地址,操作数的物理地址由DS左移4位后与BX、SI或Dl相加形成。例如:MOV BX,SI设DS1000H,SI2000H,(1

7、2000H)=318BH则物理地址16DSSI10000H2000H12000H如果指令中用寄存器BP进行间接寻址,则默认操作数在堆栈段中,操作数的段地址在寄存器SS中,操作数的物理地址16SSBP。 指令也可以指定段超越前缀来从默认段以外的段中取得数据。 这种寻址方式一般用于访问表格,执行完一条指令后,通过修改SI、DI、BX或BP的内容就可访问到表格的下一数据项的存储单元。如果指令中用寄存器BP进行间接寻址,则默认操作数在堆栈段中,操作数的段地址在寄存器SS中,操作数的物理地址16SSBP。指令也可以指定段超越前缀来从默认段以外的段中取得数据。这种寻址方式一般用于访问表格,执行完一条指令后

8、,通过修改SI、DI、BX或BP的内容就可访问到表格的下一数据项的存储单元。五、寄存器相对寻址方式 操作数的有效地址是一个基址或变址寄存器的内容与指令中指定的8位或16位位移量之和。这种寻址方式与寄存器间接寻址十分相似,主要区别是前者在有效地址上还要加一个位移量。同样,当指令中使用 BX、SI或DI寄存器时,段寄存器使用DS,当指定寄存器是BP时,段寄存器使用SS。例如:MOV BX,COUNTSI六、基址变址寻址方式 操作数的有效地址是一个基址寄存器(BX或BP)和一个变址寄存器(SI或DI)的内容之和,两个寄存器均由指令指定。若:基址寄存器为BX时,段址寄存器用DS 则:物理地址16DS十

9、BX十SI 或 16DSBX十DI 若:基址寄存器为BP时,段址寄存器应用SS 则:物理地址16SS十BPSI 或 16SS十BP十DI例如: MOV AX, BXSI设: DS3000H,BX1200H,SI0500H,(31700H)0ABCDH则: 物理地址16DS十BX十SI 30000H1200H0500H 31700H 执行结果AX0ABCDH。 指令中的方括号有相加的意思,上述指令也可以写成:MOV AX, BXSI七、相对基址变址寻址方式 操作数的有效地址是一个基址寄存器和一个变址寄存器的内容,再加上指令中指定的8位或16位位移量之和。若:基址寄存器为BX时,用DS作段寄存器则

10、:物理地址l6DS十BX十SI8位或16位位移量或 l6DS十BX十DI8位或16位位移量。若:基址寄存器为BP时,用SS作段寄存器则:物理地址l6DS十BP十SI8位或16位位移量或l6DS十BP十DI8位或16位位移量例如:MOV AX,MASKBXSI设:DS=2000H,BX=1500H,SI0300H, MASK0200H,(21A00H)=26BFH则:物理地址=16DSBXSIMASK20000H1500H0300H+0200H21A00H执行结果,AX26BFH。同样,上述指令也可写成: MOV AX,MASKBXSIMOV AX,200HBXSIMOV AX,MASKBXSI

11、八、其它1. 隐含寻址 指令中不指明操作数,但有隐含规定的寻址方式,例如指令DAA,它的含义是对寄存器AL中的数据进行十进制数调整,结果仍保留在AL中。2. I/O端口寻址 8086有直接端口和间接端口两种寻址方式。在直接端口寻址方式中,端口地址由指令直接提供,它是一个8位立即数。由于一个8位二进制数的最大值为255,所以在这种寻址方式中,能访问的端口号为00FFH,即256个端口。例如:IN AL,63H在间接寻址方式中,被寻址的端口号由寄存器DX提供,这种寻址方式能访问多达64K个I/O端口,端口号为00000FFFFH。例如:MOV DX,213H IN AL,DX 3.一条指令有几种寻

12、址方式 上面介绍的各种寻址方式都是针对源操作数的,目的操作数均用寄存器来表示。实际上,目的操作数也可以用除立即寻址方式以外的所有寻址方式指定,许多指令还具有各自的隐含规则,所以一条指令可能包含几种寻址方式。例如:MOV BX,AL设:BX3600H,DI1000H,AL05H目的操作数的物理地址16DS十BX10000H十3600H13600H指令执行结果为(13600H)05H。 1) 通用传送指令MOV 可实现寄存器之间、寄存器和存储器之间传送数据,还可实现将立即数送至寄存器或存储单元的操作。 汇编格式:MOV 目的操作数,源操作数 执行的操作:(目的操作数)源操作数 功能:将源操作数存入

13、目的操作数的寄存器或存储单元中去。 注意: 目的操作数不能是立即寻址方式。 源操作数与目的操作数不能同时为存储器寻址方式,即两个内存单元之间不能直接传送数据。 立即数不能直接送段寄存器,即段寄存器只能通过寄存器或存储单元传送数据。 两个段寄存器之间不允许直接传送数据。 不允许给CS、IP、PSW三个寄存器传送数据,即这3个寄存器的值用户无权改变。 源操作数和目的操作数必须字长相等。 MOV指令不影响标志位。例:DATA是用户定义的一个数据段的段名。则:MOV AX,DATAMOV DS,AX两条指令完成对DS段寄存器的赋值。若写成:MOV DS,DATA则是错误的。如果把CPU内部的寄存器细分

14、为段寄存器和寄存器的话,则MOV指令有九种形式: 从寄存器到寄存器; 从寄存器到段寄存器; 从寄存器到存储器; 从段寄存器到寄存器; 从存储器到寄存器; 从段寄存器到存储器; 从存储器到段寄存器; 从立即数到寄存器; 从立即数到存储器。MOV指令的九种形式如下图所示。 MOV指令的九种形式说明:寄存器寻址有直接、寄存器间接、寄存器相对、基址变址和相对基址变址五种存储器寻址方式。2) 进栈指令PUSH及出栈指令POP 堆栈是由若干个连续存储单元组成的“后进先出”或“先进后出”存储区域,它的段地址存于SS寄存器中,它只有一个数据出入口,堆栈指针寄存器SP任何时候都指向当前的栈顶,入栈出栈都必须通过

15、SP来确定。如果有数据PUSH压入或POP弹出,SP必须及时修改,以保证(SP)始终指向当前的栈顶位置。 在子程序调用和中断处理过程中,分别需要保存返回地址和断点地址,即将当前CS和IP的值压栈;在进入子程序和中断处理后,还需要保存通用寄存器的值;子程序和中断处理程序将要返回时,则要恢复通用寄存器的值;子程序和中断处理程序返回时,要将返回地址或断点地址出栈。这些功能都要通过堆栈指令来实现。 PUSH指令汇编格式:PUSH 源操作数执行的操作:(SP)(SP)2 先修改指针 (SP)+1,(SP)操作数功能:将16位寄存器、段寄存器、16位存储单元数据压入堆栈。 POP指令汇编格式:POP 目的

16、操作数执行操作:(操作数)(SP)+1,(SP) (SP)(SP)+2 后修改指针功能:将堆栈中的16位数据送入16位寄存器、段寄存器、16位存储单元中。说明: 在8086/8088中,PUSH、POP指令的操作数不能使用立即寻址方式。POP指令的操作数还不能使用CS寄存器。 堆栈中数据的压入、弹出必须以字为单位,所以PUSH和POP指令只能作字操作。 这两条堆栈指令不影响标志位。例 : MOV AX,1234H PUSH AX 设执行前(SS)=2000H, (SP)=00FEH,指令执行过程如下图所示,执行后(SS)=2000H, (SP)=00FCH。3) PUSHF指令。汇编格式:PU

17、SHF执行的操作:(SP)(SP)2 (SP)+1,(SP)PSW功能:将标志寄存器内容压入堆栈。4) POPF指令汇编格式:POPF执行的操作:(PSW)(SP)+1,(SP) (SP)(SP)+2功能:将16位堆栈数据弹出送入标志寄存器中。说明:8086/8088指令系统中没有设置改变TF标志位的指令。若要改变TF值,先用PUSHF指令将标志压栈,然后设法改变对应TF标志位的位值,再用POPF指令弹出送给PSW,即可完成改变PSW中TF标志位的值。 例:若想设置TF=1,程序段如下:PUSHFPOP AXOR AH,01H ;修改TF位PUSH AXPOPF5) XCHG指令 互换指令XC

18、HG可以实现字互换或字节互换。互换可以在寄存器之间进行,也可以在寄存器和存储单元之间进行。 汇编格式:XCHG 目的操作数,源操作数 执行的操作:互换源、目的两个操作数的存放位置。说明: 源、目的操作数的寻址方式不允许是立即寻址方式。 两个寻址方式中,必须有一个是寄存器寻址,即两个存储单元之间不能直接互换数据。 所有的段寄存器以及IP寄存器不允许使用本条指令与其他寄存器互换数据。 此指令不影响标志位。例 XCHG BX,BP+SI 指令执行前,(BX)=1234H,(BP)=0100H,(SI)=0020H,(SS)=1F00H,(1F120H)=0000H,则源操作数物理地址=1F00H10

19、H+0100H+0020H =1F00H10H+0120H=1F120H指令执行后:(BX)=0000H,(1F120H)=1234H 3) XLAT换表指令汇编格式:XLAT或XLAT 转换表执行的操作:(AL)(BX)+(AL)说明: XLAT指令是将AL的内容替换成存储单元中的一个数,往往用于代码转换,例如,把字符的扫描码转换成ASCII码或者把十六进制数0F转换成七段数码管显示代码。使用此指令前,先在数据段建立一个表格,表格首地址存入BX寄存器,欲取代码的表内位移量存入AL寄存器中。XLAT指令将(AL)值扩展成16位,与(BX)相加形成一个段偏移地址,段地址取(DS),据此读出代码送

20、入AL寄存器。 该指令有两种格式,第二种格式中的地址标号是指代码表的表首地址。它只是为提高程序可读性而设置的,指令执行时只使用预先存入BX中的代码表首地址,而并不用汇编格式中指定的地址标号。 (AL)是一个8位无符号数,所以表格中最多只能存放256个代码。 此指令的执行结果不影响标志位。【例3-21】 一个七段LED显示代码转换表存于TABLE开始的存储区,则TABLE DB 40H,79H,24H,30H,19H DB 12H,02H,78H,00H,18H . . . MOV AL,4 MOV BX,OFFSET TABLE XLAT 完成了将4 BCD码转换成七段LED显示代码的工作。2

21、. 输入输出指令 这类指令都仅限于I/O端口或存储单元与累加器AL(AX)之间传送数据。具体包括IN输入指令、OUT输出指令。 1) IN输入指令 汇编格式: IN AL,端口地址表达式或IN AX,端口地址表达式 IN AL,DX ;端口地址存放在DX寄存器中 或 IN AX,DX 执行的操作:AL(端口地址表达式)或AX(端口地址表达式+1),(端口地址表达式) 说明: 该指令的目的操作数仅限于累加器,即8位操作采用AL,16位操作采用AX,不能由其他任何寄存器代替。 如果I/O寻址的口地址号在8位以内,可以用直接寻址方式,地址表达式则由一个8位立即数表示;如果I/O寻址的口地址号在16位

22、以内,可以用寄存器间接寻址方式,所寻址的地址口号则装入DX,间接寻址仅可以使用DX。2) OUT输出指令 汇编格式 OUT 地址表达式,AL或 OUT 地址表达式,AX OUT DX,AL ;DX端口地址或 OUT DX,AX执行的操作:端口地址(AL)或 (端口地址+1),(端口地址)(AX) 1) LEA取有效地址指令汇编格式:LEA 16位寄存器名,存储器寻址方式执行的操作:(16位寄存器)源操作数的偏移地址说明: 这条指令常用在初始化程序段中使一个寄存器成为指针。 16位寄存器不包括段寄存器。 这条指令不影响标志位。例 LEA BX,TABLE TABLE是数据段中定义的地址标号,指令

23、执行前,如果(BX)=0000H,(DS)=2000H,TABLE=20020H,则指令执行后,(BX)=0020H。2) LDS指针送指定寄存器和DS寄存器指令 汇编格式:LDS 16位寄存器名,存储器寻址方式 执行的操作:将寻址到的存储单元的第一个源操作数(字)送16位寄存器,第二个源操作数(字)送DS寄存器。说明: 本条指令中的16位寄存器不允许是段寄存器。 本条指令不影响标志位。例 LDS AX,TABLESI假设(20050H)=12345678H,指令执行前,如果(AX)=0000H,(DS)=2000H,TABLE=0020H,(SI)=0030H,则物理地址=20000H+00

24、20H+0030H=20050H;指令执行后,(AX)=5678H,(DS)=1234H。3) LES指针送指定寄存器和ES寄存器指令 汇编格式:LES 16位寄存器名,存储器寻址方式 执行的操作:将寻址到的存储单元的第一个源操作数(字)送16位寄存器,第二个源操作数(字)送ES寄存器。说明: 16位寄存器不允许是段寄存器。 本条指令不影响标志位。 4. 标志传送指令这组指令包括LAHF标志送AH和SAHF AH送标志寄存器。1) LAHF标志送AH指令汇编格式:LAHF 执行的操作:(AH)(PSW的低8位)说明:此指令具体操作如下图所示。2) SAHF AH送标志寄存器指令汇编格式:SAH

25、F执行的操作:(PSW的低8位)(AH)3.3.2算术运算指令 算术运算指令包括二进制数的运算及十进制数的运算指令。算术运算指令用来执行加、减、乘、除算术运算,它们有双操作数指令,也有单操作数指令,单操作数指令不允许使用立即寻址方式。乘法和除法指令的目的操作数采用隐含寻址方式,汇编指令只指定源操作数,源操作数不允许使用立即寻址方式。双操作数指令不允许目的操作数为立即寻址,不允许两个操作数同时为存储器寻址。另外,不论是双操作数还是单操作数,都不允许使用段寄存器。段寄存器只能被传送、压栈、出栈。特别要强调的是,当汇编程序无法确定指令中操作数的长度时,必须用BYTE PTR、WORD PTR、DWO

26、RD PTR伪指令来指定操作数的长度。1) ADD加法指令汇编格式:ADD 目的操作数,源操作数执行的操作:(目的操作数)源操作数+目的操作数2) ADC带进位加法指令汇编格式:ADC 目的操作数,源操作数执行的操作:(目的操作数)源操作数+目的操作数+CF3) INC增量指令汇编格式:INC 操作数执行的操作:(操作数)操作数+1以上三条指令都可作字或字节运算,除INC指令不影响CF标志位外,其他标志位都受指令操作结果的影响。 PSW中的标志位共有9位,其中最主要的是ZF、SF、CF、OF四位。ZF表示结果是否为零,SF表示结果的符号位,CF表示最高有效位是否有向更高位的进位,OF表示结果是

27、否溢出。对加法指令来讲,如果操作数是无符号数,则最高有效位有向更高位的进位说明运算结果超出了机器位数所能表示的最大数。因此,CF标志位实质上是表示无符号数有无溢出。而OF标志位表示有符号数有无溢出。例 : 完成双字长相加,被加数存放在DX与AX中,加数放在BX与CX中,和放在DX与AX中。程序段如下:ADD AX,CXADC DX,BX ;高位运算时要考虑低位的进位1) SUB减法指令汇编格式:SUB 目的操作数,源操作数执行的操作:(目的操作数)目的操作数源操作数2) SBB带借位减法指令汇编格式:SBB 目的操作数,源操作数执行的操作:(目的操作数)目的操作数源操作数CF3) DEC减量指

28、令汇编格式:DEC 操作数执行的操作:(操作数)操作数14) NEG求补指令汇编格式:NEG 操作数执行的操作:(操作数)0操作数说明: 0操作数 = 操作数,在微型计算机中,带符号的二进制数值数据都采用补码编码,因此,此处的操作数是补码,所以求负的操作数实质上是求补操作。 只有当操作数为0时求补运算的结果使CF=0,其他情况则均为1;只有当操作数为128或32768时使OF=1,其他情况则均为05) CMP比较指令汇编格式:CMP 目的操作数,源操作数执行的操作:目的操作数源操作数。说明:本条指令相减结果不保存,只是根据结果设置标志位。在实际应用中,CMP指令后往往跟着一个条件转移指令,根据

29、比较结果产生不同的分支。 以上五条指令都可作字或字节运算。另外,除DEC指令不影响CF标志位外,其他指令都对标志位有影响。减法指令对标志位的影响与加法指令类似,所不同的是CF位。前面说过,CF表示机器的最高有效位有向更高位的进位。对减法指令来讲,恰好相反,若机器最高有效位没有向更高位的进位时,CF=1,否则CF=0。对用户来讲,减数大于被减数,此时有借位则CF=1,否则CF=0。例: 完成双字长相减操作,被减数存放在DX与AX中,减数存放在BX与CX中,差放在DX和AX中。程序段如下:SUB AX,CX SBB DX,BX3. 乘法指令 乘法指令可对字节、字进行操作,且可对有符号数整数或无符号

30、数整数进行操作。两个8位数相乘,结果为16位数;两个16位数相乘,结果为32位数。乘法指令有两条。1) MUL无符号数乘法指令汇编格式:MUL 源操作数执行的操作:若为字节操作 (AX)(AL)源操作数若为字操作 (DX), (AX)(AX)源操作数2) IMUL有符号数乘法指令 汇编格式:IMUL 源操作数执行的操作:与MUL相同,只是处理的数据是有符号数,而MUL处理的数据是无符号数。说明: 在乘法指令中,被乘数(即目的操作数)隐含在AX(字运算)或AL(字节运算)中,乘数(即源操作数)由指令寻址,其寻址方式可以是除立即寻址方式之外的任何数据寻址方式,它同时也决定了乘法是字运算还是字节运算。两个8位数相乘其积是16位,存放在AX中;两个16位数相乘其积是32位,存放在DX、AX中,DX存放高位字,AX存放低位字。 乘法指令对除CF和OF以外的标志位无定义(即这些标志位的状态是不定的)

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

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