汇编语言第2章 寻址方式和指令系统_第1页
汇编语言第2章 寻址方式和指令系统_第2页
汇编语言第2章 寻址方式和指令系统_第3页
汇编语言第2章 寻址方式和指令系统_第4页
汇编语言第2章 寻址方式和指令系统_第5页
已阅读5页,还剩30页未读 继续免费阅读

付费下载

下载本文档

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

文档简介

1、第二章 寻址方式和指令系统 本章主要介绍8086/80286CPU的寻址方式和部分常用指令,并通过实际例子讲述了指令的功能和使用方法。通过学习,应该掌握汇编语言常用指令的格式、功能以及对CF、OF、SF和ZF标志位的影响,这是学习设计汇编语言程序的基础。本章重点:寻址方式、常用指令本章难点:寻址方式、记指令第一节 指令结构 80X86汇编语言指令的一般格式为: 标号: 指令助记符 操作数 ;注释 其中方括号 中的内容为可选项。各部分的意义说明如下:标号:符号地址,用来表示指令在内存中的位置,以便程序中的其它指令能引用该指令。它通常作为转移指令的操作数,以表示转向的目标地址。标号后应加冒号(:)

2、作分隔符。指令助记符:指令名称,是指令的英文缩写。如“MOV”表示传送指令,“ADD”表示加法指令等。操作数:表示指令要操作的数据或数据所在的地址。80X86指令一般带有02个操作数:有些指令不需要操作数,有些指令需要一或两个操作数。如果有操作数,用一个空格符使之与助记符分隔开;若有两个操作数,则它们之间用逗号(,)分隔。将存放操作结果的操作数称作目的操作数,作第1个操作数;将指令中作为来源的操作数称作源操作数。注释:由分号(;)开始,用来说明指令的功能,使程序更容易理解和阅读。第二节 寻址方式 操作数有立即数、寄存器、存储器,方式多。 寻址方式:寻找操作数或操作数地址的方式。 了解操作数的表

3、示方法,共七种。一、立即寻址方式:操作数直接存放在指令中, 即立即数。 例:MOV AL,06H 则指令执行后:(AL)=06H。 特点:1、主要用来给寄存器或存储器赋值。 2、速度快、只能作源操作数,不能作目的操作数, 且源操作数长度应与目的操作数长度一致。二、寄存器寻址方式 操作数在寄存器中,指令中给出寄存器名。 例:MOV BX,AX 如指令执行前,(AX)=0203H,(BX)=0405H; 则指令执行后:(BX)=0203H,(AX)保持不变。 特点:1、速度快。 以上两种寻址方式都与存储器无关,而以下五种寻址方式均与存储器有关。由于,存储器的各个段的段地址已分别由各个段寄存器存放,

4、因此,我们需要寻找操作数的偏移地址,以便求出其物理地址。为此,我们将操作数的偏移地址称为有效地址(EA)。 规定:双操作数指令中不能同时使用存储器寻址方式。 三、直接寻址方式 1、操作数在存储器中,指令中指出其有效地址,默认段地址在DS寄存器中。计算机根据段地址和有效地址组成的逻辑地址计算出其物理地址,从该物理地址中取出操作数进行操作。 例:MOV AX,2000H 若(DS)=3000H,则执行时,计算机先计算出该存储器的物理地址=3000H*10H+2000H=32000H 若(32000H)=5080H,则指令执行后:(AX)=5080H 2、如果使用段前缀取其它段中的操作数,则在有效地

5、址前必须用其它段寄存器名作为段前缀来指示。 例:MOV BX,CS:3000H 若(CS)=5100H,则执行时,计算机先计算出该存储器的物理地址=5100H*10H+3000H=54000H 若(54000H)=1234H,则指令执行后:(BX)=1234H 3、在汇编语言指令中,用立即数表示操作数地址时,该立即数必须要加方括号,表示该立即数是有效地址。实际上,我们经常使用符号地址来代替数值地址,此时,可不加方括号,两者等效。如: MOV AX,VALUE 此时VALUE为存放操作数的符号地址,上面指令也可以等效写成:MOV AX,VALUE 4、若VALUE在附加段中,则应指定段前缀如下:

6、 MOV AX,ES:VALUE 或:MOV AX, ES:VALUE 直接寻址方式适用于处理单个变量。如要处理某个存放在存储器里的变量,可以用直接寻址方式把该变量先取到一个寄存器中,然后再作进一步处理。四、寄存器间接寻址方式 操作数的有效地址在寄存器中,而操作数则在存储器中,指令中给出寄存器名。 例:MOV AX,BX 若(DS)=3000H,(BX)=1000H,则物理地址为 30000H1000H31000H 若(31000H)62B0H,则执行结果后(AX)=62B0H。 指令中也可以指定段前缀来取得其它段中的数据。如 MOV AX,ES:BX 规定:可用的寄存器只有BX、SI和DI,

7、且寄存器必须加方括号。默认段地址在DS寄存器中。 这种寻址方式用于表格处理,执行完一条指令后,只需修改寄存器内容就可以取出表格的下一项。 五、寄存器相对寻址方式 操作数的有效地址为寄存器内容和位移量之和,指令中给出寄存器名和位移量。 例:MOV AX,COUNTSI 若(DS)=3000H,(COUNT)=3000H,(SI)=2000H 则物理地址为:30000H+3000H+2000H=35000H 若(35000H)=1234H,则指令执行后:(AX)=1234H。 上述指令也可以写成:MOV AX,COUNT+SI,两者等效。 这种寻址方式也可以使用段前缀:MOV DL,ES:STRI

8、NGSI 规定:可用的寄存器只有BX、BP、SI和DI。且寄存器必须加方括号。当使用BP时,默认段为堆栈段SS;使用其它寄存器时,默认段为数据段DS。 寄存器相对寻址方式同样可用于表格处理,表格首地址设为位移量,修改基址或变址寄存器的内容来取得表格中的值。六、基址变址寻址方式 操作数的有效地址是一个基址寄存器和一个变址寄存器的内容之和,指令中给出基址和变址寄存器名。 例:MOV AX,BXDI 若(DS)=3000H,(BX)=1000H,(DI)=0C00H, 则物理地址为:30000H+1000H+0C00H=31C00H 若(31C00H)=562DH,则指令执行后:(AX)=562DH

9、。 上述指令也可以写成:MOV AX,BX+DI,两者等效。 这种寻址方式可使用段前缀,如:MOV AX,ES:BXSI 规定:可用的寄存器只有BX、BP、SI和DI。且两个寄存器必须加方括号。当基址寄存器用BP时,默认段为堆栈段SS;当基址寄存器用BX时,默认段为数据段DS。(以基址为准) 基址变址寻址方式同样适用于数组或表格处理,首地址可存放在基址寄存器中,而用变址寄存器来访问数组中的各个元素。由于基址寄存器和变址寄存器都可以修改,所以比直接变址方法更加灵活。七、相对基址变址寻址方式 操作数的有效地址是一个基址寄存器、一个变址寄存器的内容和指令中指定的位移量之和,它所允许使用的寄存器及其对

10、应的默认段与基址变址寻址方式相同。 例:MOV AX,MASKBXSI 若(DS)=3000H,(BX)=2000H,(SI)=1000H,MASK=0250H, 则物理地址为:30000H+2000H+1000H+0250H=33250H 若(33250H)=3456H,则指令执行后:(AX)=3456H 上述指令也可以写成:MOV AX,MASK+BX+SI MOV AX,MASKBX+SI MOV AX,MASK+BXSI MOV AX,MASK+SIBX 这种寻址方式也可以使用段前缀。 这种寻址方式适用于二维数组的处理。 不加方括号-立即寻址 立即数 加方括号-直接寻址操 不加方括号-

11、寄存器寻址作 1个-寄存器间接寻址数 寄存器 加方括号 1个+位移量-寄存器相对寻址 BX、BP 基址+变址-基址变址寻址 SI、DI 基+变+位移量-相对基址变址寻址第三节 指令系统 这一节主要介绍8086/80286的几种比较常用的指令,只要掌握了这些常用指令,就可以设计大多数汇编语言程序了。一、数据传送指令 在寄存器、存储单元或I/O端口之间传送数据和地址,是最简单、最常用的一类指令。它通常分为四种:(一)通用数据传送指令:MOV、PUSH、POP、XCHG交换1MOV 传送指令 指令格式:MOV DST,SRC 功能:(DST)(SRC),即将源操作数传送到目的操作数中。 其中DST表

12、示目的操作数,SRC表示源操作数。 特点:1)源操作数与目的操作数的长度必须一致。 正确指令:MOV AL,BL MOV BX,DX 不正确指令:MOV AX,BL MOV AL,3824H 2)目的操作数不能为CS、IP或立即数。 3)不能在存储单元之间直接传送数据。 例:MOV AR2,AR1是错误的。 正确指令:MOV AX,AR1 MOV AR2,AX 4)不能在段寄存器之间直接传送数据。 与3)类似,要以通用寄存器为桥梁。 例:MOV AX,ES MOV DS,AX 5)立即数不能直接送段寄存器。通用寄存器来实现传送。 例:MOV AX,DATA_SEG ;数据段寄存器初始化 MOV

13、 DS,AX 6) MOV指令不影响标志位。 2PUSH进栈指令和POP出栈指令 格式:PUSH SRC 功能:(SP)(SP)2 (SP)1,(SP)(SRC) 格式:POP DST 功能:(DST)(SP)1,(SP) (SP)(SP)2 堆栈是以“先进后出”为工作方式的一个特殊的数据存储区,它必须存在于内存的堆栈段中,因而其段地址存放于SS寄存器中。堆栈一端固定,是栈底;另一端浮动,唯一的数据出入口,是栈顶。也只有唯一的堆栈指针寄存器SP,任何时候都指向当前的栈顶地址。所以PUSH和POP指令都必须根据当前SP的内容来确定进栈或出栈的存储单元,而且必须及时自动修改指针,以保证SS:SP指

14、向当前的栈顶。 (向上生成,与单片机相反) 例:PUSH AX;(AX)1234H POP AX;执行后(AX)=1234H(见书)特点:1)SRC、DST只能为字的寄存器或存储器。 不正确指令:PUSH AL 2) DST不能为CS、IP。 不正确指令:POP CS3) PUSH和POP是互补的指令,因此通常成对使用,以避免程序出错-“栈平衡”。4) PUSH和POP指令均不影响标志位。3XCHG 交换指令 格式:XCHG OPR1,OPR2 功能:(OPR1)(OPR2) 其中OPR表示操作数,既是目的,又是源操作数。 例:XCHG BX,DI 如指令执行前:(BX)=6300H,(DI)

15、=0246H,(DS)=2F00H, (2F246H)=4100H OPR2的物理地址=2F000H+0246H=2F246H 则指令执行后:(BX)=4100H,(2F246H)=6300H特点:1)操作数不能使用立即数和段寄存器。2)存储器之间不能直接交换。所以,只可在寄存器之间或者寄存器与存储器之间交换信息。3)目的操作数与源操作数的长度必须一致。4)不影响标志位。(二)累加器专用传送指令:IN、OUT、XLAT这组指令只限于使用累加器AX或AL传送信息。1IN输入、OUT输出指令格式:IN AL/AX,PORT/DX 功能:(AL)/(AX)(PORT)/(DX) OUT PORT/D

16、X,AL/AX (AL)/(AX)(PORT)/(DX) 这两条指令用于将外部设备与CPU进行信息传送。外部设备是用端口地址表示操作数:8位立即数(PORT256)或通过DX寄存器间接给出的端口地址(65536个)(接口的地址线)。 CPU由AL(字节)/AX(字)表示传送的信息(数据线)。 例:IN AL,61H 例:MOV DX,378H MOV AL,41H OUT DX,AL2XLAT(查表)换码指令 格式:XLAT OPR 或:XLAT 功能:(AL)DS:(BX)+(AL) 该指令的功能是寻找内存表中的一个字节,并送入AL寄存器中,其中操作数OPR应该为表名。 使用步骤:1)建立一

17、表格在数据段中。 2)表格首地址(BX) 3)需转换代码相对表首地址的位移量(AL) 4)XLAT 该指令执行以后,AL内容则是表中指定位置的值。 特点:AL为8位寄存器,所以表格长度256。(三)地址传送指令:LEA、LDS、LES这组指令的功能是把有效地址或逻辑地址送到指定的寄存器中。格式:LEA REG,SRC 功能:(REG)SRC LDS REG,SRC (REG)(SRC) LES REG,SRC (DS/ES)(SRC+2) 其中,REG表示寄存器。 例:(DS)=2000H,VALUE=1000H(偏移地址) (21000H)=1234H,(21002H)=5678H 区别:L

18、EA AX,VALUE 执行后:(AX)= MOV AX,VALUE (AX)= LDS AX,VALUE (AX)= (DS)=? MOV AX,OFFSET VALUE (AX)= (只能为符号地址) 1000H1234H1234H1000H特点:1)REG只能为16位通用寄存器(不能用8位或段寄存器 )。 2)SRC只能为存储器的寻址方式(不能用立即和寄存器寻址方式)。 3)LEA指令是传送地址,而MOV指令传送地址中内容。(四)标志寄存器传送指令(简单介绍)1LAHF标志送AH指令 格式:LAHF 功能:(AH)(FLAGS的低字节)2SAHF AH送标志寄存器指令 格式:SAHF 功

19、能:(FLAGS的低字节)(AH)3PUSHF标志进栈指令 格式:PUSHF 功能:(SP)(SP)-2 (SP)+1,(SP)(FLAGS)4POPF标志出栈指令 格式:POPF 功能:(FLAGS)(SP)+1,(SP) (SP)(SP)+2二、算术运算指令 算术运算指令包括二进制数和十进制数(BCD码)的运算。算术指令用来执行算术运算,它们中有双操作数指令,也有单操作数指令。双操作数指令的两个操作数中除源操作数为立即数的情况外,必须有一个操作数在寄存器中。单操作数指令不允许使用立即数方式。算术指令的寻址方式均遵循这一规则。(一) 加法指令:ADD、ADC、INC 加法:ADD DST,S

20、RC 功能:(DST)(SRC)+(DST)带进位加法:ADC DST,SRC (DST)(SRC)+(DST)+CF 加1:INC OPR (OPR)(OPR)+1 其中CF为二进制位进位标志的值。 特点:1.可作字或字节运算。 2.除INC指令不影响CF标志外,都影响条件标志位。 3.双精度数(双字)加法必由两条指令来完成。例1:ADD AX,BX 执行后:(AX)=(AX)+(BX)例2:指令执行前:(DX)=0004H,(AX)=F065H, (BX)=0005H,(CX)=E024H指令序列为:ADD AX,CX ADC DX,BX则指令执行后:(AX)=D089H,(DX)=000

21、AH习题1:请写出(DX)(AX)中32位数加1的指令? ADD AX,1 ADC DX,0(二)减法指令:SUB、SBB、DEC、NEG、CMP 减法:SUB DST,SRC 功能:(DST)(DST)-(SRC)带借位减法:SBB DST,SRC (DST)(DST)-(SRC)-CF 减1:DEC OPR (OPR)(OPR)-1 求补:NEG OPR (OPR)0FFFFH-(OPR)+1 比较:CMP OPR1,OPR2 用(OPR1)-(OPR2)的结果设置标志 位。结果不保存,操作数不变。特点:1.可作字或字节运算。 2.除DEC指令不影响CF标志外,都影响条件标志位。 3.双精

22、度数(双字)减法必由两条指令来完成。 例1:写出(DX、AX)中的32位数减1的指令: SUB AX,1 SBB DX,0 例2:CMP AX,0(三)乘法指令:MUL、IMUL无符号数乘法:MUL SRC 功能:SRC为8位:(AX)(AL)*(SRC) SRC为16位:(DX,AX)(AX)*(SRC)带符号数乘法:IMUL SRC 功能:与MUL相同,只是带符号数。特点:1.目的操作数必是累加器,乘积固定存放。 2.SRC不能为立即数。 3.由操作数是否带符号来决定选用哪条指令。 (四)除法指令:DIV、IDIV、CBW、CWD无符号数除法:DIV SRC 功能:SRC为8位:(AX)/

23、(SRC)商(AL),余数(AH) SRC为16位:(DX,AX)/(SRC)商(AX),余数(DX)带符号数除法:IDIV SRC 功能:与DIV相同,只是带符号数。字节扩展为字:CBW 功能:(AL)为正,(AH)0 (AL)为负,(AH)FFH字扩展为双字:CWD 功能:(AX)为正,(DX)0 (AX)为负,(DX)FFFFH特点:1.寻址方式同乘法指令。 2.带符号数除法的余数符号与被除数符号相同。 3.除法指令前,被除数往往要先扩展。例:算术运算综合举例,计算:(N-(X*Y+Z-340)/X 其中X,Y,Z,N均为16位带符号数,已分别装入X,Y,Z,N单元中,要求运算结果的商存

24、入AX,余数存入DX寄存器中。程序如下: MOV AX,X ;X乘Y,结果存入BX,CX IMUL Y MOV CX,AX ;? MOV BX,DX MOV AX,Z ;Z扩展为双字,结果存入DX,AX CWD ADD CX,AX ;X*Y的积加Z,结果存入BX,CX ADC BX,DX SUB CX,340 ;再减340,结果存入BX,CX SBB BX,0 MOV AX,N ;N扩展为双字,结果存入DX,AX CWD SUB AX,CX ;N-(X*Y+Z-340),结果存入DX,AX SBB DX,BX IDIV X ;除X,结果存入DX(余数),AX(商)(五)十进制调整指令(简单介绍

25、) 二十进制(Binary Code Decimal,BCD码)数是一种用二进制编码表示的十进制数。它是用4位二进制数表示一位十进制数码,由于这4位二进制数的权分别为8、4、2、1,所以这种BCD码又称8421码。 BCD码的格式有两种:压缩的BCD码和非压缩的BCD码。压缩的BCD码用每4位二进制数表示一位十进制数码,整个十进制数形成为一个顺序的以4位二进制数为一组的二进制数串。非压缩的BCD码则以8位二进制数表示一位十进制数码,8位二进制数中的低4位是以8421码表示的十进制数码,而高4位则没有意义,如ASCII码。1压缩的BCD码调整指令 2非压缩的BCD码的调整指令 DAA 加法的十进

26、制调整指令 AAA 加法的ASCII调整指令 DAS 减法的十进制调整指令 AAS 减法的ASCII调整指令 AAM 乘法的ASCII调整指令 AAD 除法的ASCII调整指令三、位操作指令(一)逻辑运算指令:AND、OR、NOT、XOR、TEST 与:AND DST,SRC 功能:(DST)(DST)(SRC) 或:OR DST,SRC (DST)(DST)(SRC) 非:NOT OPR (OPR)(OPR)按位取反异或:XOR DST SRC (DST)(DST)(SRC)测试:TEST OPR1,OPR2 由(OPR1)(OPR2)的结果来设置标 志位,操作数不变,不保存结果。 例:AND AL,0FCH ;屏蔽(AL)中0,1位 OR AL,20H ;将(AL)中第5位置1 TEST AL,01H ;测试(AL)中数是奇数还是偶数?特点: 1.可对字或字节执行逻辑运算。 2.按位操作,操作数看成二进制位串(位间无进位、正、负、大小)。 3.非对标志位无影响,且不允许使用立即数。 4.AND可将目的操作数的特定位清0,源操作数中需清0的位设为0,其余位设为1。 OR可将目的操

温馨提示

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

评论

0/150

提交评论