第4章-基本指令系统与顺序结构程序设计课件_第1页
第4章-基本指令系统与顺序结构程序设计课件_第2页
第4章-基本指令系统与顺序结构程序设计课件_第3页
第4章-基本指令系统与顺序结构程序设计课件_第4页
第4章-基本指令系统与顺序结构程序设计课件_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

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

文档简介

本章主要教学内容1.汇编语言的基本指令格式及应用;2.顺序结构程序的设计方法。本章主要教学目的及要求1.理解汇编语言的基本指令格式;2.掌握顺序结构程序的设计方法,能利用汇编语言基本指令熟练进行顺序结构程序设计。教学重点及难点:汇编语言基本指令的格式及应用。10/6/20231本章主要教学内容1.汇编语言的基本指令格式及应用;本章主要教存储器内容传送到段寄存器(CS除外)例:MOVESI,EDIMOV[2000H],CXMOVDS,BX

段寄存器内容送通用寄存器、存储器

格式:MOVDST,SRC功能:将源操作数SRC的内容传送到目标操作数寄存器内容传至寄存器、存储器、段寄存器(CS除外)

存储器内容传送至通用寄存器

例:MOVBL,44MOV[DI],78H

4.1基本指令系统4.1.1数据传送指令

功能:把数据、地址或立即数传送到寄存器或存储单元中

MOV指令

立即数传送至通用寄存器、存储单元例:MOVEAX,[BX]

例:MOVDS,[2000H]

例:MOVBX,ES

MOVBX,ES1.通用传送指令10/6/20232存储器内容传送到段寄存器(CS除外)例:MOVESI,ED寄存器之间交换寄存器和存储单元之间交换

格式:XCHGOPR1,OPR2功能:完成OPR1操作数与OPR2操作数内容的交换

例:XCHGEAX,EDX

例:XCHGAL,[SI]

XCHG指令10/6/20233寄存器之间交换寄存器和存储单元之间交换格式:XCHGO2.堆栈操作

PUSH指令

指令POP指令

特点:堆栈是一个先进后出的数据结构,SS记录其段地址,栈顶用SP指定。栈顶地址较小(低端),栈底不变。格式:PUSHSRC/PUSHA/PUSHAD/PUSHF/PUSHFD功能:将源操作数内容压栈,同时自动修改栈顶指针

例:PUSH[BX]PUSHAX格式:POPDST/POPA/POPAD/POPF/POPFD

功能:从堆栈弹出数据

例:POPDXPOPES注意:出栈的顺序与入栈的顺序恰好相反10/6/202342.堆栈操作PUSH指令指令POP指令特点:堆栈是一个3.地址传送指令功能:用来传送操作数的地址。LEA指令

指令类型格式:LEAREG,SRC功能:源操作数的有效地址(偏移地址)送指定寄存器注意:SRC是一个存储单元例:LEAAX,NUMB

LDS指令

格式:LDSREG,SRC功能:将SRC存储单元存放的4个字节送指定的寄存器REG和DS,其中(SRC)→REG,(SRC+2)→DS例:LDSDI,LIST

LES/LFS/LGS/LSS指令

格式:同LDS功能:将存储在SRC中的地址送REG寄存器和相应的段寄存器

10/6/202353.地址传送指令功能:用来传送操作数的地址。LEA指令指令4.标志位传送指令LAHF指令

标志位传送指令格式:LAHF功能:将标志寄存器的最右8位送AH寄存器SAHF指令

格式:SAHF功能:将AH内容送标志寄存器的最右8位5.输入输出指令实现CPU和I/O端口之间的通讯。10/6/202364.标志位传送指令LAHF指令标志位传送指令格式:LAHF6.其它数据传送指令XLAT换码指令其它数据传送指令格式:XLAT或XLATOPR功能:将AL与BX内容之和为偏移地址的存储单元内容送入AL例:MOVAL,5MOVBX,offsetK5XLAT执行情况如下:结果为:AL=32AL=5K51248163264MOVSX符号扩展指令格式:MOVSXOPR1,OPR2功能:将OPR2中的数据符号扩展后送至OPR1MOVZX零扩展指令格式:MOVZXOPR1,OPR2功能:将OPR2中的数据零扩展后送至OPR1说明:(1)MOVSX和MOVZX中源操作数长度是目标操作数的一半。(2)MOVSX将目的操作数的高一半全部以源操作数的符号位填充。(3)零扩展指将目的操作数的高一半以0填充。BSWAP指令格式:BSWAPreg32功能:将reg32寄存器第一字节和第四个字节交换,第二字节和第三字节交换。10/6/202376.其它数据传送指令XLAT换码指令其它数据传送指令格式:4.1.2算术运算指令常用标志位CF(进位标志)含义:最高位有进位或借位,则CF置“1”,否则置“0”AF(辅助进位标志)含义:低半字节有进位或借位,则AF置“1”否则置“0”SF(符号标志)含义:算术或逻辑运算结果为正,SF置“0”,为负则置“1“ZF(零标志)含义:算术或逻辑运算结果为0,ZF置“1”,否则置“0”PF(奇偶标志)含义:算术或逻辑操作结果的低8位含有偶数个“1”,则PF置“1”,否则置“0”OF(溢出标志)含义:若两个操作数的符号相同而结果的符号与之相反则OF置“1”,否则置“0”10/6/202384.1.2算术运算指令常用标志位CF(进位标志)含义:最例:实现BX-AX和DX-CX相加,结果存放在BX-AX。SUM32PROCNEARADDAX,CXADCBX,DXRETSUM32ENDP1.加法指令加法指令ADD格式:ADDDST,SRC功能:将源操作数和目标操作数相加,结果送入目标操作数例:求NUM和NUM+1单元内字节数据和的程序段。MOVDI,OFFSETNUMMOVAL,0ADDAL,[NUM]ADDAL,[NUM+1]

例:ADDAL,BLADDCL,44ADD[BX],ALADC格式:ADCDST,SRC功能:将源操作数、目标操作数和CF的值相加送目标操作数例:ADCAL,AHADCAX,[BX]INC格式:INCOPR功能:将除段寄存器以外任何存储器或存储单元内容加1例:INCBLINCWORDPTR[BX]XADD格式:XADDDST,SRC功能:将目标操作数和源操作数相加,和数放在目标操作数中,原目标操作数内容送入源操作数例:XADDBL,DL10/6/20239例:实现BX-AX和DX-CX相加,结果存放在BX-AX。1格式:CMPXCHGDST,SRC功能:将目标操作数和累加器内容比较,若相等则将源操作数复制到目标操作数,否则将目标操作数复制到累加器相减后的差存在AL,标志位变化如下:ZF=0,CF=1,AF=1,SF=1,OF=0,PF=1格式:SBBDST,SRC功能:从目标操作数中减去源操作数和CF,结果存入目标操作数

格式:CMPOPR1,OPR2功能:用目标操作数减去源操作数,根据结果设置标志位执行结果:DX.AX=02344652H -F0F0F0F0H =11435562H例:movax,0ff64hnegal

;ax=ff9ch,OF=0、SF=1、ZF=0、PF=1、CF=1格式:NEGOPR功能:使操作数按位求反再加1,结果送入目标操作数例:movax,4652h subax,0f0f0h movdx,0234h sbbdx,0f0f0h2.减法指令减法指令SUB格式:SUBDST,SRC功能:从目标操作数中减去源操作数,结果存入目标操作数例:实现36H减去48H,分析标志位的变化情况。MOVAL,36HSUBAL,48H例:SUBDX,MATH[SI]SUB[BP]BALANCE,1000SUBECX,EBPSBB例:SBBAH,ALSBBDI,[BP+2]DEC格式:DECOPR功能:将目标操作数减1例:DECAL

NEGCMP例:CMPBX,CXCMP[BP+2],SICMPAL,00010000BCMPXCHG例:CMPXCHGCX,DX

注意:该指令只用于80486/Pentium微处理器10/6/202310格式:CMPXCHGDST,SRC相减后的差存在AL,标乘法指令对标志的影响:MUL指令-若乘积的高一半(AH或DX)为0,则OF=CF=0;否则OF=CF=1IMUL指令-若乘积的高一半是低一半的符号扩展,则OF=CF=0;否则均为1,对标志位AF、PF、ZF、SF无定义乘法指令应用举例:无符号:moval,0b4h movbl,11h mulbl ;例:IMULDHIMULWORDPTR[SI]

IMULEDI有符号:moval,0b4h movbl,11h Imulbl

3.乘法指令乘法指令MUL格式:MULSRC功能:将累加器(EAX,AX或AL)与源操作数作为无符号数相乘例:MULCLMULCXMULECX;AL乘CL,无符号的积存在AX中;AX乘CX,无符号的积存在DX-AX中;EAX乘ECX,无符号的积存在EDX-EAX中IMUL格式:IMULSRC功能:将累加器(EAX,AX或AL)与源操作数作为有符号数相乘;AL乘DH,有符号的积存在AX中;AX内容与SI寻址的存储单元中字内容相乘,结果送DX-AX;EAX中内容与EDI中的带符号数相乘,结果送EDX-EAX;OF=CF=1,AX高8位不为0;OF=CF=1,AX高8位含有效数字10/6/202311乘法指令对标志的影响:乘法指令应用举例:例:IMULDH有4.除法指令除法指令DIV格式:DIVSRC功能:将两个无符号数相除注意:SRC为8位,目标操作数→AX,商→AL中,余数→AH;SRC为16位,目标操作数高位字→DX,低位字→AX,商→AX,余数→DX;SRC为32位,目的操作数高32位→EDX,低32位→EAX例:DIVCLDIVCXDIVDWORDPTR[SI]IDIV格式:IDIVSRC功能:将两个有符号数相除例:IDIVCLIDIVCXIDIVDWORDPTR[SI]除法指令应用举例:无符号movax,0400h movbl,0b4h divbl;商al=05h=5余数ah=7ch=124有符号movax,0400h movbl,0b4h idivbl;商al=f3h=-13余数ah=24h=3610/6/2023124.除法指令除法指令DIV格式:DIVSRC注意:例:例:将存放在AL中的带符号数-87,除以CL中的带符号数21CBWIDIVCL格式:CWB功能:将(AL)的符号位扩充到AH中符号扩展指令概念:用一个操作数的符号位(即最高位)形成另一个操作数,后一个操作数的各位是全0(正数)或全1(负数)注意:符号扩展不改变数据大小,不影响标志位指令类型CBWCWD格式:CWD功能:将(AX)的符号位扩充到DX中CDQ格式:CDQ功能:将(EAX)的符号位扩充到EDX-EAX中执行CBW指令后,AX=1111111110101001B=-87D执行IDIVCL指令后,AL=-4D=11111100BAH=-3D=11111101B10/6/202313例:将存放在AL中的带符号数-87,除以CL中的带符号数21例题:算术综合运算(V-(X*Y+Z-540))/X其中X、Y、Z、V均为16位带符号数,已分别装入X、Y、Z、V单元中,要求上式计算结果,并把商存入W单元,余数存入W+2单元中。MOVAX,XSUBCX,540MOVW+2,DXIMULYSBBBX,0MOVCX,AXMOVAX,VMOVBX,DXCWDMOVAX,ZSUBAX,CXCWDSBBDX,BXADDCX,AXIDIVXADCBX,DXMOVW,AX10/6/202314例题:算术综合运算(V-(X*Y+Z-540))/X其中X4.1.3十进制算术运算指令十进制数的表示:BCD码BCD码压缩BCD码含义:四位二进制数表示一位十进制数非压缩BCD码含义:八位二进制数表示一位十进制数例:对于37的表示压缩BCD码为37H

非压缩BCD码为0307H十进制数的运算步骤:1.对BCD码进行二进制运算2.用十进制调整指令进行调整10/6/2023154.1.3十进制算术运算指令十进制数的表示:BCD码BC例:试完成压缩BCD码表示的17加18,结果放DL。MOVAL,17HADDAL,18HDAAMOVDL,AL1.压缩的BCD码调整指令DAA格式:DAA指令功能:①AF=1或AL低四位为A-F,则AL+06H→AL,1→AF②CF=1或AL高四位为A-F,则AL+60H→AL,1→CF压缩的BCD码调整指令DAS格式:DAS指令功能:①AF=1或AL低四位为A-F,则AL-06H→AL,1→AF②CF=1或AL高四位为A-F,则AL-60H→AL,1→CF执行情况:0001011117的BCD码+0001100018的BCD码00101111错误结果00101111错误结果+00000110加06H调整00110101正确结果10/6/202316例:试完成压缩BCD码表示的17加18,结果放DL。1.压缩例:将DL中存放的一位非压缩BCD加上8,结果存入DXMOVAL,DLADDAL,8AAAMOVDX,AX2.非压缩的BCD码调整指令AAA格式:AAA功能:①AL低4位在0~9之间且AF=0则转③②AL低4位在A~F之间或AF=1,则AL+06H→AL,AH+1→AH,AF=1③清除AL寄存器的高四位④AF→CF非压缩的BCD码调整指令AAS格式:AAS功能:①AL低4位在0~9之间且AF=0则转③②AL低4位在A~F之间或AF=1,则AL-06H→AL,AH-1→AH,AF=1③清除AL寄存器的高四位④AF→CF10/6/202317例:将DL中存放的一位非压缩BCD加上8,结果存入DX2.非例:将DL(假定为9)中存放的一位非压缩BCD码乘以7,结果以非压缩BCD码的形式存放在DX中。MOVAL,DLMUL7AAMMOVDX,AX2.非压缩的BCD码调整指令AAM格式:AAM功能:①AL/0AH,商→AH,余数→AL②根据AL内容设置标志位SF、ZF和PF

非压缩的BCD码调整指令AAD格式:AAD功能:(AL)←0AH*(AH)+(AL),(AH)←0

例:完成非压缩BCD码36除以6的运算。MOVAX,0306HMOVBL,06HAADDIVBL注意:非压缩BCD码除法调整是先调整后运算10/6/202318例:将DL(假定为9)中存放的一位非压缩BCD码乘以7,结2例:将一位十进制数转化成相应的ASCII码MOVAL,09HORAL,30H

1.逻辑运算指令NOT格式:NOTOPR功能:将给定的操作数按位求反,且不影响标志位逻辑运算指令OR格式:ORDST,SRC功能:将源与目标操作数按位“或”运算,结果送目标操作数AND格式:ANDDST,SRC功能:将源与目标操作数按位“与”运算,结果送目标操作数例:将某一位十进制数的ASCII码转化成十进制数MOVAL,37HANDAL,0FHXOR格式:XORDST,SRC功能:将源与目标操作数按位“异或”运算,结果送目标操作数例:判断EAX的内容是否为78963D0FHXOREAX,7896D0FHJEMATCH例:将CX置为0XORCX,CXTEST格式:TESTOPR1,OPR2功能:将两个操作数按位进行逻辑“与”运算,不存结果,只根据特征设置状态位例:测试AL第二位是否为1,为1则转到EXIT执行。MOVDL,ALNOTDLTESTDL,00000100BJEEXIT4.1.4逻辑运算指令

10/6/202319例:将一位十进制数转化成相应的ASCII码1.逻辑运算指令N2.位操作指令位测试指令格式:BTOPR1,OPR2功能:测试OPR1中由OPR2指定的位,将测试位复制到CF位操作指令BT格式:BTCOPR1,OPR2功能:测试OPR1中由OPR2指定的位,测试位→CF并求反BTC格式:BTROPR1,OPR2功能:测试OPR1中由OPR2指定的位,测试位→CF并清0BTR格式:BTSOPR1,OPR2功能:测试OPR1中由OPR2指定的位,测试位→CF并置1BTS例:用位测试指令清除CX的位0和位1,置位CX的位9和位10,并且取反CX的位12。BTSCX,9BTSCX,10BTRCX,0BTRCX,1BTCCX,12位扫描指令格式:BSFOPR1,OPR2功能:从左至右扫描OPR2第一个含“1”的位,位号送OPR1BSF格式:BSROPR1,OPR2功能:从右至左扫描OPR2第一个含“1”的位,位号送OPR1BSR例:设AX中存有16位图形信息,要求仅保留可能有的最左和最右各一位为1的位。XORDX,DXBSFCX,AXJZSHORTDONEBTSDX,CXBSRCX,AXJZSHORTDONEBTSDX,CXDONE:MOVAX,DX

10/6/2023202.位操作指令位测试指令格式:BTOPR1,OPR2位操作3.移位指令逻辑移位移位指令逻辑左移格式:SHLOPR,CNT

功能:逻辑右移格式:SHROPR,CNT

功能:例:设DL中存有一个压缩BCD码,将它转换为两位ASCII码,结果存放在AX中。MOVAL,DLMOVCL,4SHRAL,CLORAL,30HMOVAH,ALANDDL,0FHORDL,30HMOVAL,DL

算术移位算术左移格式:SALOPR,CNT

功能:算术右移格式:SAROPR,CNT

功能:例:分析执行下面程序段后AL中的内容程序段1:MOVAL,255MOVCL,3SARAL,CL程序段2:MOVAL,255MOVCL,3SHRAL,CL0CFOPR0OPRCF0CFOPROPRCF10/6/2023213.移位指令逻辑移位移位指令逻辑左移格式:SHLOPR,ROLreg/mem,1/CL ;不带进位循环左移RORreg/mem,1/CL ;不带进位循环右移

RCLreg/mem,1/CL ;带进位循环左移RCRreg/mem,1/CL ;带进位循环右移示意图示意图循环移位指令10/6/202322ROLreg/mem,1/CL ;不带进位循环左移ROR带进位循环移位指令10/6/202323带进位循环移位指令8/1/202323OPR1OPR2CF双精度移位指令双精度左移指令格式:SHLDOPR1,OPR2,CNT功能:双精度右移指令格式:SHRDOPR1,OPR2,CNT功能:OPR2OPR1CF10/6/202324OPR1OPR2CF双精度移位指令双精度左移指令格式:SH双精度移位指令应用举例【例4-35】

MOVEAX,01234567HMOVEBX,5ABCDEF9HSHRDEAX,EBX,4SHRDEAX,EBX,8;EAX=90123456H,CF=0,OF=1;EAX=F9012345H,CF=1,OF=010/6/202325双精度移位指令应用举例【例4-35】;EAX=9012344.条件设置指令格式:SETccOPRcc是指令助记符的一部分,表示条件OPR只能是8位寄存器或者存储单元功能:测试指令规定的条件,若为“真”,则将OPR置成1,否则置成0指令格式不溢出置OPR为1

功能说明测试条件SETZOPRSETEOPR等于0或者相等时,置OPR为1ZF=1SETNZOPRSETNEOPR不等于0或者不相等时,置OPR为1ZF=0SETSOPR为负置OPR为1SF=1SETNSOPR为正置OPR为1SF=0SETOOPR溢出置OPR为1OF=1SETNOOPROF=0SETPOPRSETPEOPR偶置OPR为1PF=110/6/2023264.条件设置指令格式:SETccOPRcc是指令助记符的条件设置指令的应用例:测试寄存器EAX中八位16进制数是否有一位为0,若有BH不等于0,否则BH=0。MOVBH,0MOVCX,8NT:TESTAL,0FHSETZBLORBH,BLROREAX,4LOOPNT10/6/202327条件设置指令的应用例:测试寄存器EAX中八位16进制数是否有4.1.5处理机控制指令

1.标志位处理指令格式:CLC功能:CF←0标志位处理指令CLC特点:只影响本指令指定的标志位,不影响其他标志位

格式:CLC功能:CF←CF求反CMC格式:STC功能:CF←1STC格式:CLD功能:DF←0CLD格式:STD功能:DF←1STD格式:CLI功能:IF←0CLI格式:STI功能:IF←1STI10/6/2023284.1.5处理机控制指令1.标志位处理指令格式:CLC标2.其它处理机控制指令其它处理机控制指令格式:NOP功能:空操作NOP格式:HLT功能:停机HLT格式:WAIT功能:等待WAIT格式:ESCmem功能:换码ESC格式:LOCK功能:封锁LOCK10/6/2023292.其它处理机控制指令其它处理机控制指令格式:NOPNOP格4.2顺序结构程序设计

顺序结构程序在设计上比较简单,它按指令书写的先后次序执行一系列操作,这种程序也称为直线程序。组成输入数据已知的数据,即让计算机进行运算的对象处理根据问题的需要对输入数据进行相应的运算处理输出结果将运算处理的结果输出基本语句:数据传送指令、算术运算指令和逻辑运算指令执行过程:指令2指令n开始结束10/6/2023304.2顺序结构程序设计顺序结构程序在设计上比较顺序结构程序设计举例

例:对于三个8位无符号数86H、34H和21H,编写R=86H*34H-21H的程序。DATASEGMENTNUMDB86H,34H,21HRESULTDW?DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXLEASI,NUMLEADI,RESULTMOVAL,[SI]MOVBL,[SI+1]MULBLMOVBL,[SI+2]MOVBH,0SUBAX,BXMOV[DI],AXMOVAH,4CHINT21HCODEENDSENDSTART取操作数1取操作数2求乘积取操作数3将减数扩展为16位做减法结果送指定处开始结束10/6/202331顺序结构程序设计举例例:对于三个8位无符号数86H、34H例:将字节存储单元A中的内容左移4位,B中的内容右移一位。要求移位后的空位为0。DATASEGMENT ADB34HBDB0A2HDATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVCL,4SHLA,CLSHRB,1MOVAH,4CHINT21HCODEENDSENDSTART移位次数送CLA左移4位B右移1位开始结束10/6/202332例:将字节存储单元A中的内容左移4位,B中的内容右移一位。要例:以BUF为首址的内存中存有0~15的平方值表。查表求X单元中数(在0~15之间)的平方值,并送回X单元DATASEGMENTBUFDB0,1,4,9,16,25,36,49,64,81,100,121,144,169,196,225XDB12DATAENDSSTACKSEGMENTSTACK‘STACK’DB100DUP(?)STACKENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACKSTART:MOVAX,DATAMOVDS,AXMOVSI,OFFSETBUFXORAX,AX MOVAL,XADDSI,AXMOVAL,[SI]MOVX,ALMOVAH,4CHINT21HCODEENDSENDSTART取表的首地址取要求值的数查表求其平方值开始结束10/6/202333例:以BUF为首址的内存中存有0~15的平方值表。查表求X单例:把在存储单元A和B中的两个压缩BCD数相加,结果存入存储单元CDATASEGMENTADB34HBDB52H CDB2DUP(?)DATAENDSCODESEGMENTASSUMECS:CODE.DS:DATASTART:MOVAX,DATAMOVDS,AXMOVAL,AADDAL,BDAAMOVC,ALLAHFANDAH,01HMOVC+1,AHMOVAH,4CHINT21HCODEENDSENDSTART取数二进制加法运算压缩BCD码调整存结果开始结束10/6/202334例:把在存储单元A和B中的两个压缩BCD数相加,结果存入存储例:两个32位无符号数乘法程序+ABCDB×DA×DB×CA×C部分积1部分积2部分积3部分积4最后乘积×32位数乘法示意图32位数乘法流程图与前面的对应16位相加保存进位位A*C=部分积4设地址指针被乘数的低16位

温馨提示

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

评论

0/150

提交评论