【文档说明】第5章一台计算机的数据处理能力--80X86型微处理器具有的寻址方式及指令系统-课件.ppt,共(75)页,949.521 KB,由小橙橙上传
转载请保留链接:https://www.ichengzhen.cn/view-76732.html
以下为本文档部分文字说明:
指令的基本概念指令和指令系统CISC和RISC指令的结构和分类指令中的数据类型指令的寻址方式指令中操作数的寻址方式指令的基本概念能够在计算机硬件平台上运行的程序是由一系列的机器指令组成的,机器指令通常简称指令。软件的功能借助指令的集合来实现,
而指令可以直接由硬件执行在IA-32系列的CPU中,包含了由大量的具有各种各样作用的指令构成的指令系统。在IA-32CPU中,在实地址模式下,采用16位指令模式(16位寄存器和16位偏移量);采用
32位指令模式(32位寄存器和32位偏移量)一台计算机中所有机器指令的集合,称为这台计算机的指令系统。70年代末期,计算机硬件结构随着VLSI技术的飞速发展而越来越复杂化,大多数计算机的指令系统多达几百条。我们称这些计算机为复杂指令系统计算机,简称CISC。如
此庞大的指令系统不但使计算机的研制周期变长,难以保证正确性,不易调试维护,而且由于采用了大量使用频率很低的复杂指令而造成硬件资源浪费。所以在1989年随着80486DXCPU计算机的诞生,人们又提出了便于VLSI技术实现的精简指令系统计算机,简称RISC,有效地减少了指
令的执行周期。而且它以RISC技术为基础,通过几条RISC指令和并行流水线方式来支持经典的CISC型指令。同时由于组成指令周期的机器周期变得很规整,所以可以用组合逻辑控制器代替微程序控制器来提高CPU处理速度
。0B0E:010020740AAND[SI+0A],DH0B0E:0103803C3FCMPBYTEPTR[SI],3F0B0E:01067514JNZ011C0B0E:010883F901CMPCX,+010B0E:010B760FJBE011C0B0E:010D8A07MOVAL,[BX
]0B0E:010FAASTOSB0B0E:011043INCBX0B0E:011146INCSI0B0E:011249DECCX0B0E:0113FEC4INCAH0B0E:01158A07MOVAL,[BX]0B0E:01173C20CMPAL,200B0E:01197401JZ011C0B0
E:011BAASTOSB0B0E:011C3400XORAL,000B0E:011EFDSTD0B0E:011F0AF6ORDH,DH(CS:IP)指令字指令的注释符一个较完善的指令系统,应当包括数据传
送类指令、算术运算类指令、逻辑运算类指令、程序控制类指令、输入输出指令、字符串类指令、系统控制类指令。1、数据传送指令:数据传送指令主要包括取数指令、存数指令、传送指令、成组传送指令、字节交换指令、清累加器指令、堆栈操作指令等等,这类指令主要用
来实现主存和寄存器之间,或寄存器和寄存器之间的数据传送。2、算术运算指令:这类指令包括二进制定点加、减、乘、除指令,浮点加、减、乘、除指令,求反、求补指令,算术移位指令,算术比较指令,十进制加、减运算指令等。
这类指令主要用于定点浮点的算术运算,大型机中有向量运算指令,直接对整个向量或矩阵进行求和、求积运算。3、逻辑运算指令:这类指令包括逻辑加、逻辑乘、按位加、逻辑移位等指令,主要用于无符号数的位操作、代码的转换、判断及运算。典型指令4、程序控制指令:程序控制指令也称
转移指令。计算机在执行程序时,通常情况下按指令计数器的现行地址顺序取指令。但有时会遇到特殊情况:机器执行到某条指令时,出现了几种不同结果,这时机器必须执行一条转移指令,根据不同结果进行转移,从而改变程序原来执行的顺序。这种转移指令称为条件转移指令。转移条件来自
于程序状态字(标志)寄存器PSW如下特征位:进位标志(C)、结果为零标志(Z)、结果为负标志(S)、结果溢出标志(V)等。5、输入输出指令:主要用来启动外围设备,检查测试外围设备的工作状态,并实现外部设备
和CPU之间,或外围设备与外围设备之间的信息传送。(单独编址和统一编址)6、字符串处理指令:是一种非数值处理指令,一般包括字符串传送、字符串转换(把一种编码的字符串转换成另一种编码的字符串)、字符串比较、字符
串查找(查找字符串中某一子串)、字符串抽取(提取某一子串)、字符串替换(把某一字符串用另一字符串替换)等。这类指令在文字编辑中对大量字符串进行处理。7、特权指令:是指具有特殊权限的指令。由于指令的权限量大,
若使用不当,会破坏系统和其他用户信息。因此这类指令只用于操作系统或其他系统软件,一般不直接提供给用户使用。在多用户、多任务的计算机系统中特权指令必不可少。它主要用于系统资源的分配和管理,包括改变系统工作方式,检测用户的访问权限,修改虚拟存储器管理的段表
、页表,完成任务的创建和切换等。8、其他指令:除以上各类指令外,还有状态寄存器置位、复位指令、测试指令、暂停指令、空操作指令,以及其他一些系统控制用的特殊指令。4.2指令格式表示一条指令的机器字,就称为指令字,通常简称指令。一条指令字的二进制位数称为指令字长,一般采
用可变的指令字长指令格式,则是指令字用二进制代码表示的结构形式。一条指令的结构可用如下形式来表示:操作码和地址码两部分组成。4.2.1操作码(固定长度的操作码、可变长度的操作码)指令的操作码表示该指令应进行什么性质的操作,如进行加法、减法、乘法、除法、取数、存数等等。组成操作码字
段的位数一般取决于计算机指令系统的规模。操作码字段地址码字段指令名称符号指令机器指令(用十六进制表示)指令助记符符号地址条件转移JZNEXT7409H增量INCCX41H减量DECCX49H入栈PUSHAX50H出栈POPAX58H比较CM
PSTRING[BX],0DH80BF04000DH加法ADDSI,283C602H传送MOVINDEX,BL881E0A00H转子程序CALLDISPLAYE82A00H表4.2典型的符号指令与其相对应的机器指令的结构形式指令名
称指令助记符二进制操作码(用十六进制表示)条件转移JZ74H增量INC41H减量DEC49H入栈PUSH50H出栈POP58H比较CMP80H加法ADD83H传送MOV88H转子程序CALLE8H表4.3部分典型指令的助记符与其相对
应的二进制操作码4.2.2地址码根据一条指令中有几个操作数地址,可将该指令称为几操作数指令或几地址指令。目前二地址和一地址指令格式用的最多。l零地址指令(无操作数)的指令字中只有操作码,而没有地址码。a.无操作数的控制操作如空操作指令、停机指令等。b.隐含操作数的
操作例如,在8086/8088指令系统中,字节转换字指令CBW,其源操作数隐含为AL的内容;字转换双字指令CWD,其源操作数隐含为AX的内容,又比如IBMPC的指令系统中下面的几条操作标志寄存器有关的指令:LAHF、SAHF、PU
SHF、POPFl单地址指令常称为单操作数指令。a.比如压栈和弹出栈有关的两条指令PUSHaxPOPaxb.地址码所指定的操作数为源操作数在这种情况下,累加器AX的内容为目标操作数,其操作如下8位和16位微型机的操作数单地址指令都采用这种操
作方式。Muldiv等指令二地址指令常称双操作数指令,它有两个地址码字段A1和A2,分别指明参与操作的两个数在内存中或运算器通用寄存器的地址,因此包括在寄存器—寄存器型,寄存器—存储器型和存储器—存储器型三类指令。这些指令的特点
是:执行速度越来越慢,但是数据处理能力越来越强。其中地址A1兼做存放操作结果的地址。(大多数指令都是二地址指令)(A1)OP(A2)→A1比如:MOVAX,[054CH]l三地址指令字中有三个顺序的操作数地址A1,A2和A3。(比较少,
往往可以实现复杂的功能)(A1)OP(A2)→A3比如在80C51单片机的指令系统中比较转移类指令CJNEA,DIRECT,REL指令中的数据类型字节类型:有符号整数用补码表示,在MASM汇编语言中使用DB、BYTE伪指令定义字节数据。
如:data1db254字类型:在IA-32计算机中,一个字由二个字节组成,其低位字节放在低地址单元,高位字节放在高地址单元。称为小尾方式。如:data1dw2544双字类型:在IA-32计算机中,一个字由四个字节组成,其低位字节放在低地址
单元,高位字节放在高地址单元。例如乘法后的乘积或除法前的被除数都是以双字出现的。如:data1dd254400内存访问的实模式:(即实地址访问模式)它是Intel公司80286及以后的x86(80386,80486和80586等)兼容处理器(
CPU)的操作模式之一。实模式被特殊定义为在32位地址中使用20位地址的内存可访问空间,这就意味着它可访问的最大内存空间为1MB(物理内存和BIOS-ROM),软件可通过这些地址直接访问BIOS程序和外围硬件。实模式下处理器多道任
务的工作模式。但是为了向下兼容,所以80286及以后的x86系列兼容处理器仍然是开机启动时工作在实模式下。80186和早期的处理器仅有一种操作模式,就是后来我们所定义的实模式。实模式虽然能访问到1M的地址空间,但是由于
BIOS的映射作用(即BIOS占用了部分空间地址资源),所以真正能使用的物理内存空间(内存条),也就是在640k到924k之间。1M地址空间组成是由16位的段地址和16位的段内偏移地址组成的。用公式表示为:物理地址=左移
4位的段地址+偏移地址。内存访问的保护模式保护模式:经常缩写为p-mode,在InteliAPX286程序员参考手册中(iAPX286是Intel80286的另一种叫法)它又被称作为虚拟地址保护模式。尽管在Intel80286手
册中已经提出了虚地址保护模式,但实际上它只是一个指引,真正的32位地址出现在Intel80386上。保护模式本身是80286及以后兼容处理器序列之后产成的一种操作模式,它具有许多特性设计为提高系统的多道任务和系统的稳定性。例如内存的保护(限长寄存器),分页机制(页表寄存器)和硬件虚拟存储
(MMU)的支持。现代多数的x86处理器操作系统都运行在保护模式下。•内存的组织结构(以奔腾CPU芯片为例)在16位模式下的系统中,CPU的寄存器和数据总线的位数都是16位长,但是地址总线却为20根,因此对内存的寻址可以达到1MB
。在16位模式的系统中,如何把20位地址集合影射到16位的地址集合上面呢?方法就是把内存分段:把连续的20位的地址空间按照低四位为0000B的原则分割成段,因此最多可以被分割成216个段,由此“段的寻址”就可以通过16位寄存器实现了,而16位模式下的内存段最大空间也不超过216B,
由此”段内的寻址也可以通过16位寄存器实现了。在16位模式的系统中,一方面为了规范管理内存的使用,一个程序最多由四段组成,分别是代码段、数据段、堆栈段和附加段。每个段的起始地址低四位为0,所以分别把它们的高16位存储在CS、DS、SS、ES,叫做
段基址(寄存器)。而每个段内的地址只能保存在非段基址寄存器中。•内存的组织结构(以奔腾CPU芯片为例)1、逻辑地址:在程序设计中通常使用逻辑地址,逻辑地址包含段基址和段内偏移量,它们都是无符号的16位二进制数据。其中段基址由CS、
DS、SS、ES分别提供,而偏移量由IP或者EU(按照不同的寻址方式根据指令中给出有效地址计算得到)的提供。2、物理地址:把段基址的值左移4位变成20位后,加上EU有效地址得到。3、寻址方式:指令
中有效地址的提供方式。数据的存储结构决定着数据的寻址方式,数据的寻址方式依赖着CPU中相应的寄存器(基址、变址等寄存器)4.3.1指令的寻址方式:顺序寻址方式、跳跃寻址方式•顺序寻址方式:由于指令地址
在内存中按顺序安排,当执行一段程序时,通常是一条指令接一条指令的顺序进行,这种程序顺序执行的过程,我们称为指令的顺序寻址方式。•跳跃寻址方式:当程序改变执行的顺序时,指令的寻址就采取跳跃寻址方式。所谓跳跃,是指下条指令的地址码不是由程序计数器给出,而是由本条指令
给出。(教材69页的相对寻址)(1)立即寻址方式*——操作数在指令中给出MOVAL,5MOVAX,3064HMOVAL,‘A’*只能用于SRC字段*SRC和DST的字长一致MOVAH,3064H汇编语句操作数长度操作MOVBL,448位把十进制数44(2CH)
传送到BL中MOVAX,44H16位把十六进制数44H传送到AX中MOVAL,‘A’8位把A的ASCII码41H传送到AL中MOVEBX,12340000H32位把十六进制数12340000H传送到EBX中MOVESI,1232位把十进制数12(0CH)传送到ESI中
表4.4使用立即数寻址的MOV指令例子在应用上,通常利用立即寻址方式给寄存器或内存单元赋初值;注意:立即数只能作为源操作数,不能作为目的操作数,并且只能是常数值。4.4.2寄存器寻址方式此寻址方式下,操作数存放在CPU的某个通用寄存
器中,而指令中指出了该寄存器。(注:寄存器寻址方式可以引用8个8位的通用寄存器AL、AH、BL、BH、CL、CH、DL、DH,也可以引用8个16位的通用寄存器AX、BX、CX、DX、BP、SP、SI、DI,还可以引用8个32位的通用寄存器EAX、EBX、ECX、EDX、EBP、E
SP、ESI、EDI。)(2)寄存器寻址方式*——操作数在指定的寄存器中MOVAX,BXMOVAL,BHMOVAX,3064H*字节寄存器只有AHALBHBLCHCLDHDL*SRC和DST的字长一致MOVAH,BX*
CS不能用MOV指令改变MOVCS,AX(3)直接寻址方式*——有效地址EA由指令直接给出例:MOVAX,[2000H]EA=2000H,假设(DS)=3000H,那么PA=32000H*隐含的段为数据段DS*可使用段跨越前缀MOVAX,ES:[2000H]*操作数地址可由变量(符号地址)表示V
ALUEDB10MOVAH,VALUEMOVAX,VALUEMOVAX,WORDPTRVALUE503032000AHAL3050(AX)=3050H汇编语句操作数长度操作MOVDH,[1000H]8位把DS段中
偏移地址1000H单元的内容装入DH中MOVCX,DATA116位把DS段中偏移地址为DATA1和DATA1+1的两单元的内容装入CXMOVES,DATA216位把DS段中偏移地址为DATA2和DATA2+1的两单元内容装入ESMOVVALUE,EAX32位EAX内容传
到DS段中偏移地址为VALUE至VALUE+3的4个单元MOVEDI,SUM132位把DS段中偏移地址为SUM1至SUM1+3的4个单元内容装入EDI表4.6使用直接寻址的MOV指令例子(4)寄存器间接寻址*——EA在基址寄存器(BX/BP)或变址寄存器(SI/DI)
中MOVAX,[BX]PA=16d(DS)+(BX)MOVAX,ES:[BX]PA=16d(ES)+(BX)MOVAX,[BP]PA=16d(SS)+(BP)*不允许使用AX、CX、DX存放EAMOVAX,[CX]*SRC和DST的字长一致MOVDL,[BX];[BX]指示一个字节单元MO
VDX,[BX];[BX]指示一个字单元*适于数组、字符串、表格的处理汇编语句操作数长度操作MOV[BP],DL8位寄存器DL的内容传到SS段由BP寻址的存储单元MOV[DI],BH8位寄存器BH的内容传
到DS段由DI寻址的存储单元MOVAL,[EDX]8位DS段由EDX寻址的存储单元的内容传送到ALMOVCX,[BX]16位DS段中用BX寻址的存储单元的字内容传到CX中MOVECX,[EBX]32位DS段由EBX
寻址的存储单元的双字传送到ECX表4.7使用寄存器间接寻址的MOV指令例子有效地址=(BX)(BP)8位(SI)16位(DI)+位移量(5)寄存器相对寻址方式*例:MOVAX,COUNT[SI]或MOVAX,[COUNT+SI]假设(DS)=3000H,(S
I)=2000H,COUNT=3000H,那么PA=35000H假设(35000H)=1234H,那么(AX)=1234H*适于数组、字符串、表格的处理汇编语句操作数长度操作MOVARRAY[SI],BL8位BL的内容送入由ARRAY+SI寻址的DS段
存储单元MOVLIST[SI+2],CL8位CL的内容送入由LIST+SI+2之和寻址的DS段存储单元MOVAX,[DI+100H]16位由DI+100H寻址的DS段存储单元的字装入AXMOVDI,SETIT[BX]16位由SETIT+BX寻址的DS段存储单元的内容送入DIMOVDL,[
EAX+10H]16位由EAX+10H寻址的DS段存储单元的内容装入DIMOVARRAY[EBX],EAX32位EAX内容送入由ARRAY+EBX寻址的DS段存储单元中表4.8使用寄存器相对寻址的MOV指令例子(6)基址变址寻址方式*MOVA
X,[BX][DI]或MOVAX,[BX+DI]MOVAX,ES:[BX][SI]*适于数组、字符串、表格的处理*必须是一个基址寄存器和一个变址寄存器的组合MOVAX,[BX][BP]MOVAX,[SI][DI]有效地址=(BX)(
SI)(BP)(DI)+汇编语句操作数长度操作MOVDH,[BX+DI+20H]8位由BX、DI和20H之和寻址的DS段存储单元的内容装入DHMOVLIST[BP+DI],CL8位CL送到由LIST、BP及DI之和寻址的
SS段存储单元中MOVLIST[BP+SI+4],DH8位DH送到由LIST、BP、SI及4之和寻址的SS段存储单元中MOVAX,FILE[BX+DI]16位由FILE、BX及DI之和寻址的DS段存储单
元的内容送入AXMOVEAX,FILE[EBX+ECX+2]32位由FILE、EBX、ECX及2之和寻址的DS段存储单元的内容装入EAX表4.9使用基址变址寻址的MOV指令(7)相对基址变址寻址方式MOVAX,MASK[BX][SI]或MOVAX,MASK[BX+SI]或MOVAX,[MAS
K+BX+SI]有效地址=(BX)(SI)8位(BP)(DI)16位++位移量例:编写一段显示字符串STRING的程序DATASEGMENTSTRINGDB‘HAPPYNEWYEAR!’,0DH,0AH,‘$’COUNTDW17DATAENDS(1)直接寻址movdl,stringmo
vah,2int21h;显示字符‘H’movdl,string+1movah,2int21h;显示字符‘A’…...(2)寄存器间接寻址movcx,count;movcx,17movbx,offsets
tring;string的偏址bxnext:movdl,[bx]movah,2int21h;显示一个字符incbxloopnext;循环指令(3)寄存器相对寻址movcx,count;movcx,17movsi,0next:movdl,strin
g[si];movdl,[string+si]movah,2int21h;显示一个字符incsiloopnext;循环指令(4)基址变址寻址movcx,count;movcx,17movbx,offsetstring;string的偏址bxmovsi,0next:movdl,[bx
][si];movdl,[bx+si]movah,2int21h;显示一个字符incsiloopnext;循环指令(5)DOS显示字符串功能movdx,offsetstring;string的偏址dx;
leadx,stringmovah,9int21h;显示一串字符典型的寻址方式有:l立即寻址:指令的地址字段指出的不是操作数的地址,而是操作数本身,这种寻址方式称为立即寻址。教材101页图4-6.这种寻址方式经常出现在双地址指令中的源操作数的位置,用于给寄存器赋值如在以下指令中的MOVAL,2
5;MOVBX,“AB”;MOVDX,5CH源操作数的寻址方式l直接寻址:在指令格式的地址字段中直接指出操作数在内存中的有效地址,即操作数地址在指令中:EA=D教材102页。例如:MOVBX,DS:[1000H];MOVBX,VAR(符号
地址隐含为DS,其它段必须明显指出)见下图;l寄存器(直接)寻址:操作数在指令中所给出的寄存器中(通用寄存器和段寄存器)的寻址方式,比如在以下程序段中MOVAX,23MOVBX,15ADDAX,BX的ADD中的源操作数和目的
操作数的寻址方式。间接寻址:是相对于直接寻址而言的,在间接寻址的情况下,指令地址字段中的形式地址D不是操作数的真正地址,而是操作数地址的指示器,或者说D单元的内容才是操作数的有效地址。即操作数地址在内存中:E
A=(D),比如:movax,[[045ch]]寄存器间接寻址:操作数的有效地址EA直接从基址寄存器(BP、BX)或变址寄存器(SI、DI)中获得,若以BX、SI、DI间接寻址时候,隐含的段寄存器为DS,若以BP间
接寻址,则隐含使用的段寄存器为SS。比如:MOVCH,[SI]见下图l寄存器相对寻址(变址相对寻址、基址相对寻址):把CPU中某个变址寄存器SI、DI(基址寄存器:BX、BP)寄存器的内容与偏移量D相加来形成操作数的有效地址
,即操作数地址为变址寄存器的内容与偏移量D之和,即EA=(R)变址+D若以BX、SI、DI间接寻址时候,隐含的段寄存器为DS,若以BP间接寻址,则隐含使用的段寄存器为SS例如指令:见下图基址变址寻址方式:操作数的有效地
址EA由基址寄存器和变址寄存器和位移量相加得到。若以BX为基地址寄存器,隐含的段寄存器为DS,若以BP为基地址寄存器,则隐含使用的段寄存器为SS例如:如:AX,200H[BX][SI]复习题(补充)例B:某微机的指
令格式如下所示:15109870D:位移量X:寻址特征位X=00:直接寻址;X=01:用变址寄存器X1进行变址;X=02:用变址寄存器X2进行变址;X=11:相对寻址设(PC)=1234H,(X1)=0037H,(X2)=1122H(H代表十六进
制数),请确定下列指令的有效地址。(1)4420H(2)2244H(3)1322H(4)3521H(5)6723H操作码XD解:(1)X=00,D=20H,有效地址EA=20H;(2)X=10,D=44H,有效地址EA=112
2H+44H=1166H;(3)X=11,D=22H,有效地址EA=1234H+22H=1256H;(4)X=01,D=21H,有效地址EA=0037H+21H=0058H;(5)X=11,D=23H,有效地址EA=1234H+23H=1257H;复习题(补
充)复习题(补充)10、分别指出下列各8086/8088指令中源操作数和目的操作数的寻址方式(1)寄存器(直接)寻址立即数寻址(2)寄存器(直接)寻址直接寻址(3)寄存器(间接)寻址寄存器(直接)寻址(4)寄存器(直接)寻址相对(间接)基址变址寻址(5)寄存器(直接)寻址基址变址寻址
(6)寄存器(间接)寻址立即数寻址(7)寄存器(直接)寻址(8)寄存器(直接)寻址相对基址寻址(9)寄存器(直接)寻址寄存器(间接)寻址(10)寄存器(直接)寻址寄存器(直接)寻址12、判断对错(1)对(2)错:DS作为代码段基址寄存器,只能接收AX传来的数据
(3)对(4)错:LEA为把源操作数的有效地址传送给目的操作数,所以源操作数不应该是立即数等非存储器的寻址方式。(5)错,ADD指令不能在一个指令周期中完成来自存储器的两个操作数的相加运算(6)错,MUL指令为隐含目的操作数的指令,默认的目的
操作数为寄存器AL(AX)(7)错,SHL为逻辑左移指令,当移位次数超过1时,次数要使用CL寄存器提供,不能用立即数等其它方式。(8)对(9)错:MOV指令在一个指令周期中不能完成两个内存单元之间的数据传送(1
0)对传送类指令1、数据传送指令movMoval,01fMovax,2345hMovda_byte,ofehMovary[bx],1234h注意:不影响如下状态标志位:进位(CF)、溢出(OF)、奇偶(PF)、符号标志位(SF
)、辅助进位标志位(AF)、零标志位(ZF)传送类指令2、交换指令xchgXCHGAL,BLXCHGAX,BXXCHGAX,ary[bx]注意:不影响如下状态标志位:进位(CF)、溢出(OF)、奇偶(PF)、符号标志位(SF)、
辅助进位标志位(AF)、零标志位(ZF)传送类指令3、取标志位指令LAHF指令功能:AH(FR)7~0SFZFAFPFCFAHFR低8位01234567传送类指令4、存标志位指令SAHF指令功能:AH(FR)7~0注意:影响如下状态标志位:FR中的标志位分布(由低到高):
第零位为进位(CF)、第二位为奇偶(PF)、第四位为辅助进位标志位(AF)、第六位为零标志位(ZF)、第七位为符号标志位(SF)MOVAH,11000000BSAHF传送类指令5、标志压栈指令PUSHF指令功能:SP(SP)-2栈顶字单元(FR)
注意:不影响如下状态标志位5、标志出栈指令POPF指令功能:栈顶字单元(FR)SP(SP)+2注意:影响所有标志位传送类指令6、装入有效地址指令LEA指令格式:LEADEST,SRC指令功能:将SRC的有效地址传送到目的16位通用寄存器中。
注意:不影响标志位7、装入地址指针指令LDS(LES)指令格式:LDSDEST,SRC指令功能:DEST(SRC)DS(ES)(SRC+2)算术运算类指令.加法指令1)不带进位加法指令ADD格式:ADDOPD,OPS执行的操作:OPD+OPS→O
PD例如:ADDBX,SIADDDA_WORD,0F8CHADDDL,TAB[BX]注意:对标志寄存器AF、CF、SF、ZF、OF、PF有影响标志寄存器OFoverflowflag溢出标志操作数超出机器能表示的范
围表示溢出,溢出时为1.SFsignFlag符号标志记录运算结果的符号,结果负时为1.ZFzeroflag零标志运算结果等于0时为1,否则为0.CFcarryflag进位标志最高有效位产生进位时为1,否则为0.AFauxiliarycarryflag辅助进
位标志运算时,第3位向第4位产生进位时为1,否则为0.PFparityflag奇偶标志运算结果操作数位为1的个数为偶数个时为1,否则为0.标志寄存器NV:没有溢出,这是OverFlow位(OF)的值,分别为NV(没溢出)和OV(溢出了)。这个标志位是反映上一
个指令运算的结果是否溢出。PL:符号标志位(SF)的值,分别是NG(负)/PL(正)NZ:零标志位(ZF)的值,分别是ZR(零)/NZ(非零),表示上一指令的结果。如:xorax,ax后,这一位就会变为ZR。NA:辅助进位标志位(AF)的值,分别为AC(有进位)/NA(没有进位)。PO:奇
偶标志位(PF)的值,分别是PE(偶)/PO(奇)NC:进位标志位(CF)的值,分别是CY(进位)/NC(没有进位)ADDDL,0A4H的结果对标志位的影响11100101+)10100100110001001符号位有进位CF=1符号位为1,SF=1无进位,A
F=0结果不为0,则ZF=0;结果无溢出,则OF=0;结果中有奇数个1,则PF=0。算术运算类指令.2)带进位加法指令ADC格式:ADCOPD,OPS执行的操作:OPD十OPS+CF→OPD其中CF为进位位的值。例如
:ADCAX,DX;AX+DX→AX注意:对标志位的影响同一般加法指令。3)增量指令INC(加1指令)格式:INCOPD执行的操作:OPD+1→OPD例如:INCDX;DX+1→DX注意:操作数可以是字和字节,且为无符号数。只能早寄
存器和内存单元中。影响除CF外的5个标志位。4.48086指令简介2.减法指令1)不带借位减法指令SUB格式:SUBOPD,OPS执行的操作:OPD-OPS→OPD例如:SUBAX,DX;AX-DX→AX同加法指令一样影响标志位(
AF:有借位,CF:有借位)2)带借位减法指令SBB格式:SBBOPD,OPS执行的操作:OPD–OPS-CF→OPD其中CF为进位位的值。例如:SBBAX,DX对标志位的影响同不带借位减法指令。4.48086指令简介3)减量指令DEC(减1指令)格式:
DECOPD执行的操作:OPD一1→OPD例如:DECCX;(CX)-1→CX影响除CF的其它标志位4)求负数指令NEG格式:NEGOPD指令功能:OPD0-(OPD)注意:操作数可以是字节和字,且是补码表示的无有符号数。只能在通用寄存器
和内存单元中。注意溢出OF和CF的变化5)算术比较指令CMP格式:CMPOPD,OPS执行的操作:OPD-OPS该指令与SUB指令一样执行减法操作,但它并不保存结果,只是根据结果设置条件标志位。CMP指令后往往跟一条条件转移指令,根据比较结果产生不同的程序分支。例如:CMP
AX,BX;AX-BX若指令执行前CF=1,AX=1000H,BX=0100H。则指令执行后CF=0,ZF=0,OF=0,SF=0,PF=1。4.48086指令简介3.乘法指令MUL无符号数乘法IMUL带符号数乘法1)MUL无符号数乘法指令格式:MULOPS
执行的操作:字节操作数:AL*OPS→AX字操作数:AX*OPS→DX:AX双字操作数:EAX*OPS→EDX:EAX例如:MULCL若指令执行前AL=0B4H,CL=11H。则指令执行后AX=0BF4H。MUL指令只影响CF、OF:如果
是AH(字节乘法)或者DX(字乘法)为全0,则CF和OF=0,否则CF=OF=1。4.48086指令简介2)IMUL带符号数乘法指令格式:IMULOPS执行的操作与MUL相同,但两个操作数均是带符号的补码数。
例如:IMULCL对标志位的影响同MUL指令。4.48086指令简介4.除法指令DIV无符号数除法指令IDIV带符号数除法指令1)DIV无符号数除法指令格式:DIVOPS若OPS为字节类
型,则:AX/OPS的商→ALAX/OPS的余数→AH若OPS为字类型,则:DX:AX/OPS的商→AXDX:AX/OPS的余数→DX对标志位无有效影响。4.48086指令简介以上几种形式商和余数均为无符号数。2)IDIV带符号数除法指令格式:IDIVOPS执行的操作:与DIV相
同,但操作数必须是带符号补码数,商和余数也都是带符号数,且余数的符号和被除数的符号相同。例如:IDIVBL若指令执行前AX=0400H,BL=0B4H。则指令执行后AL=0F3H(商),AH=24H(余数)4.48086指令简介3)字节和字的符号扩展指令CBW:使用AHCW
D:使用DX主要用于除法指令的被除数扩位,对标志位无影响。4.48086指令简介6.调整指令1)DAA加法的压缩BCD码十进制调整指令格式:DAA这条指令之前必须执行ADD或ADC指令。加法指令必须把两个压缩
BCD码相加,并把相加结果存放在AL寄存器中。如果AF标志(辅助进位位)为1,或者AL寄存器的低4位是16进制的A~F中的任意一位数,则AL寄存器内容加06H修正,且将AF位置1;例如:DAA若指令执行前AL=3AH,AF=0,CF=0。则指令执行后A
L=40H,AF=1,CF=0如果CF标志为1;或者AL寄存器的高4位是A~F中的任意一位数,则AL寄存器内容加60H修正,并将CF位置1;4.48086指令简介例如:DAA若指令执行前AL=F8H,AF=0,CF=0。则指令执行后AL=58H,AF=1,CF=1。如果AL寄存器
的高4位和低4位都满足以上条件,则将AL寄存器的内容加66H。例如:DAA若指令执行前AL=0AH,AF=0,CF=1。则指令执行后AL=70H,AF=1,CF=04.48086指令简介2)DAS减法的压缩BCD码十进制调整指令格式:DAS执行的操作:把AL中的两
个压缩BCD码之差调整成压缩BCD码的格式→AL。应该注意的是,在执行这条指令之前,必须先执行SUB或SBB指令。如果AF标志为1,或者AL寄存器的低4位是16进制的A~F中的任意一位数,则AL寄存器的内容减06H,且将AF位置1;如果CF标志为1,或者AL寄存器的高4位是16进制的A~F
中的任意一位数,则AL寄存器内容减60H,并将CF位置1。如果AL寄存器的高4位和低4位都满足以上条件,则将AL寄存器的内容减66H。4.48086指令简介例如:DAS若指令执行前AL=49H,A
F=1,CF=0。则指令执行后AL=43H,AF=1,CF=0。4.48086指令简介3)AAA加法的非压缩BCD码调整指令本指令的调整步骤是:①如AL寄存器的低4位在A~F之间或AF为1,则AL寄存器的内容加06H,
AH寄存器的内容加1,并将AF位置1;②清除AL寄存器的高4位;③AF位的值送CF位。例如:AAA若指令执行前AX=000CH,AF=0,CF=0。则指令执行后AX=0102H,AF=1,CF=1。4
.48086指令简介4)AAS减法的非压缩BCD码调整指令格式:AAS执行的操作:把AL中的两个非压缩BCD码之差调整成非压缩BCD码格式→ALAH-调整产生的借位值→AH。应该注意的是,在执行这条指令之前,必须先执行SUB或SBB指令把两个非压缩的BCD码
相减,并把结果存放在AL寄存器中。5)AAS减法的非压缩BCD码调整指令本指令的调整步骤是:①如AL寄存器的低4位在A~F之间,或AF位为1,则把AL寄存器的内容减6,AH寄存器的内容减1,并将AF位置1
;②清除AL寄存器的高4位;③AF位的值进CF位。例如:AAS若指令执行前AX=0407H,AF=0,CF=0。则指令执行后AX=0407H,AF=0,CF=0。4.48086指令简介位运算指令(1)逻辑非指令NOT格式:NOTOPD功能:OPD←
OPD说明:操作数不能用立即数,此指令执行后对标志无影响,其余位运算指令均SF、ZF、PF、CG=OF=0。也可用于求补(2)逻辑与指令AND格式:ANDDOPD,SOPD功能:DOPD←DOPD∧SOPD(3)逻辑或指令OR格式:O
RDOPD,SOPD功能:DOPD←DOPD∨SOPD(4)逻辑异或指令XOR格式:XORDOPD,SOPD功能:DOPD←DOPD+SOPD(5)逻辑测试指令TEST格式:TESTDOPD,SOPD功能:除不回送结果外与AND指令功能相同4.48086
指令简介2.移位操作指令(1)算术移位指令1)算术左移指令SAL格式:SALDSOPD,CL|1功能:向左移位指定次数,每左移1次低位补0,最高位移入CF2)算术右移指令SAR格式:SARDSOPD,CL|1功能:向右移位指定次数,最高位固定,每次将低位移入的低位。4.4808
6指令简介(2).逻辑移位指令逻辑移位指令包括逻辑左移指令SHL和逻辑右移指令SHR。逻辑左移指令SHL和算术左移指令SAL完全相同。逻辑右移指令SHR与算术右移指令SAR的区别在于移空的高位补0。移位操作可快速实现2”的乘除运算,刀对应移位次数。左移等于做
乘法,乘2;右移等于做除法,除以2。算术移位适用于符号数运算,逻辑移位适用于无符号数运算。【例4-18】假定AX=00FFH,利用移位指令计算AX乘以8,除以2。程序段如下:MOVCL,3SALAX,CL;~=7F8HSHRAX,1:~=3FCH4.480
86指令简介(3).循环移位指令循环移位指令包括不带进位的循环移位指令ROL、ROR和带进位的循环移位指令RCL、RCR,共计4条。格式:ROLIRCLIRORfRCRDSOPD,CLIl功能:1)ROL,不带进位的循环左移指令。将DS
OPD循环左移指定次数,但CF不包含在循环的环中。每左移一次,把最高位移入CF的同时,又移回操作数最低位。2)ROR,不带进位的循环右移指令。将DSOPD循环右移指定次数,但CF不包含在循环的环中。每左移一次,把最低位移入
CF的同时,又移回操作数最高位。3)RCL,带进位的循环左移指令。与ROL指令不同的是CF包含在循环的环中,每左移一次,操作数最高位移入CF,而CF移至最低位。4)RCR,带进位的循环右移指令。与ROR
指令不同的是CF包含在循环的环中,每右移一次,操作数最低位移入CF,而CF移至最高位。输入输出系统调用指令1.系统功能调用方式为了调用方便,DOS系统将各个功能子程序顺序编号,这个编号称为功能号。通过功能号调用系统提供的相应功
能。进行系统功能调用要做三方面的工作:(1).设置入口参数DOS系统功能调用一般都是通过寄存器传送入口参数,但也有一些系统功能调用不需要设置入口参数。存放入口参数的寄存器大多数功能号指定的是DL/DX寄存器。(2).设置功能号将所
需要调用的子程序的功能号送入AH寄存器。注意功能号只能指定在寄存器AH中。(3).执行软中断指令INT该指令将程序控制自动转向相应子程序的入口,并执行相应功能处理。调用结束后,一般会有出口参数
,但保存于特定的寄存器中。有些功能调用结束时会在屏幕上显示结果或在打印机上打印结果。输入输出系统调用指令2.输入,输出系统功能调用(1).键盘输入(1号功能调用)入口参数:无调用方式:MOVAH,1INT21H出口参数:
AL中为输入字符的ASCII码。功能:等待从键盘输入一个字符,并将输入字符的ASCII码送入AL寄存器。说明:执行该功能调用首先扫描键盘,等待按键。若有键按下,则对所按键码进行检查;当按下CTRL+BREAK键时,则退出命令执行;若按下其他键时,则将对应的ASCII码送AL中,
同时送显示器显示。(2).显示字符(2号功能调用)入口参数:DL寄存器内容,为要显示字符的ASCII码。调用方式:DL一要显示字符的ASCII码MOVAH,2INT21H出口参数:无。功能:将DL寄存器中的字符送标准输出设备(如显示器)输出。说明:若
DL中的内容为CTRL+BREAK的ASCII码,退出功能调用。(3).打印输出(5号功能调用)入口参数:DL寄存器中内容,为要打印的字符的ASCII码。调用方式:DL一要打印输出的字符MOVAH,5INT21H功能:将DL寄存器中的字符送标准
打印设备打印输出。说明:完成的功能与2号功能调用类似,只是输出设备不同。输入输出系统调用指令(6).字符串显示(9号功能调用)入口参数:DX,要显示的字符串的首地址。调用方式:Dx一要显示的字符串的首地址MOVAH,9INT21H出口参数:无。功能:
显示以“$”为结束标志的字符串。说明:显示字符串(不含$)后,做CTRL+BREAK检查和处理。(7).字符串输入(10号功能调用)入口参数:DX,缓冲区首地址。调用方式:Dx一从键盘接收字符的
输入缓冲区首地址