




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第3章 80X86的指令系统和寻址方式(包含第5章循环与分支程序设计), 80X86的寻址方式 数据传送指令、算术指令、逻辑指令 顺序程序设计 转移指令 分支程序设计 循环结构与循环指令 循环程序设计,寻找指令中所需操作数存放地址的方式或程序转移时寻找 转移地址的方式称为寻址方式,因而寻址方式分为两大类, 一类是数据寻址方式,另一类是转移地址寻址方式。,3.1 80X86的寻址方式, 立即寻址 寄存器寻址 直接寻址 寄存器间接寻址 寄存器相对寻址 基址变址寻址 相对基址变址寻址,一、立即寻址,此寻址方式所提供的操作数直接包含在指令中,它紧跟 在指令操作码后面,存放在存储器代码段中。立即操作 数
2、可以是8位,也可以是16位。,立即寻址方式用来表示常数且只能是整数,它常用于给寄存器赋初值。需要强调的是,立即寻址只能用于源操作数,不能用于目的操作数。 OPR DST, SRC,【例3.1】 MOV AX,1234H MOV AL, 12H,操作码,目的操作数,源操作数,二、寄存器寻址,此寻址方式的操作数直接存放在由指令指明的寄存器中。在 汇编指令中直接书写寄存器名,如16位寄存器操作数可以是 AX、BX、CX、DX、SI、DI、BP、SP、DS、ES、SS、CS等;8 位寄存器操作数可以是AH、AL、BH、BL、CH、CL、DH、DL。,【例3.2】MOV DS,AX ADD CL,AH,
3、此寻址方式由于存取操作数直接从CPU内部寄存器中获得,不需访问存储器,因而指令执行的速度快。 寄存器寻址既可用于源操作数,又可用于目的操作数,应用频率高。,三、存储器寻址,存储器寻址方式的操作数都是存放在存储器中,一般是数据段、附加 段、堆栈段中的存储单元。指令中给出的是存储单元的地址或产生存 储单元地址的表达式。在汇编语言源程序中,存储单元地址是采用逻 辑地址的形式表示的,即:段首址:段内偏移地址。段首址存放在某 个段寄存器中,段内偏移地址是指存放操作数的存储单元与段起始地 址(段首址)之间的距离(字节数),又可称为“有效地址”,记作EA。,有效地址EA是由3个地址分量的某种组合求得,这3个
4、地址分量是: 位移量 、基址 、变址 。 这3个地址分量的不同组合,使形成有效地址EA的方法不同,相应有 以下5种不同的存储器操作数寻址方式。,1、直接寻址,直接寻址是最简单的存储器寻址,这种寻址,操作数的有效地址EA 由指令直接给出。它主要用于存取简单变量。EA可以有两种形式提供: (a) 常量 (b)变量或含有变量的表达式,【例3.3】MOV AL, 1000H MOV VAL,BX MOV AX, VAL+2,对使用直接寻址方式需说明以下几点: 操作数默认存放在数据段中,段寄存器DS在指令格式无须指定。 若操作数在代码段、堆栈段或附加段中,则在指令格式中必须指定相应 的段寄存器名。在操作
5、数地址之前使用前缀指出段寄存器名,这种前缀 称为段跨越前缀。 指令中操作数的EA即可以是一个数字,也可以是一个符号地址。当EA是 一个数字时,一定要注意立即寻址方式与直接寻址方式的区别。 直接寻址方式适合于处理存储器的单个存储单元。,2、寄存器间接寻址,此寻址方式中,操作数的有效地址EA存放在SI、DI、BX或BP四个寄存器 之一中,即:EA(BX)或(BP)或(SI)或(DI)。SI、DI、BX、 BP在这里叫间址寄存器。若用BX、SI或DI间址寻址时,则操作数默认在 数据段中,且用DS内容作为段首址,操作数的物理地址为: (BX) PA(DS)16 (S I) (D I) 若指令中使用BP
6、间址寻址时,则操作数默认在堆栈段中,且用SS的内容 作为段首址,操作数的物理地址为: PA(SS)16 (BP),【例3.4】 MOV DL, BX MOV AX, DI MOV AL, SI 【例3.5】 MOV BP ,AX MOV AL, BP ,3、寄存器相对寻址,此寻址操作数的有效地址EA是指令中指定的基址寄存器的内容或变址寄 存器的内容与指令中给出的位移量之和,即:EA(BX)或(BP)位移量 (SI)或(DI)位移量 物理地址为:PA (DS)16(BX)Disp (SI) (DI) (SS)16(BP)Disp,【例3.6】 MOV AX, BX+7CH MOV AX, BP+
7、COUNT MOV AX,DS: BP+COUNT 【例3.7】 MOV DX,COUNT DI MOV ES:3480H SI ,AX,4、基址变址寻址,此寻址方式中操作数的有效地址EA是指令中的基址寄存器的内容、变址 寄存器的内容两个地址分量之和, 即:EA (BX)(SI)或(DI) (BP)(SI)或(DI) 操作数的物理 地址为: PA (DS)16(BX)(SI) (DI) (SS)16(BP)(SI) (DI),【例3.8】 MOV AX, BX SI MOV BX, BX DI MOV DX, BP SI MOV AX,DS: BP DI ,5、相对基址变址寻址,此寻址方式中操
8、作数的有效地址EA是指令中的基址寄存器的内容、变址 寄存器的内容两个地址分量之和, 即:EA (BX)(SI)或(DI) Disp (BP)(SI)或(DI) Disp 操作数的物理 地址为: PA (DS)16(BX)(SI)Disp (DI) (SS)16(BP)(SI)Disp (DI),【例3.9】 MOV AX, BX SI COUNT MOV BX, BX DI 1234H MOV DX, BP SI +COUNT MOV AX,DS: BP DI +3456H,3.2 程序占用的时间和空间,一、程序量越大,占有的存储空间越大。 二、访问存储器、运算器执行都需要时间。 三、完成相同
9、功能的不同程序,占用存储空间的大小和执行时间上 有很大的差别。,若对存储空间或执行时间有高要求,就要仔细斟酌程序算法、数据 结构以及指令与寻址方式的选用。,3.3 8086指令系统,8086指令系统按功能可分为六大类: (1)数据传送类指令(2)算术运算类指令 (3)位操作指令(4)串操作指令 (5)控制转移指令(6)处理器控制指令 8086指令按操作数个数可划分为三种类型: (1)双操作数指令 (2)单操作数指令 (3)无操作数指令,学习汇编指令应从以下几方面着重理解掌握: (1)学习指令格式; (2)掌握指令中操作数的寻址方式及寻址方式的搭配规则; (3)掌握指令的功能及指令执行后对条件码
10、的影响; (4)学习如何正确运用指令。,一、数据传送指令,1通用数据传送指令 (1)传送指令MOV 格式:MOVDST,SRC 功能:把源操作数传送到目的操作数。即:(DST)(SRC),说明: 源操作数和目的操作数的操作类型必须明确且一致;当指令中只 有一个操作数的类型明确时,另一个操作数被视为同一类型;当 两操作数类型均不明确时,必须用“BYTEPTR”或“WORDPTR”将 一个存储器操作数定义为字节或字类型。 指令执行后,源操作数内容不变。 指令执行后,对标志寄存器各位无影响。 源操作数可以是通用寄存器、段寄存器、存储器和立即数;目的 操作数也可以是通用寄存器、段寄存器、存储器,但立即
11、数、CS 段寄存器不能作为目的操作数。源操作数和目的操作数不能同时 为存储器操作数。,(1)数据传送指令mov,立即数,存储器,通用寄存器 AX,BX,CX,DX SI,DI,BP,SP,CS,段寄存器DS,ES,SS,(1)数据传送指令mov,用一条MOV指令能实现: (a) 立即数传送到通用寄存器或存储单元 如MOVDL,a; MOVAX,1FA4H (b) 寄存器之间的传送 如MOVAX,BX; MOVAL,DH; MOVDS,AX (c) 寄存器与存储单元之间的传送 如MOVDL,BUFBYTE MOV WORD PTR BX+SI,AX,由于MOV指令中只允许一个操作数在存储器中,因
12、此用一条MOV指令 无法完成两个存储单元之间的数据传送,但可以用二条指令来实现。 【例3.10】 把BUFWORD1字单元内容传送到BUFWORD2字单元中,可用 以下指令完成: MOV AX,BUFWORD1 MOV BUFWORD2,AX,1通用数据传送指令,(2) 交换指令XCHG,格式:XCHGOPR1,OPR2 功能:源操作数和目的操作数的内容相互交换。 即:(OPR1)(OPR2),说明:该指令与MOV指令相似,但在功能上有两点区别: 其一,该指令不允许使用立即数和段寄存器作为操作数; 其二,该指令改变源操作数的内容。,【例3.11】将内存中DAW1单元和DAW2单元中的字数据交换
13、。 MOV AX ,DAW1 XCHG DAW2 , AX MOV DAW1 , AX,(3)查表转换指令XLAT 格式:XLAT或XLATOPR 功能:将(BX)为首址(AL)为位移量的字节存储单元中 的数据传送到AL中。 即:AL(BXAL)字节,1通用数据传送指令,【例3.12】将十进制数09翻译成7段显示器的译码表如下(共阳极)如下表,设其首地址为0200H,编程取3和7对应的7段值,并存入DATA开始的单元。,DATAS SEGMENT ORG 0200H ARRAY DB 40H,79H,24H,30H,19H,12H,02H,78H,00H,10H DATA DB ?,? DAT
14、AS ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATAS START: MOV AX,DATAS MOV DS,AX MOV BX,0200H MOV AL,3 XLAT MOV DATA,AL MOV AL,7 XLAT MOV DATA+1,AL MOV AH,4CH INT 21H CODE ENDS END START,编辑程序如下:,2累加器专用传送指令,这组指令只限于使用累加器(ac:AX 或AL)传送信息。,3地址传送指令,地址传送指令主要用于将存储器操作数地址(偏移地址、段地 址)传送给指定的寄存器。它包括3条指令:LEA、LDS和LES。,(1
15、)传送有效地址指令LEA 格式:LEAREG16,SRC 功能:将源操作数的有效地址EA传送给目的操作数指定的16 位通用寄存器。(通常使用BX,BP,SI,DI),说明: 源操作数必须是存储器操作数,即SRC采用存储器寻址; 目的操作数必须是一个16位通用寄存器。 本指令对标志位无影响。 该指令通常用来建立内存储器的寄存器指针。,注:该指令完成的功能也可用下面指令完成。 MOV BX , OFFSET ARRAY LEA BX , ARRAY,(2)传送偏移地址及数据段首址指令LDS 格式:LDSREG16,SRC 功能:将由源操作数确定的双字存储单元的内容传送给DS及目的 操作数指定的16
16、位通用寄存器中,其中高字单元的内容送 给DS,低字单元的内容送给REG16。,说明: 源操作数必须是双字存储器操作数,即:SRC采用存储器寻址, 寻找到相继4个字节的存储单元,低字单元中存放偏移地址, 高字单元中存放段首地址;目的操作数必须是一个16位通用寄 存器,通常特定为SI。 本指令不影响标志位。,SI,DS,从指令的功能上可看出,SAHF和LAHF为互逆过程。,(3)传送偏移地址及附加段首址指令LES 格式:LESREG16,OPS 功能:将由源操作数确定的双字存储单元的内容传送给ES及目的 操作数指定的16位通用寄存器中,其中高字单元的内容送 给ES,低字单元的内容送给REG16。
17、说明:同LDS指令。,4标志位传送指令 标志位传送指令有4条指令,即:LAHF、SAHF、PUSHF和POPF。,(2)AH标志送指令SAHF 格式:SAHF 功能:将AH寄存器的内容送入标志寄存器低8位,高8位保持不变。 该指令用于设置或恢复SF、ZF、AF、PF、CF五个标志位, 该指令的执行只影响标志寄存器的低8位,对高8位(即OF、 DF、IF、TF)标志位无影响。,(1)标志送AH指令LAHF 格式:LAHF 功能:将标志寄存器低8位的内容送入AH寄存器。 即:AH(FLAGS)7-0,该指令的执行不影响标志位。,(3)标志进栈指令PUSHF 格式:PUSHF 功能:将标志寄存器的内
18、容压入堆栈。,(4)标志出栈指令POPF 格式:POPF 功能:将栈顶字单元内容弹出到标志寄存器中。 该指令的执行影响标志位。,从指令的功能上可看出, PUSHF和POPF互为逆过程。,标志位传送指令中SAHF和POPF指令将直接影响标志寄存器的内容。 利用这一特性,可以方便地改变标志寄存器中指定位的状态.,数据传送类指令还包括输入/ 输出专用指令,在PC机里所有I/O端口与CPU之间的通信都由IN和OUT指令实现,由IN指令完成从I/O端口到CPU的信息传送,由OUT指令完成从CPU到I/O端口的信息传送。 注意:端口0FFH 只能使用长格式; 端口0-FFFFH 即可使用长格式又可使用段格
19、式。,二、算术运算指令,算术运算指令用来执行加、减、乘、除四则运算。它包括无符号 数、有符号数的二进制算术运算指令和十进制算术运算调整指令。,1二进制数算术运算指令 (1)加法运算指令 加法运算指令包括ADD、ADC的INC三条指令。, 加法指令ADD 格式:ADDDST , SRC 功能:将目的操作数与源操作数相加,结果存入目的地址中,而源 操作数不变。即:(DST)(DST)(SRC)。,说明: 该指令的源操作数或在通用寄存器或在存储单元中,也可以是立即 数,而目的操作数只能在通用寄存器或存储单元中,不能是立即数, 且两操作数不能同时为存储器操作数;操作数可以是字节或字,且 两操作数的类型
20、明确并一致。该指令相加后,根据得到的结果设置 标志寄存器的OF、SF、ZF、CF、AF和PF标志位。,OF: 当两个有符号数相加时,若两个操作数的符号相同,而结果的符号 与之相反,则OF1,否则,其余情况OF0。 当OF1时,说明两个有符号数相加产生了溢出,即和的值超出了有 符号数的有效范围。在把操作数视为有符号数时,可通过该标志了 解加法结果是否正确。 CF: 运算过程中当最高位产生进位时,则CF1,否则,CF0。 当CF1时,说明运算结果超出了无符号数的表示范围。 在把操作数视为无符号数时,可通过该标志了解加法结果是否正确。 SF: 运算结果的最高位为1,则SF1,否则,SF0。 ZF:
21、运算结果为零时,则ZF1;否则,ZF0。,ADD指令执行后对标志位的影响及作用如下,这里我们只重点说明 OF、CF、SF和ZF四个标志位。, 带进位加法指令ADC 格式:ADCDST,SRC 功能:与ADD指令基本相同,惟一区别是将该指令执行前的CF值加 至目的操作数中。 即:(DST) (DST)(SRC)CF,(1)加法运算指令 加法运算指令包括ADD、ADC的INC三条指令。,说明:该指令与ADD指令在功能上及结果对标志位影响上基本相同。 该指令主要用于多字节的加法运算。, 加1指令INC 格式:INCOPR 功能:将目的操作数加1后送回目的地址中,并根据执行结果设 置标志位OF、SF、
22、ZF、AF、PF,但不影响CF位。,说明: 该指令的操作数可以是字或字节且类型必须明确。其操作数只能在 通用寄存器或存储单元中,不能是立即数。该指令执行后对OF、SF、 ZF、AF、PF标志位的影响与ADD指令相同。 INC主要用于计数器的计数或修改地址指针。,(2)减法运算指令 减法运算指令包括SUB、SBB、DEC、NEG和CMP五条指令。, 减法指令SUB 格式:SUBDST,SRC 功能:目的操作数减去源操作数,其差值存入目的地址,源操作 数不变,即:(DST) (DST)(SRC)。并按相减的结 果设置标志位OF、CF、SF、ZF、AF和PF。,说明:该指令的源操作数和目的操作数可以
23、在通用寄存器或存储单 元中,但两者不能同时在存储器中,立即数可作为源操作数,而不 能作为目的操作数。两操作数可以是字节或字,且类型明确一致。,SUB指令执行后对标志位的影响与ADD指令类似,下面仅说明CF和OF 两位的设置情况及作用: OF:当两个有符号数相减时,若两个操作数的符号相反,而结果的 符号与减数相同,则OF1,否则,其余情况OF0。 OF1时,说明有符号数减法溢出,结果是错误的。OF位可用来 判断有符号数相减,结果是否正确。 CF:当两无符号数相减时,若减数大于被减数,则此时有借位, CF1,否则CF0,CF值反映了无符号数相减时是否有借位, 带借位减法指令SBB 格式:SBBDS
24、T,SRC 功能:SBB与SUB指令基本相同,惟一区别是:目的操作数除减去源 操作数外,还要减去该指令执行前的CF值。 即:(DST)(DST)-(SRC)-CF。并按相减的结果设置标 志位OF、CF、SF、ZF、AF和PF。,说明:该指令与SUB指令在功能上及结果对标志位的影响上基本相同。 该指令在使用上类似于ADC指令,主要用于多字节减法运算。 SUB和SBB指令配合可以实现多倍精度数减法运算。, 减1指令DEC 格式:DECOPR 功能:将目的操作数减1后送入目的地址中,并根据执行结果设置 标志位OF、SF、ZF、AF和PF,但不影响CF位。 即: (OPR) (OPR)1。,说明:该指
25、令的操作数可以是字节或字且类型必须明确;其操作数只 能在通用寄存器或存储单元中,不能是立即数。该指令执行后 对OF、SF、ZF、AF、PF的影响与SUB指令相同。, 求负数指令NEG 格式:NEGOPR 功能:用零减去目的操作数,相减结果送回目的地址中。 即:(OPR)0(OPR)(OPD)即求目的操作数的相反数。,说明: (a)该指令是单操作数指令,OPR的用法与前面讲过的单操作数指 令,如INC、DEC中的目的操作数相同。 (b)NEG指令是对有符号数进行操作的,由于机器中有符号数是用 补码表示的,求一个操作数的负数,就是求其补码,因此, NEG又叫求补指令,即:OPR(OPR)1。 (c
26、)该指令执行后影响标志位CF、OF、SF、ZF、AF和PF。其中: OF:当字节操作数为128(80H),字操作数为32768 (8000H),执行NEG指令后,操作数无变化,但溢出标志 位OF置1,其余情况OF置0。 CF:当操作数为零时,求负数的结果仍为零,CF0, 其余情况CF1, 比较指令CMP 格式:CMPDST,SRC 功能:目的操作数减去源操作数,结果只影响标志位,不送入目 的地址即:(DST)(SRC)。,说明:CMP指令与SUB指令一样执行减法操作,但它不保存差值结果, DST和SRC在操作前后值不变。CMP指令功能上、使用方法上、 对标志位的影响上均与SUB指令基本相同。,
27、CMP指令常用于比较两个操作数的大小。执行CMP指令后,根据标志 位的设置情况判断两个数的大小关系。,若两无符号数比较时: 当ZF0时,则DSTSRC; 否则:当CF0时,则DSTSRC; 当CF1时,则DSTSRC。 若两有符号数比较时: 当ZF0时,则DSTSRC; 否则:当OFSF时,则DSTSRC; 当OFSF时,则DSTSRC。 CMP指令后面常跟着条件转移指令,根据比较结果产生不同的分支。,【例3.13】试编制程序计算如下表达式:Z=3X+Y-5;设X,Y分别存放在字变量 VARX,VARY中,结果存放在VARZ中。,算法分析: (1)乘法的实现,所有的乘法都可 转换成加法实现。3
28、X=X+X+X; (2)此题中加法指令使用三次,用 ADD,还是ADC.,CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV AX,VARX ADD AX,VARX ADC AX,VARX ADC AX,VARY SUB AX,5 MOV VARZ,AX MOV AH,4CH INT 21H CODE ENDS END START,DATA SEGMENT VARX DW 0105H VARY DW 0053H VARZ DW ? DATA ENDS,(3)乘法运算指令 乘法指令用于实现两个二进制操作数的乘法
29、运算,乘法指 令区别无符号数和有符号数,所以它提供了两条指令: MUL和IMUL。, 无符号数乘法指令MUL 格式:MULSRC 功能:实现两个无符号数相乘。 字节乘:当SRC为字节操作数时,将(AL)乘以(SRC),得 到字乘积送入AX中, 即:(AX)(AL)(SRC)。 字 乘:当SRC为字操作数时,将(AX)乘以(SRC),得到双字 部分送入DX中,低字部分送入AX中。 即:(DX,AX)(AX)(SRC)。,说明: (a)MUL指令有两种操作类型,即字节乘和字乘,MUL操作类型取 决于SRC的类型,SRC指定乘数,它可以是字节或字,但类型 必须明确,乘数可以在通用寄存器或存储器中,但
30、不能是立 即数。 (b)MUL指令只影响OF和CF位。 若乘积的高一半(即字节相乘时乘积中的(AH),字相乘时 乘积中的(DX)为0,则OFCF0,否则OFCF1。MUL 指令对其它标志位不确定。当CFOF1时,说明AH或DX中 有乘积的有效数字,CFOF0时,说明AH或DX中无乘积的有 效数字,也就是说字节乘以字节积为字节或字乘以字积为字。 编程时我们可以利用OF和CF位的设置情况检查字节乘时乘积 的结果是字节还是字,字乘时乘积的结果是字还是双字。,无符号数乘法指令MUL对CF和OF的影响。, 有符号数乘法指令IMUL 格式:IMUL SRC 功能:实现了两个有符号数相乘。其操作方法与MUL
31、指令相同。,说明:IMUL指令也只影响OF和CF位,对其它标志位不确定。若乘积 的高一半(即AH或DX)是低一半(即AL或AX)的符号扩展, 则OFCF0,否则,OFCF1。 当OFCF1亦标志着AH或DX中放有乘积的有效值,即标志 着(AH)和(DX)不是对应的低半部分的符号扩展。, 字节转换成字指令CBW 格式:CBW 功能:将(AL)的符号位扩展到AH中。 字转换成双字指令CWD 格式:CWD 功能:将(AX)的符号位扩展到DX中。,(4)除法运算指令 除法指令用于实现两个二进制操作数的除法运算,包 括无符号数除法指令DIV和有符号数除法指令IDIV。, 无符号数除法指令DIV 格式:D
32、IVSRC 功能:实现两无符号数除法运算,商和余数均为无符号数。 字节除:当SRC为字节操作数时,则以(AX)为被除数,SRC 为除数,将(AX)除以(SRC),得到的商送入AL 中,余数送入AH中。 即:(AX)/(SRC)AL(商) AH(余数) 字 除:当SRC为字操作数时,则以(DX,AX)为被除数, SRC为除数,将(DX,AX)除以(SRC),得到的商 送入AX中,余数送入DX中。 即:(DX,AX)/(SRC) AX(商) DX(余数),说明: (a)DIV指令有两种操作类型,即字节除和字除,其操作类型取决 于SRC的类型,SRC指定除数,它的类型必须明确,它可以在通 用寄存器或
33、存储器中,但不能是立即数。DIV指令的被除数、 商和余数均采用隐含寻址方式,当字节除时,被除数隐含在 AX中,商固定存入AL中,余数固定存入AH中;当字除时,被 除数隐含在DX,AX中,商固定存入AX中,余数固定存入DX中。 (b)DIV指令执行后,标志寄存器中各标志位不确定,但商可产生 溢出。一般情况下,当被除数的高一半(即字节除时为(AH), 字除时为(DX)大于除数时,商就会产生溢出。当SRC为字节 操作数时,商的范围为0255(0FFH);当SRC为字操作数时, 商的范围为065535(0FFFFH)。若商超出此范围,则产生0号 中断(除法出错中断),转入除法出错中断处理。, 有符号数
34、除法指令IDIV 格式:IDIVSRC 功能:实现两有符号数除法运算,该指令中的操作数、商及余数均为 有符号数且用补码表示,除此之外,其余操作与DIV完全相同。,说明: (a)IDIV指令商的符号由被除数符号与除数符号异或运算而得到, 余数的符号规定与被除数的符号相同。 (b)有符号数除法的商中,最大的正数商是127(7FH)或 32767(7FFFH),最小的负数商是127(81H)或 32767(8001H)。当商超出此范围,指令产生了溢出。 一般情况下,当被除数高一半(AH或DX)的绝对值大于除数 的绝对值时,则可判断IDIV指令操作结果产生了溢出,即产 生0号中断。,【例3.14】试编
35、制程序计算如下表达式: (V-(X*Y+Z-540)/X;其中X,Y,Z,V均为16位带符号数,已分别装入X,Y,Z,V单元中,要求上式计算结果的商存入AX,余数存入DX寄存器。,算法分析: (1)16位带符号数乘法运算使用IMUL, 结果存入DX,AX;为32位的数据. (2)Z,V为16位数据,必须符号扩展, CWD默认从AX扩展到DX,AX。 (3) (V-(X*Y+Z-540)做被除数,必须放 入DX,AX中,三次使用DX,AX冲突 如何解决:备份.,CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX ,DATA MOV DS , AX
36、MOV AX , X IMUL Y MOV CX , AX MOV BX , DX MOV AX , Z CWD ADD CX , AX ADC BX , DX SUB CX , 540 SBB BX , 0 MOV AX , V CWD SUB AX , CX SBB DX , BX IDIV X MOV AH , 4CH INT 21H CODE ENDS END START,DATA SEGMENT X DW 0005 Y DW 0008 Z DW 1000 V DW 540 DATA ENDS,MOV AX,Z ADD CX,AX ADC BX,0,(DX,AX)=X*Y,(BX,CX
37、)=X*Y,(BX,CX)=X*Y+Z,(BX,CX)=X*Y+Z-540,(DX,AX)=V,(DX,AX)=V-(X*Y+Z-540),(DX,AX)=(V-(X*Y+Z-540)/X,2十进制算术运算调整指令 十进制算术运算调整指令又称为BCD码调整指令。当用计算机进行十进制算术运算时,可以先将操作数作十二进制转换,然后作二进制数算术运算,再将结果作二十进制转换。为了方便十进制数的运算,8086系统提供了一组十进制算术运算调整指令,用于将运算后的二进制数调整为BCD码。该类指令分为压缩BCD码调整指令和非压缩BCD码调整指令。 注意: 十进制调整指令不能单独使用,必须与加、减、乘、除二进
38、制指令配合使用才能进行十进制调整,十进制调整指令形式上均为无操作数指令,其操作对象隐含在AX中。 (1)非压缩BCD码调整指令 非压缩BCD码加法调整指令AAA。 格式:AAA 功能:将AL中的和调整为非压缩BCD码并送回AL。具体调整方法如下: 若二进制相加后(AL)的低4位大于9或AF=1,则:AL(AL)+ 6; AH(AH)+ 1; AF = CF = 1 且AL高4位清零。否则:CF = AF = 0 且AL高4位清零。其他标志位OF、PF、SF、ZF不确定。 说明:在使用AAA指令前,必须执行ADD、ADC或INC指令把非压缩BCD相 加,且把和存放在AL中。, 非压缩BCD码减法
39、调整指令AAS。 格式:AAS 功能:将AL中的差调整为非压缩BCD码并送回AL,向高位的借位在AH和 CF中。具体调整方法如下: 若二进制相减后(AL)的低4位大于9或AF=1, 则:AL(AL)- 6; AH(AH)- 1;AF = CF = 1 且AL高4位清零。 否则:CF = AF = 0且AL高4位清零。其他标志位OF、PF、SF、ZF不确定。 说明:在使用AAS指令前,必须执行SUB、SBB或DEC指令把非压缩BCD相减, 且把差存放在AL中。 非压缩BCD码乘法调整指令AAM。 格式:AAM 功能:将AL中的积调整为非压缩BCD码并送回AX。具体调整方法是: 把AL寄存器的内容
40、除以0AH,并把商放在AH寄存器中,余数放 在AL寄存器中。 非压缩BCD码除法调整指令AAD。 格式:AAD 功能:除法运算前,先调整被除数AX内容, 使:AL(AH)* 0AH +(AL) , AH 0,(2)压缩BCD码调整指令 压缩BCD码加法调整指令DAA。 格式:DAA 功能:将AL中的和调整为压缩BCD码并送回AL。本指令执行之前必须先 执行ADD或ADC指令,把两个压缩BCD码相加,且和存放在AL寄存 器中。具体调整方法是: 若(AL)的低4位大于9或AF=1,则:AL(AL)+ 06H,并使AF=1; 若(AL)的高4位大于9或CF=1,则:AL(AL)+ 60H,并使CF=
41、1; 其余情况AL内容不变。 说明:DAA指令影响CF、ZF、SF、AF和PF,对OF无定义。 压缩BCD码减法调整指令DAS。 格式:DAS 功能:将AL中的差调整为压缩BCD码并送回AL。本指令执行之前必须先 执行SUB或SBB指令,把两个压缩BCD码相减,且差存放在AL寄存 器中。具体调整方法是: 若(AL)的低4位大于9或AF=1,则:AL(AL)- 06H,并使AF=1; 若(AL)的高4位大于9或CF=1,则:AL(AL)- 60H,并使CF=1; 其余情况AL内容不变。 说明:DAS指令影响CF、ZF、SF、AF和PF,对OF无定义。,【上机练习1】试编制程序将内存单元中ARRA
42、Y开始的10个字单元的数据求 和,并将结果送人SUM单元中。(假设不溢出),考察点分析: (1)多个字数据求和,加法指令使用.ADD; ADC; 内存的访问方法。 (2)乘法的实现方法;默认寄存器DX,AX; 数据段定义的内容。 (3) 双字数据操作注意事项。,【上机练习2 】试采用两种不同的方法编制程序求Y=10X;,【上机练习3 】将内存DATAX(12000009H)和DATAY(00000004H)中的两个双字数据相加,结果再减去-12,结果存入DATAZ单元。,分析题意,确定算法; 根据算法画出框图; 根据框图写出程序; 上机调试。,3.3 顺序程序设计,一、汇编语言程序设计的步骤:
43、,二、汇编语言程序设计的基本结构,顺序结构,子程序结构,循环结构,分支结构,复合结构:多种程序结构的组合,三、顺序程序设计举例,【例3.14】试编制程序计算如下表达式: (V-(X*Y+Z-540)/X;其中X,Y,Z,V均为16位带符号数,已分别装入X,Y,Z,V单元中,要求上式计算结果的商存入AX,余数存入DX寄存器。,DATA SEGMENT X DW 0005 Y DW 0008 Z DW 1000 V DW 540 DATA ENDS,MOV AX , X IMUL Y MOV CX , AX MOV BX , DX MOV AX , Z CWD ADD CX , AX ADC BX
44、 , DX SUB CX , 540 SBB BX , 0 MOV AX , V CWD SUB AX , CX SBB DX , BX IDIV X MOV AH , 4CH INT 21H CODE ENDS END START,CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX ,DATA MOV DS , AX,3.4 分支程序设计,一、转移指令,1无条件转移指令 格式:JMPOPR 无条件转移分为段内转移和段间转移。 (1)段内直接短转移 格式:JMP SHORTOPR (2)段内直接近转移 格式:JMP NEAR PTR OPR,(3
45、)段内间接转移 格式:JMP WORD PTR OPR (4)段间直接远转移 格式:JMP FAR PTR OPR (5)段间间接转移 格式:JMP DWORD PTR OPR,1无条件转移指令,(1)根据条件标志位的状态判断的转移指令 这组条件转移指令共有10条。 JZ/JE 结果为零/相等则转移。 格式:JZ/JEOPR 测试条件:ZF=1,2条件转移指令, JNZ/JNE 结果不为零/不相等则转移。 格式:JNZ/JNEOPR 测试条件:ZF=0 JS 结果为负则转移。 格式:JS OPR 测试条件:SF=1 JNS 结果为正则转移。 格式:JNSOPR 测试条件:SF=0, JO 溢出
46、则转移。 格式:JO OPR 测试条件:OF=1 JNO 不溢出则转移。 格式:JNOOPR 测试条件:OF=0 JP/JPE 奇偶位为1则转移。 格式:JP/JPE OPR 测试条件:PF=1,2条件转移指令 (1)根据条件标志位的状态判断的转移指令, JNP/JPO 奇偶位为0则转移。 格式:JNP/JPO OPR 测试条件:PF=0 JC 进位为1则转移。 格式:JC OPR 测试条件:CF=1 JNC 进位为0则转移。 格式:JNCOPR 测试条件:CF=0,2条件转移指令 (1)根据条件标志位的状态判断的转移指令,(2) 根据两个无符号数的比较结果判断的转移指令,2条件转移指令, J
47、B/JNAE 低于/不高于等于转移。 格式:JB/JNAEOPR 测试条件:CF=1且ZF=0 本指令用于两个无符号数a、b的比较。若ab,则 满足条件,转移。 JNB/JAE 不低于/高于等于则转移。 格式:JNB/JAEOPR 测试条件:CF=0或ZF=1 本指令用于两个无符号数a、b的比较。若ab,则 满足条件,转移。, JBE/JNA 低于等于/不高于则转移。 格式:JBE/JNA OPR 测试条件:CF=1或ZF=1 本指令用于两个无符号数a、b的比较。若ab,则 满足条件,转移。 JNBE/JA 不低于等于/高于则转移。 格式:JNBE/JA OPR 测试条件:CF=0且ZF=0
48、本指令用于两个无符号数a、b的比较。若ab,则 满足条件,转移。,2条件转移指令,(2) 根据两个无符号数的比较结果判断的转移指令,2条件转移指令,(3)根据两个带符号数的比较结果判断的转移指令, JL/JNGE 小于/不大于等于则转移。 格式:JL/JNGE OPR 测试条件:SFOF且ZF=0 本指令用于两个有符号数a、b的比较。若ab,则 满足条件,转移。 JNL/JGE 不小于/大于等于则转移。 格式:JNL/JGE OPR 测试条件:SF=OF或ZF=1 本指令用于两个有符号数a、b的比较。若ab,则 满足条件,转移。,2条件转移指令,(3)根据两个带符号数的比较结果判断的转移指令,
49、 JLE/JNG 小于等于/不大于则转移。 格式:JLE/JNG OPR 测试条件:SFOF或ZF=1 本指令用于两个有符号数a、b的比较。若ab,则 满足条件,转移。 JG/JNLE 大于/不小于等于则转移。 格式:JG/JNLE OPR 测试条件:SF=OF且ZF=0 本指令用于两个有符号数a、b的比较。若ab,则 满足条件,转移。,2条件转移指令,(4)测试CX内容为零则转移指令,JCXZCX寄存器的内容为零则转移 格式:JCXZ OPR 测试条件:(CX)=0,二、分支程序设计,1利用比较(或测试)转移指令实现 分支程序设计 2利用跳转表实现分支程序设计 (1)根据表内地址分支 (2)
50、根据表内指令分支 (3)根据表内关键字分支,【例3.15】已知(BX)=84F0H,试编制程序把(BX)中的16位数每4位压入堆栈(高位先压入)。,0000000000001000H,0000000000000000H,0000000000001111H,0000000000000100H,CODE SEGMENT ASSUME CS:CODE,SS:SSTACK START: MOV CH,4 ;循环次数 MOV CL,4 ;移位次数 NEXT: ROL BX,CL MOV AX,BX AND AX,0FH PUSH AX DEC CH JNZ NEXT MOV AH,4CH INT 21H
51、 CODE ENDS END START,分析: (1)入栈四次,循环完成。 未学循环指令,如何解 决:设置计数器,判断 计数器是否为0实现。 (2)每次入栈四位,如何从 16位中提取四位:移位 和逻辑操作完成(注意 原数据的保留) (3)注意每次入栈的数据是 16位,SSTACK SEGMENT PARA STACK DW 80 DUP (0) SSTACK ENDS,3.5 循环程序结构与设计,一、循环程序的组成与结构,1循环程序的组成 一个循环程序通常由以下5个部分组成: (1)初始化部分 (2)工作部分 (3)修改部分 (4)控制部分 (5)结束处理部分,(设置循环的初始状态),循环体
52、,2、循环程序的结构形式,循环程序有两种结构形式: (1)“先执行,后判断”结构 (2)“先判断,后执行”结构,初始化,循环体,N,Y,DO-UNTIL 结构,初始化,循环体,循环控制 条件,Y,N,DO-WHILE 结构,二、循环指令,循环指令 OPCODE OPR LOOP LOOPZ/LOOPE LOOPNZ/LOOPNE,注意: 使用CX寄存器做循环计数; OPR必须指定一个表示转向地址的标号(符号地址),而在机器 指令里则用8位位移量来表示转向地址与当前IP值之差。即只能使 用段内直接短转移的寻址方式; 循环指令的执行不影响标志位。,执行的步骤: (1)(CX) (CX)-1 (2)
53、检查是否满足测试条件,如满足就转向由OPR指定的转向地址去执 行,即实行循环;如不满足则IP不变,退出循环,程序继续执行。,指令格式: LOOP OPR 测试条件:(CX)0,执行的步骤: (1)(CX) (CX)-1 (2)检查是否满足cx0,如满足则转向有OPR指定的转向地址去执 行,即实行循环; 如不满足则IP不变,退出循环,程序继续执行。,1、循环指令LOOP,LOOP指令的程序结构和框图:,MOV CX,N AGAIN: LOOP AGAIN,(CX) 循环次数,循环体,(CX) (CX)-1,(CX) 0?,N,Y,循环体,【例3.16】有一个首地址为ARRAY的M字数组,试编程求
54、出该数组的 内容之和(不考虑溢出),并把结果存入TOTAL中。,分析: 多字数组求和,要多次使用加法指令,可用循环实现; 循环次数的确定,一般求和可确定和初值为0,进而与数组内容求和,因而循环次数为数组元素的个数M; 循环体的内容: 加法指令 修改地址指针,MOV CX,M MOV AX,0 MOV SI,AX AGAIN: ADD AX,ARRAYSI ADD SI,2 LOOP AGAIN MOV TOTAL,AX,LOOP指令应用举例,LOOP AGAIN,DEC CX JNZ AGAIN,DEC BX JNZ AGAIN,多重循环中CX的保留和恢复,MOV CX,M AGAIN: .
55、PUSH CX MOV CX,N NEXT: . LOOP NEXT . POP CX LOOP AGAIN,MOV BX,M AGAIN: . MOV CX,N NEXT: . LOOP NEXT . DEC BX JNZ AGAIN, 指令格式:LOOPZ/LOOPE OPR 测试条件:ZF=1且(CX)0,执行的步骤: (1)(CX) (CX)-1 (2)检查是否满足ZF=1且cx0 ,如满足则转向由OPR指定的转向地 址去执行,即实行循环; 如不满足则IP不变,退出循环,程序继续执行。,2、当为零或相等时循环指令LOOPZ/LOOPE,注意:对于LOOPZ/LOOPE指令而言,有两种退
56、出情况: (1)(CX)=0时,正常退出; (2)当ZF=0时,无论(CX)为何值,均提前退出循环。,循环体,(CX)=0?,N,N,ZF=0?,Y,Y,LOOPZ/LOOPE指令框图:,提前退出,正常退出,3、当不为零或不相等时循环LOOPNZ/LOOPNE 指令格式:LOOPNZ/LOOPNE OPR 测试条件:ZF=0且(CX)0,执行的步骤: (1)(CX) (CX)-1 (2)检查是否满足ZF=0且cx0 ,如满足则转向由OPR指定的转向地 址去执行,即实行循环; 如不满足则IP不变,退出循环,程序继续执行。,注意:对于LOOPNZ/LOOPNE指令而言,有两种退出情况: (1)(CX)=0时,正常退出; (2)当ZF=1时,无论(CX)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 防水修缮合同范本
- 借款融资居间服务合同范本
- 加梯安装合同范例
- 医生技术股协议合同范本
- 单位灯具购买合同范本
- 修车合同范本模板
- 农村建房买房合同范本
- 农村猪场合同范本
- 人事专员劳务合同范本
- 劳务供销合同范例
- 销售人员商务礼仪培训通用课件
- 全国各省(直辖市、自治区)市(自治州、地区)县(县级市)区名称一览表
- 大学美育导引 课件 第五章 体验人生在世-戏剧
- 大学美育导引 课件 第六章 沉浸光影世界-电影
- 化学品危险物质替代技术
- 医院收费价格注意培训课件
- 临港产业基地污水处理厂提标改造工程设备及安装工程招投标书范本
- 中小学校课外读物负面清单管理措施
- 高精度卫星定位授时系统
- 中医学教学课件经络与穴位
- 第1课+古代亚非【中职专用】《世界历史》(高教版2023基础模块)
评论
0/150
提交评论