汇编语言程序设计第三章.ppt
《汇编语言程序设计第三章.ppt》由会员分享,可在线阅读,更多相关《汇编语言程序设计第三章.ppt(63页珍藏版)》请在三一办公上搜索。
1、第3章 指令系统和寻址方式 汇编指令格式 寻址方式 8086指令系统 80X86及Pentium扩展指令,3.1 汇编指令格式,计算机中的一条指令通常包含两部分:依据操作数的个数划分,80X86CPU指令系统中的指令格式最常用的有:双操作数指令、单操作数指令和无操作数指令。,1、双操作数指令汇编格式及操作规定格式:标号:操作符OPD,OPS;注释操作规定:(1)OPD与OPS应为同种操作类型且类型明确,即同为字节类型或字类型。(2)OPD不能是立即数。(3)OPS和OPD不能同时为存储器操作数,即:或者是OPS和OPD中至少有一个为寄存器操作数,或者是OPD为存储器操作数,OPS为立即数。(4
2、)操作结束后,运算结果存入OPD中,OPS内容不变。,2、单操作数指令汇编格式及操作规定格式:标号:操作符OPD;注释操作规定:(1)OPD类型必须明确即为字节类型或字类型,不能是模糊类型。(2)操作对象为目的操作数,操作结束后结果存入OPD中。(3)OPD不能是立即数,只能是寄存器操作数或存储器操作数。,3、无操作数指令汇编格式及操作规定格式:标号:操作符;注释操作规定:指令中只有操作码,不含操作数,这 种指令有两种可能:(1)无需任何操作数。如停机指令、空操作指令等。(2)所需操作数是隐含指定的,操作时取固定操作数进行操作。,返回,3.2 寻址方式,寻找指令中所需操作数存放地址的方式或程序
3、转移时寻找转移地址的方式称为寻址方式,因而寻址方式分为两大类,一类是数据寻址方式,另一类是转移地址寻址方式。由于80X86指令涉及四种操作数:立即操作数、寄存器操作数、存储器操作数和隐含操作数,因此,数据寻址方式又可对应四种寻址方式,即:立即寻址、寄存器寻址、存储器寻址和固定寻址。,1、立即寻址 此寻址方式所提供的操作数直接包含在指令中,它紧跟在指令操作码后面,存放在存储器代码段中。立即操作数可以是8位,也可以是16位。汇编格式:n(n是用8位或16位二进制补码表示的有符号数)【例3.1】MOV AX,1234H 立即寻址方式用来表示常数,它常用于给寄存器赋初值。需要强调的是,立即寻址只能用于
4、源操作数,不能用于目的操作数。,2、寄存器寻址 此寻址方式的操作数直接存放在由指令指明的寄存器中。在汇编指令中直接书写寄存器名,如16位寄存器操作数可以是AX、BX、CX、DX、SI、DI、BP、SP、DS、ES、SS、CS等;8位寄存器操作数可以是AH、AL、BH、BL、CH、CL、DH、DL。汇编格式:R(其中R表示寄存器名)此寻址方式由于存取操作数直接从CPU内部寄存器中获得,不需访问存储器,因而指令执行的速度快。寄存器寻址既可用于源操作数,又可用于目的操作数,应用频率高。【例3.2】MOV DS,AX ADD CL,AH,3、存储器寻址 存储器寻址方式的操作数都是存放在存储器中,一般是
5、数据段、附加段、堆栈段中的存储单元。指令中给出的是存储单元的地址或产生存储单元地址的表达式。在汇编语言源程序中,存储单元地址是采用逻辑地址的形式表示的,即:段首址:段内偏移地址。段首址存放在某个段寄存器中,段内偏移地址是指存放操作数的存储单元与段起始地址(段首址)之间的距离(字节数),又可称为“有效地址”,记作EA。有效地址EA是由3个地址分量的某种组合求得,这3个地址分量是:位移量、基址、变址。这3个地址分量的不同组合,使形成有效地址EA的方法不同,相应有以下5种不同的存储器操作数寻址方式。,(1)直接寻址 直接寻址是最简单的存储器寻址,这种寻址,操作数的有效地址EA由指令直接给出。它主要用
6、于存取简单变量。汇编格式:(a)常量(b)变量或含有变量的表达式【例3.3】MOV AL,1000H MOV VAL,BX 对使用直接寻址方式需说明以下几点:操作数默认存放在数据段中,段寄存器DS在指令格式无须指定。若操作数在代码段、堆栈段或附加段中,则在指令格式中必须指定相应的段寄存器名。在操作数地址之前使用前缀指出段寄存器名,这种前缀称为段超越前缀。指令中操作数的EA即可以是一个数字,也可以是一个符号地址。当EA是一个数字时,一定要注意立即寻址方式与直接寻址方式的区别。直接寻址方式适合于处理存储器的单个存储单元。,(2)寄存器间接寻址 此寻址方式中,操作数的有效地址EA存放在SI、DI、B
7、X或BP四个寄存器之一中,即:EA(BX)或(BP)或(SI)或(DI)。汇编格式:R(其中R是寄存器SI、DI、BX、BP之一)SI、DI、BX、BP在这里叫间址寄存器。若用BX、SI或DI间址寻址时,则操作数默认在数据段中,且用DS内容作为段首址,操作数的物理地址为:(BX)PA(DS)16(SI)(DI)【例3.4】MOV DL,BX 若指令中使用BP间址寻址时,则操作数默认在堆栈段中,且用SS的内容作为段首址,操作数的物理地址为:PA(SS)16(BP)。【例3.5】MOV BP,AX,(5)基址加变址寻址 此寻址方式中操作数的有效地址EA是指令中的基址寄存器的内容、变址寄存器的内容、
8、位移量三个地址分量之和,即:EA(BX)(SI)位移量(BP)(DI)汇编格式:(a)Disp BX 或BPSI或DI(b)BX或BP SI或DIDisp 该寻址方式中若基址寄存器采用BX,则操作数默认在数据段中;若基址寄存器采用BP,则操作数默认在堆栈段中,因而操作数的物理 地址为:PA(DS)16(BX)(SI)Disp(DI)(SS)16(BP)(SI)Disp(DI),4、80X86扩充的寻址方式 上述讲的8种8086CPU的16位寻址方式同样适用于80X86CPU32位寻址方式,在这8种32位寻址方式中,只不过是立即数、寄存器、存储器有效地址扩充到32位,而且任意32位通用寄存器(E
9、AX、EBX、ECX、EDX、ESI、EDI、EBP、ESP)均可作为间址寄存器、基址寄存器或变址寄存器(变址寄存器ESP除外)。除此之外,80X86CPU32位寻址方式还提供了两种仅适用于32位CPU的寻址方式,即:比例变址寻址和基址加比例变址寻址,这两种寻址方式均属于存储器寻址方式中的一种,其操作数存放在存储器中。(1)比例变址寻址 由变址寄存器的内容乘以比例因子再加上位移量而得到操作数有效地址EA的寻址方式称为比例变址寻址,即:EA 变址寄存器 比例因子位移量。汇编格式:变址寄存器 比例因子位移量,其中:变址寄存器是EAX、EBX、ECX、EDX、ESI、EDI、EBP之一;比例因子可以
10、是1、2、4、8;位移量可以是0位、8位或32位。此寻址方式操作数默认在数据段,若操作数不在默认的数据段中时,则应使用段超越前缀明确指定。例如:MOVEAX,COUNT EDI*2;COUNT是位移量,2是比例因子其中乘以比例因子的操作是在CPU内部由硬件完成。(2)基址加比例变址寻址 由变址寄存器的内容乘以比例因子加上基址寄存器的内容再加上位移量而得到操作数有效地址EA的寻址方式称为基址加比例变址寻址。即:EA 变址寄存器 比例因子 基址寄存器 位移量。若基址寄存器采用EBP、ESP时,则操作数默认在SS段中,若基址寄存器采用除EBP、ESP以外的其他寄存器时,则操作数默认在DS段中。若操作
11、数不在相应的默认段中时,则应使用段超越前缀明确指定。例如:MOV ESI*4EDX,EAX;目的操作数在DS段中,5、转移地址寻址方式 转移地址寻址方式确定的是转移指令或调用指令转移后的地址。可将转移地址寻址方式分为四种:段内直接寻址、段内间接寻址、段间直接寻址和段间间接寻址。(1)段内直接寻址 段内直接寻址又称为段内相对寻址。在此寻址方式下,转移后的指令与转移指令本身在同一代码段中。转移后指令的有效地址EA(IP)位移量。若位移量为正,则相对本指令向后转移,若为负,则相对本指令向前转移。汇编格式:(a)SHORT标号(b)NEARPTR标号其中:标号是符号地址。例如:JMPSHORTNEXT
12、JMPNEARPTRL1,(2)段内间接寻址 转移有效地址是一个字寄存器或是一个字存储单元的内容。这个字寄存器或字存储单元的内容可以用数据寻址方式中的寄存器寻址或存储器寻址获得,所得到的转移有效地址用来取代当前的IP值实现段内间接寻址。这种寻址方式只适用于JMP和CALL指令。汇编格式:(a)R(R为16位通用寄存器)(b)存储器寻址方式之一 若JMP和CALL指令采用格式(a),即寄存器寻址,则指令中指定的寄存器内容便是转移地址,当CPU执行JMP或CALL指令时,就将该寄存器的内容装入IP。若JMP和CALL指令采用格式(b)中的一种存储器寻址时,则转移地址便是字存储单元的内容,当CPU执
13、行JMP或CALL指令时,就将该字存储单元的内容装入IP。,(3)段间直接寻址此寻址方式,转移后的指令与转移指令本身不在同一代码段中。转移地址(即IP和CS值)由指令直接给出。汇编格式:FARPTR标号它只适用于JMP和CALL指令。例如:JMPL2(标号L2与本JMP指令不在同一代码段中)。(4)段间间接寻址此寻址方式也只适用于JMP和CALL指令。转移后的指令与转移指令本身不在同一代码段中。转移地址(即IP和CS值)由采用存储器寻址方式之一确定的双字存储单元内容间接给出。汇编格式:存储器寻址方式之一执行JMP或CALL指令时,根据指令中指定的某种存储器寻址方式找到内存的一个双字(32位),
14、将高字内容装入CS,将低字内容装入IP,实现段间转移。例如:JMPDWORDPTR BX,返回,3.3 8086指令系统,8086指令系统按功能可分为六大类:(1)数据传送类指令(2)算术运算类指令(3)位操作指令(4)串操作指令(5)控制转移指令(6)处理器控制指令8086指令按操作数个数可划分为三种类型:(1)双操作数指令(2)单操作数指令(3)无操作数指令学习汇编指令应从以下几方面着重理解掌握:(1)学习指令格式;(2)掌握指令中操作数的寻址方式及寻址方式的搭配规则;(3)掌握指令的功能及指令执行后对条件码的影响;(4)学习如何正确运用指令。,一、数据传送指令,1通用数据传送指令(1)传
15、送指令MOV格式:MOVOPD,OPS功能:把源操作数传送到目的操作数。即:OPD(OPS)说明:源操作数和目的操作数的操作类型必须明确且一致;当指令中只有一个操作数的类型明确时,另一个操作数被视为同一类型;当两操作数类型均不明确时,必须用“BYTEPTR”或“WORDPTR”将一个存储器操作数定义为字节或字类型。指令执行后,源操作数内容不变。指令执行后,对标志寄存器各位无影响。源操作数可以是通用寄存器、段寄存器、存储器和立即数;目的操作数也可以是通用寄存器、段寄存器、存储器,但立即数、CS段寄存器不能作为目的操作数。源操作数和目的操作数不能同时为存储器操作数。,用一条MOV指令能实现:(a)
16、立即数传送到通用寄存器或存储单元 如MOVDL,a、MOVAX,1FA4H(b)寄存器之间的传送 如MOVAX,BX、MOVAL,DH、MOVDS,AX(c)寄存器与存储单元之间的传送 如MOVDL,BUFBYTE MOV WORD PTR BX+SI,AX 由于MOV指令中只允许一个操作数在存储器中,因此用一条MOV指令无法完成两个存储单元之间的数据传送,但可以用二条指令来实现。【例3.9】把BUFWORD1字单元内容传送到BUFWORD2字单元中,可用以 下指令完成:MOV AX,BUFWORD1 MOV BUFWORD2,AX,(2)交换指令XCHG 格式:XCHGOPD,OPS 功能:
17、源操作数和目的操作数的内容相互交换。即:(OPD)(OPS)说明:该指令与MOV指令相似,但在功能上有两点区别,其一,该指令不允许使用立即数和段寄存器作为操作数;其二,该指令改变源操作数的内容。(3)查表转换指令XLAT 格式:XLAT或XLATOPS 功能:将(BX)为首址(AL)为位移量的字节存储单元中的数据 传送到AL中。即:AL(BXAL)字节,2地址传送指令 地址传送指令主要用于将存储器操作数地址(偏移地址、段地址)传送给指定的寄存器。它包括3条指令:LEA、LDS和LES。(1)传送有效地址指令LEA 格式:LEAREG16,OPS 功能:将源操作数的有效地址EA传送给目的操作数指
18、定的16 位通用寄存器。说明:源操作数必须是存储器操作数,即OPS采用存储器寻址;目的操作数必须是一个16位通用寄存器。本指令对标志位无影响。该指令通常用来建立内存储器的寄存器指针。,(2)传送偏移地址及数据段首址指令LDS 格式:LDSREG16,OPS 功能:将由源操作数确定的双字存储单元的内容传送给DS及目的操 作数指定的16位通用寄存器中,其中高字单元的内容送给 DS,低字单元的内容送给REG16。说明:源操作数必须是双字存储器操作数,即:OPS采用存储器 寻址,寻找到相继4个字节的存储单元,低字单元中存放 偏移地址,高字单元中存放段首地址;目的操作数必须是 一个16位通用寄存器,通常
19、特定为SI。本指令不影响标志位。(3)传送偏移地址及附加段首址指令LES 格式:LESREG16,OPS 功能:将由源操作数确定的双字存储单元的内容传送给ES及目的操 作数指定的16位通用寄存器中,其中高字单元的内容送给 ES,低字单元的内容送给REG16。说明:同LDS指令。,3标志位传送指令 标志位传送指令有4条指令,即:LAHF、SAHF、PUSHF和POPF。(1)标志送AH指令LAHF 格式:LAHF 功能:将标志寄存器低8位的内容送入AH寄存器。即:AH(FLAGS)7-0,该指令的执行不影响标志位。(2)AH标志送指令SAHF 格式:SAHF 功能:将AH寄存器的内容送入标志寄存
20、器低8位,高8位保持不变。该指令用于设置或恢复SF、ZF、AF、PF、CF五个标志位,该指令的执行只影响标志寄存器的低8位,对高8位(即OF、DF、IF、TF)标志位无影响。从指令的功能上可看出,SAHF和LAHF为互逆过程。,(3)标志进栈指令PUSHF 格式:PUSHF 功能:将标志寄存器的内容压入堆栈。(4)标志出栈指令POPF 格式:POPF 功能:将栈顶字单元内容弹出到标志寄存器中。该指令的执行影响标志位。PUSHF和POPF互为逆过程。标志位传送指令中SAHF和POPF指令将直接影响标志寄存器的内容。利用这一特性,可以方便地改变标志寄存器中指定位的状态.数据传送类指令还包括输入/输
21、出专用指令,在PC机里所有I/O端口与CPU之间的通信都由IN和OUT指令实现,由IN指令完成从I/O端口到CPU的信息传送,由OUT指令完成从CPU到I/O端口的信息传送。,二、算术运算指令,算术运算指令用来执行加、减、乘、除四则运算。它包括无符号数、有符号数的二进制算术运算指令和十进制算术运算调整指令。1二进制数算术运算指令(1)加法运算指令加法运算指令包括ADD、ADC的INC三条指令。加法指令ADD 格式:ADDOPD,OPS 功能:将目的操作数与源操作数相加,结果存入目的地址中,而源 操作数不变。即:OPD(OPD)(OPS)。说明:该指令的源操作数或在通用寄存器或在存储单元中,也可
22、以是立即数,而目的操作数只能在通用寄存器或存储单元中,不能是立即数,且两操作数不能同时为存储器操作数;操作数可以是字节或字,且两操作数的类型明确并一致。该指令相加后,根据得到的结果设置标志寄存器的OF、SF、ZF、CF、AF和PF标志位。ADD指令执行后对标志位的影响及作用如下,这里我们只重点说明OF、CF、SF和ZF四个标志位。,OF:当两个有符号数相加时,若两个操作数的符号相同,而结 果的符号与之相反,则OF1,否则,其余情况OF0。当OF1时,说明两个有符号数相加产生了溢出,即和的 值超出了有符号数的有效范围。在把操作数视为有符号数 时,可通过该标志了解加法结果是否正确。CF:运算过程中
23、当最高位产生进位时,则CF1,否则,CF0。当CF1时,说明运算结果超出了无符号数的表示范围。在把操作数视为无符号数时,可通过该标志了解加法结果 是否正确。SF:运算结果的最高位为1,则SF1,否则,SF0。ZF:运算结果为零时,则ZF1;否则,ZF0。,带进位加法指令ADC 格式:ADCOPD,OPS 功能:与ADD指令基本相同,惟一区别是将该指令执行前的CF值 加至目的操作数中。即:OPD(OPD)(OPS)CF 说明:该指令与ADD指令在功能上及结果对标志位影响上基本相 同。该指令主要用于多字节的加法运算。加1指令INC 格式:INCOPD 功能:将目的操作数加1后送回目的地址中,并根据
24、执行结果设 置标志位OF、SF、ZF、AF、PF,但不影响CF位。说明:该指令的操作数可以是字或字节且类型必须明确。其操作 数只能在通用寄存器或存储单元中,不能是立即数。该指 令执行后对OF、SF、ZF、AF、PF标志位的影响与ADD指令 相同。INC主要用于计数器的计数或修改地址指针。,(2)减法运算指令 减法运算指令包括SUB、SBB、DEC、NEG和CMP五条指令。减法指令SUB 格式:SUBOPD,OPS 功能:目的操作数减去源操作数,其差值存入目的地址,源操作 数不变,即:OPD(OPD)(OPS)。并按相减的结果设 置标志位OF、CF、SF、ZF、AF和PF。说明:该指令的源操作数
25、和目的操作数可以在通用寄存器或存储单元中,但两者不能同时在存储器中,立即数可作为源操作数,而不能作为目的操作数。两操作数可以是字节或字,且类型明确一致。SUB指令执行后对标志位的影响与ADD指令类似,下面仅说明CF和OF两位的设置情况及作用:OF:当两个有符号数相减时,若两个操作数的符号相反,而结果的 符号与减数相同,则OF1,否则,其余情况OF0。OF1时,说明有符号数减法溢出,结果是错误的。OF位可用来 判断有符号数相减,结果是否正确。CF:当两无符号数相减时,若减数大于被减数,则此时有借位,CF1,否则CF0,CF值反映了无符号数相减时是否有借位。,带借位减法指令SBB 格式:SBBOP
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编语言 程序设计 第三
链接地址:https://www.31ppt.com/p-5381862.html