汇编程序的设计方法.ppt

上传人:za****8 文档编号:14127606 上传时间:2020-07-04 格式:PPT 页数:32 大小:354.51KB
收藏 版权申诉 举报 下载
汇编程序的设计方法.ppt_第1页
第1页 / 共32页
汇编程序的设计方法.ppt_第2页
第2页 / 共32页
汇编程序的设计方法.ppt_第3页
第3页 / 共32页
资源描述:

《汇编程序的设计方法.ppt》由会员分享,可在线阅读,更多相关《汇编程序的设计方法.ppt(32页珍藏版)》请在装配图网上搜索。

1、第三章汇编程序的设计方法,31顺序程序设计一、乘法指令1、无符号数乘法指令MUL格式:MUL源(mem、reg)功能:累加器(AL/AX)内容与源操作数相乘,结果存于AX/DX+AX。,字节乘法,AX,字乘法,隐含寻址,例:MULBX;,AXBX的积存于DX+AX,MULBYTEPTRSI;,ALSI间接寻址的mem单元中的数据,乘积存于AX,说明:运算结果影响CF、OF,对AF、PF、SF、ZF未定义,若乘积的AH/DX0,则CF=OF=1,说明AH/DX中有数据,否则,CF=OF=0。,2、有符号数乘法指令IMUL说明:除了对象是有符号数,其余思路、格式等与MUL相同。例:计算AL=FEH

2、,CL=11H的积。MULCLIMULCL注:运算结果影响CF、OF。CF=OF=0,说明积的高半部分是符号扩展;CF=OF=1,说明积的高半部分有有效数据;另:同样两个数,用MUL、IMUL指令后,运算结果不同。无符号数用MUL,有符号数用IMUL看书例P81,结果:FEH11H=10DEH,CF=OF=1,结果:FEH11H=FFDEH,CF=OF=0,二、除法指令看书图,对比乘法指令学习。三、扩展指令1、字节转换为字CBW功能:按AL的符号位扩展到整个AH中。字节除法之前,用该指令产生双字节被除数。例:MOVAL,24HCBW例:MOVAL,84HCBW规则:当AL80H时,AH=00H

3、AL80H时,AH=FFH,结果:AX=0024H,结果:AX=FF84H,2、字转换为双字CWD功能:按AX的符号位扩展到整个DX中。字除法之前,用该指令产生双字被除数。规则:当AX8000H时,DX=0000HAX8000H时,DX=FFFFH四、综合程序举例看书P84例,32分支程序设计分支程序:根据不同条件转向不同程序段执行的结构。转移指令一、无条件转移指令JMP1、直接转移指令(1)段内直接转移格式:JMP标号说明:标号也称符号地址,它表示转移的目的地。例:JMP2500H,段内转移段间转移,直接,间接,直接,间接,转去执行CS:2500H单元的指令,(2)段间直接转移格式:功能:将

4、指令操作码后连续两个字作为立即数,用来修改CS:IP的内容,然后转向新的CS:IP指向的地址。例:JMP8000H:1200H,计算出物理地址=81200H,程序转向从该单元开始的指令继续执行,2、间接转移指令(1)段内间接转移说明:转移地址为指令指定的16位reg或mem,可采用各种寻址方式。格式:JMP目标例:JMPBXJMPWORDPTRBX+DI(2)段间间接转移例:JMPDWORDPTRBX功能:转向BX指向的32位存储器地址,将连续4个单元的内容低字送IP,高字送CS。,程序转向新的CS:IP指向的单元存储的指令继续执行。,总结:区分段内段间:看指令中给出的地址是几个一个地址(16

5、位)段内二个地址(32位)段间区分直接间接:看指令中的地址是直接给出(立即数/标号),还是间接放在寄存器或存储器中。,二、条件转移指令格式:JcondOPRD功能:当满足一定的条件时,转移到指定的地址,否则,将顺序执行下条指令。说明:当条件cond成立,(IP)+偏移地址IP当条件cond不成立,(IP)+2IP所有条件转移指令都是直接寻址方式的短转移。1、简单的条件转移指令仅根据一个可测试标志位实现转移的指令。注:G大于L小于E等于N不A高于B低于,表31简单的条件转移指令,2、无符号数条件转移指令3、符号数条件转移指令三、分支程序举例看P96例3.7画出程序流程图,表32无符号数条件转移指

6、令,33循环程序设计一、基本结构循环一般由4部分构成:1、循环初态(初始化/准备)循环工作部分初态循环结束条件初态2、循环体:就是要求重复执行的程序段部分,是循环程序的主体。,(设置地址指针、某些标志位等,使某些寄存器清0),(一般置以循环次数,eg:上例中CX=8),3、循环的修改:修改结束条件。常见的就是计数的,当循环了一定次数后,就结束循环,在微机中,常用一个内部寄存器,作为计数器,通常给这个计数器赋予循环次数初值,每循环一次令其减1,当计数器减为0时,就停止循环。4、循环的控制:每循环一次,就检查循环结束条件,满足条件就停止循环,顺序向下执行。否则,跳转到循环主体的开始,继续循环。二、

7、重复控制指令1、格式:LOOPshortlable说明:(1)指令执行:CX1CX,若CX0则程序跳转到shortlable指向的指令执行;否则退出循环。(2)循环次数在CX中。(3)转移的目标地址是以当前IP为中心的128+127的范围内,故称为短/近转移。,LOOP=DECCXJNZshortlable2、LOOPZ/LOOPE指令格式同LOOP指令3、LOOPNZ/LOOPNE指令格式同LOOP指令,ZF=1或CX=0,计数非0且结果非0循环,LOOPNZ/LOOPNEshortlable,ZF=0或CX=0,计数非0且结果为0循环,LOOPZ/LOOPEshortlable,CX=0,

8、计数非0循环,LOOPshortlable,结束条件,功能,格式,三、循环程序设计方式及举例1、计数控制的循环程序例:编写程序,统计字变量W中有多少位1,并将结果存入字节变量N中。,N+1,Y,修改判断结束,N,Y,N,END,开始,MOVN,0MOVCX,16AGAIN:SHLW,1JNCNOINCINCNNOINC:LOOPAGAIN,例:书P97例3.10MOVCX,4MOVSI,0ANDAX,AXAGAIN:MOVAL,BYTEPTRXSIADCAL,BYTEPTRYSIMOVZSI,ALINCSILOOPAGAINMOVZSI,0RCLZSI,1ret,34串处理程序设计规定:源串的

9、偏移地址由SI,段地址取自DS;目的串的偏移地址由DI,段地址取自ES。源串和目的串的偏移地址指针的移动方向由方向标志DF确定。DF=0,SI、DI增量DF=1,SI、DI减量一、方向标志修改指令1、置1指令格式:STD功能:将DF=1,则串操作时SI/DI的内容自动减量。,2、清0指令格式:CLD功能:将DF=0,则串操作时SI/DI的内容自动增量。二、串操作指令1、串传送指令(1)格式:MOVS目的串,源串MOVSB/MOVSW功能:从DS:SI指向的源操作数中取一字节/字,传送到ES:DI所指向的目的操作数中,并根据方向标志DF对SI/DI进行增量/减量修改,以指向下一个字节/字。,例:

10、MOVSBMOVSWMOVSES:BYTEPTRDI,DS:SI(2)重复前缀REP格式:REPMOVS/MOVSB/MOVSW功能:每完成1次串传送,CX减1,继续重复串传送,直到CX=0为止。执行:a、CX1CX;b、如CX=0则退出REP,否则继续执行;c、执行其后的MOVS串指令;d、重复ac。,将(DS:SI)ES:DI,且SI+1,DI+1,将(DS:SI)ES:DI(DS:SI+1)ES:DI+1,且SI再加1,DI再加1,该指令前期准备:a、将数据段中的源串首址送入SI;b、将(将要存放数据串的)附加段中的目的串首址送入DI;c、串长度送CX中;d、建立方向标志。例:自1000

11、H地址开始有一字符串,串长36H个字节,编程将该串传送到1200H地址开始的存储区中。,CLD,令DF=0STD,令DF=1,MOVSI,1000HMOVDI,1200HMOVCX,36HCLDREPMOVSBret,上述程序执行完后,(SI)=?(DI)=?(CX)=?,2、串比较指令(1)格式:CMPS目的串,源串CMPSB/CMPSW功能:取DS:SI指向的源串的一字节/字,减去ES:DI所指向的目的串的一字节/字,不回送结果,只影响标志位,并同时修改SI、DI以指向下一个字节/字。(2)当相等/为零时重复串操作格式:REPE/REPZCMPS/CMPSB/CMPSW功能:CX=0或ZF

12、=0(即某次比较的结果两个操作数不等)时退出,否则继续执行;(3)当不相等/不为零时重复串操作格式:REPNE/REPNZCMPS/CMPSB/CMPSW功能:CX=0或ZF=1(即某次比较的结果两个操作数相等)时退出,否则继续执行;,3、串扫描指令(1)格式:SCAS目的串SCASB/SCASW功能:用AL/AX中的内容减去ES:DI所指向的目的串中的一字节/字,不回送结果,只影响标志位,并同时修改DI以指向下一个字节/字。(2)格式:REPE/REPZREPNE/REPNZ功能:,注:源串隐含,SCAS/SCASB/SCASW,MOVAX,8000HMOVES,AXMOVDI,1000HM

13、OVCX,32HCLDMOVAL,12HREPNESCASBDECDIMOVBX,DI,例:从8000H:1000H开始存放将一个50字节的字符串,从中找出数据12H,将存放此数据的单元的偏移地址存到BX,4、从源串中取串指令格式:LODS/LODSB/LODSW功能:从DS:SI指向的源串中取一个字节/字,送到AL/AX,同时修改SI指向下一字节/字。5、往目的串中存串指令格式:STOS/STOSB/STOSW功能:将AL/AX中的一字节/字存入到ES:DI指向的目的串去,同时修改DI指向下一字节/字。注:以上存、取串指令一般不加重复前缀,不影响标志位。例:将存储器中一个50字节的非零数组中

14、的正、负数分开,数组存放的首地址为1000H,存放正、负数的首址是2000H、3000H。,注:目的串隐含,注:源串隐含,CLDMOVSI,1000HMOVDI,2000HMOVBX,3000HMOVCX,32HLOOP1:LODSBTESTAL,80HJNZLLSTOSBJMPLRLL:XCHGBX,DISTOSBXCHGDI,BXLR:LOOPLOOP1ret,35子程序设计一、子程序的概念子程序是完成确定功能的独立的程序段,它可以被其他程序调用,在完成确定功能后,又可自动返回到调用程序处。,程序X,.,调用程序Y,程序Y,.,调用,返回,X是Y的主程序,Y是X的子程序,调用程序Z,程序Z

15、,二、参数传递主程序在调用子程序时,应为子程序提供运算所需的初始数据,而子程序返回时,也将运算结果提供给主程序,这些问题称为主程序与子程序间的参数传递。1、寄存器法:把参数放在CPU内部的reg中,通过reg来传递相应的信息。2、堆栈法:3、参数赋值法:三、子程序调用指令与返回指令1、调用指令CALL,主程序,子程序,入口参数,出口参数,直接,间接,(1)直接段内调用格式:CALLNEARPROC(NEAR型过程的符号地址)执行:a、IPHSP1IPLSP2;b、SP2SP;c、被调用子程序的16位偏移量IP。(2)直接段间调用格式:CALLFARPROC(FAR型过程的符号地址/程序名)执行

16、:a、CSHSP1、CSLSP2IPHSP3、IPLSP4;b、SP4SP;c、被调用子程序所在代码段段基址CS被调用子程序在所在代码段内的偏移量IP。例:CALL3000H:2100H,保护断点,保护断点,(3)间接段内调用入口地址由16reg/16men提供格式:CALL16reg/16men执行:a、IPHSP1IPLSP2;b、SP2SP;c、16reg/16menIP。例:CALLBXCALLWORDPTRBX,(4)间接段间调用格式:CALL32men执行:a、CSHSP1、CSLSP2IPHSP3、IPLSP4;b、SP4SP;c、32men低16位IP32men高16位CS。例:CALLDWORDPTRBX,若(DS)=6000H,(BX)=0560H,子程序入口地址如何载入?60561H、60560HIP60563H、60562HCS,2、返回指令RET格式:RETN(N为正偶数,可缺省)功能:将程序控制返回到主程序。(是CALL的逆操作)执行:段内返回:a、SPIPLSP1IPH;b、SP2SP;段间返回:a、SPIPL、SP1IPHSP2CSL、SP3CSH;b、SP4SP;看书P130例3.29,恢复断点,

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!