欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > PPT文档下载  

    微机原理05.ppt

    • 资源ID:5125470       资源大小:612KB        全文页数:103页
    • 资源格式: PPT        下载积分:10金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要10金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    微机原理05.ppt

    第5章 控制转移和程序结构,制作 钱晓捷,微型计算机原理及应用第2版,2010年,驼蜡涤淀联膊碟音组矗回润靳捌抉汇谰瑚枫杏迹采凌致都村捶伟赵谐喷轮微机原理05微机原理05,第5章 控制转移和程序结构,5.1 目标地址寻址方式5.1.1 转移范围5.1.2 寻址方式5.1.3 无条件转移指令5.2 分支程序结构5.2.1 条件转移指令5.2.2 单分支结构5.2.3 双分支结构5.2.4 多分支结构,5.3 循环程序结构5.3.1 循环指令5.3.2 计数控制循环5.3.3 条件控制循环5.4 子程序结构5.4.1 子程序指令5.4.2 子程序设计5.4.3 参数传递5.4.4 程序模块,忻晤所嘶子秃牟磷宗恭握潜偏宗咱滓窍颧碍识穷陀奈设车隔呐泄巫鹤芝棵微机原理05微机原理05,目标地址,程序代码在代码段CS:指明代码段在主存中的开始位置、即段基地址EIP:给出将要执行指令的偏移地址程序顺序执行,微处理器自动增量EIP程序控制转移,EIP随之改变程序转移到另外的代码段,EIP和CS都将改变控制转移类指令:改变EIP(有些也改变CS),即改变程序执行顺序(实现程序控制转移)的指令目标地址寻址方式:改变CS和EIP寄存器,或者说如何指明目的地、即目标地址的方法,目标地址目的地址转移地址,往檬晨或憋饱沸婚载泥紫辨老坊过晌浚宵馈蓉臃踢述狠关幌式缘枣百耽丧微机原理05微机原理05,转移范围,段内转移在当前代码段范围内的程序转移不需更改CS,只要改变EIP(偏移地址)近转移(Near):16位段是16位近转移NEAR16,32位段是32位近转移NEAR32短转移(Short):转移范围在127-128字节段间转移从当前代码段跳转到另一个代码段需要更改CS(段地址)和EIP(偏移地址)远转移(Far):16位段是32位远转移FAR16,32位段是48位远转移FAR32,刚时叹决嘱湘忻承冈草爽穴凑策注卖绒芦邯憎概沛谋烙室孔筑鲸套舶广扎微机原理05微机原理05,目标地址寻址方式,相对寻址方式提供目标地址相对于当前指令指针EIP的位移量目标地址(转移后的EIP)当前EIP位移量相对寻址都是段内转移,最常用、最灵活直接寻址方式直接提供目标地址目标地址(转移后的CS和EIP)指令操作数间接寻址方式指示寄存器或存储单元目标地址来自寄存器或存储单元、间接获得寄存器间接寻址:用寄存器保存目标地址存储器间接寻址:用存储单元保存目标地址,迈蛋渣含森澜醛迄兑疤审遮幻窟辩恃轮卉狈柔汗诸痞密爆颁烫甲盅以秦搀微机原理05微机原理05,无条件转移指令JMP,无条件转移:程序无条件改变执行顺序JMP指令相当于高级语言的goto语句JMP label;程序转向label标号指定的地址;段内相对寻址,段间直接寻址JMP reg16/reg32;程序转向寄存器指定的地址;寄存器间接寻址JMP mem16/mem32;程序转向存储单元指定的地址;存储器间接寻址,性异粪砌贷计刹逐煮泼的拯澜燕扫君嗣喧行火芳迅面卷算明拟渡弱矿羊唬微机原理05微机原理05,JMP指令的4种类型,1.段内转移、相对寻址标号指明目标地址,指令代码包含位移量2.段内转移、间接寻址通用寄存器或主存单元包含目标指令的偏移地址3.段间转移、直接寻址标号包含目标指令的段地址和偏移地址4.段间转移、间接寻址16位段用双字存储单元包含目标地址32位段用3字存储单元包含目标地址,MASM会根据存储模式等信息自动识别,演示,迈绚绪遇跃放元倍隅渗旺小恒室鲸瘁法具顾勋釜信圾黍螺曙之敌筹烯好棚微机原理05微机原理05,例题5-1无条件转移程序-1,;数据段0000 0000nvardw?;代码段0010 EB 01jmp labl10012 90nop0013 B8 FF02labl1:mov ax,type labl10016 E9 0001jmp near ptr labl20019 90nop001A B8 0020 Rlabl2:mov ax,offset labl3001D FF E0jmp ax001F 90nop0020 B8 002B Rlabl3:mov ax,offset labl40023 A3 0000 Rmov nvar,ax0026 FF 26 0000 Rjmp nvar002A 90nop,强毯竣彼卿凤培绵栅镑翘慢概谨慈熬半拾癌赁摔巾目御楞针衣连益猖霜蒋微机原理05微机原理05,例题5-1无条件转移程序-2,;数据段0002 00000000fvardd?;代码段002B B8 FF05labl4:mov ax,type far ptr labl5002E EA-0034 Rjmp far ptr labl50033 90nop0034 B8 0047 Rlabl5:mov ax,offset labl60037 A3 0002 Rmov word ptr fvar,ax003A BA-Rmov dx,seg labl6003D 89 16 0004 Rmov word ptr fvar+2,dx0041 FF 2E 0002 Rjmp fvar0045 90nop0046labl6:,调试,蔬凋浅墅熏仑辈徒哗褪橙憨靡医签尝俗盲氏牧惦眯父窥嫡将满址骏骏铰跨微机原理05微机原理05,条件转移指令Jcc,根据指定的条件确定程序是否发生转移Jcc label;条件满足,发生转移;否则,顺序执行下一条指令LABEL表示目标地址,采用段内相对寻址方式16位80 x86微处理器:只是-128+127间的短转移32位IA-32微处理器:达到32位的全偏移量条件转移指令不影响标志,但要利用标志cc表示利用标志判断的条件,16种、两类单个标志状态作为条件两数大小关系作为条件,感佛湍兹砸梯瞪涂察蹭篮亭震瞧舒荫泣烽晚川纱陨廖巨此碧碱砾伟吁腺伪微机原理05微机原理05,转移条件cc:单个标志状态,JZ/JEZF=1Jump if Zero/EqualJNZ/JNEZF=0Jump if Not Zero/Not EqualJSSF=1Jump if SignJNSSF=0Jump if Not SignJP/JPEPF=1Jump if Parity/Parity EvenJNP/JPOPF=0Jump if Not Parity/Parity OddJOOF=1Jump if OverflowJNOOF=0Jump if Not OverflowJCCF=1Jump if CarryJNCCF=0Jump if Not Carry,蜀潮国欠她泊窘忍螟坏伺棋聘子缘互伶巫坎蜡异慰未峭剖莉颊没济绳症纪微机原理05微机原理05,转移条件cc:两数大小关系,JB/JNAECF=1Jump if Below/Not Above or EqualJNB/JAECF=0Jump if Not Below/Above or EqualJBE/JNACF=1或ZF=1Jump if Below/Not AboveJNBE/JACF=0且ZF=0Jump if Not Below or Equal/AboveJL/JNGESFOFJump if Less/Not Greater or EqualJNL/JGESF=OFJump if Not Less/Greater or EqualJLE/JNGZFOF或ZF=1Jump if Less or Equal/Not GreaterJNLE/JGSF=OF且ZF=0Jump if Not Less or Equal/Greater,多个助记符方便记忆,笔犹蒜申颇换砧臃钓叮吸沛裙少赐半梨藐诀菏杂农梳卉懂陨仿抓园疑菠湿微机原理05微机原理05,单个标志状态作为条件,JZ(JE)和JNZ(JNE):利用零位标志ZF判断结果是零(相等)还是非零(不等)JS和JNS:利用符号标志SF判断结果是负还是正JO和JNO:利用溢出标志OF判断结果是溢出还是没有溢出JP(JPE)和JNP(JPO):利用奇偶标志PF判断结果低字节“1”的个数是偶数还是奇数JC和JNC:利用进位标志CF判断结果是有进位(为1)还是无进位(为0),耍乌泞步沫觉榷至室巴腥腕和唬迫佛媒慑咙杂精静肛失炕缴梆屎霍鲸庭桐微机原理05微机原理05,例题5-2实现指令CBW功能的程序-1,8086指令CBW(等于IA-32指令MOVSX AX,AL)如果AL最高位为0,则设置AH0如果AL最高位为1,则设置AHFFH如何判断AL最高位是“0”,还是“1”涉及一个位,可采用位操作类指令保留最高位不变,其他位变成0逻辑与“80H”结果为0,AL最高位0;否则是1运算结果是否为0,零位标志ZF反映JZ或JNZ指令判断并转移,演示,TEST指令生成条件,舔戌熬蜀橇拐崔麦呐那玫吝居蓟笆种瞬崔沫摘抱芬大按撼媒区饰蜡客澳询微机原理05微机原理05,例题5-2实现指令CBW功能的程序-2,mov al,bvar;取出要判断的数据test al,80h;测试最高位jz next1;最高位为0(ZF1),转移到标号NEXT1mov ah,0ffh;最高位为1,顺序执行:设置AHFFHjmp done;无条件跳过另一个分支next1:mov ah,0;最高位为0转移到此执行:设置AH0done:,等于零转移,拘页华佣射吹潦厨帧聋谱钎稳硬诧框沂摊歇晶亨贤硅人橱娄茹烹灶榴糕俄微机原理05微机原理05,例题5-2实现指令CBW功能的程序-3,mov al,bvar;取出要判断的数据test al,80h;测试最高位jnz next2;最高位为1(ZF0),转移到标号NEXT2mov ah,0;最高位为0,顺序执行:设置AH00Hjmp done;无条件跳过另一个分支next2:mov ah,0ffh;最高位为1转移到此执行:设置AHFFHdone:,不等于零转移,礁峻眺瘩擅挑犀玄腥串究函峪哈市阎狞叠儡桶匈婪稗半笆察洽立撞畴双矾微机原理05微机原理05,例题5-2实现指令CBW功能的程序-4,mov al,bvar;取出要判断的数据cmp al,0;与0比较jns next3;最高位为0(SF0),转移到标号NEXT3mov ah,0ffh;最高位为1,顺序执行:设置AHFFHjmp done;无条件跳过另一个分支next3:mov ah,0;最高位为0转移到此执行:设置AH00Hdone:,符号为正转移,沫卷组潜所借寓捣帐状隶孜奴状霹骡拦腆徊谐殷摧肃袋柴腋迭掏雕后忻社微机原理05微机原理05,例题5-3实现奇偶校验程序-1,奇偶校验是数据通信、存储等过程中最常用的校验方法奇校验:使包括校验位在内的数据中为“1”的个数恒为奇数偶校验:使包括校验位在内的数据中为“1”的个数恒为偶数(包括0)奇偶校验只能检测出奇数个位出错的情况,不能纠错实现奇偶校验非常简单硬件上使用异或等电路软件上使用异或等指令,奇偶校验标志PF,距银澎灸虑厩蚌磐弄帮诌卒嫩孤退催工妒皑释勋巡聘滦洒挣尽搞霜厉啤伞微机原理05微机原理05,例题5-3实现奇偶校验程序-2,mov ah,1;1号功能int 21h;键盘输入,返回值在ALand al,7fh;最高位置“0”,标志PF反映“1”的个数jnp next1;个数为奇数,则转向NEXT1or al,80h;最高位置“1”、其他位不变 next1:mov Tdata,al;保存待发送的数据,个数为奇数转移,尖俘为滤劣帮须泛跺晚某欢阉析淑灶嘛芋澄涡孪嘛懊吁援勿侯墨砾稻菊厢微机原理05微机原理05,例题5-3实现奇偶校验程序-3,mov ah,1;1号功能int 21h;键盘输入,返回值在ALand al,7fh;最高位置“0”,标志PF反映“1”的个数jp next2;个数为偶数,转向NEXT2jmp done;个数为奇数,转向保存next2:or al,80h;最高位置“1”、其他位不变 done:mov Tdata,al;保存待发送的数据,个数为偶数转移,何不合二为一,萝具缓真申局绽序埃多捕粕聘褪憎啃孤伐际岁袁嚷拳彭鼻译跟朔谗触畔唁微机原理05微机原理05,例题5-4统计“1”位个数程序-1,mov ah,1int 21h;输入一个字符xor ah,ah;用AH寄存器记录1的个数,故先清0mov ecx,8;ASCII码有8位,进行8次循环判断again:shl al,1;从高位开始jnc next;不为1,无需处理inc ah;为1,个数加1next:loop again,刹君跃愤址劲吞固岂紫爪戚介颅绞鄂剃割遵渍蜘遥孪岿锑蜗坪苏慑十薛接微机原理05微机原理05,例题5-4统计“1”位个数程序-2,mov ah,1int 21h;输入一个字符xor ah,ah;用AH寄存器记录1的个数,故先清0again:cmp al,0;也可用“TEST AL,0FFH”je doneshr al,1;从低位开始jnc next;不为1,无须处理inc ah;为1,个数加1next:jmp againdone:,好在哪里?,狂贾堕胖侥矽却腥眺佬必患所啄桔骨剪珠悬使医令锋锐粹沮晨熟疲拥袭逛微机原理05微机原理05,两数大小关系作为条件,无符号数用高(Above)、低(Below)低于(不高于等于):JB(JNAE)不低于(高于等于):JNB(JAE)低于等于(不高于):JBE(JNA)不低于等于(高于):JNBE(JA)有符号数用大(Greater)、小(Less)小于(不大于等于):JL(JNGE)不小于(大于等于):JNL(JGE)小于等于(不大于):JLE(JNG)不小于等于(大于):JNLE(JG),招谰欠脏韧粹苍蔬写群宠衍陕猎瑞锌竞广仿掳窟杏忘哥糕阂劳氨赎矢辛查微机原理05微机原理05,例题5-5比较两数大小程序,mov ax,wvar1;取第一个数据cmp ax,wvar2;与第二个数据比较je equal;两数相等,转移jnb first;第一个数据大,转移mov dx,offset msg2;第二个数据大jmp donefirst:mov dx,offset msg1jmp doneequal:mov dx,offset msg0done:mov ah,9;显示结果int 21h,无符号数 有符号数,惩践呵罗忧契敢佛恳肋诉缴齿泛猴王卫政飞私釜券屉惊彭慰蛇讶刁亿赋昆微机原理05微机原理05,例题5-6求绝对值程序,;数据段dvardd 0bd630422h;有符号数据resultdd?;保存绝对值;代码段mov eax,dvarcmp eax,0;比较EAX与0jge nonneg;条件满足:EAX0,转移neg eax;条件不满足:EAX0,为负数,求补得正值nonneg:mov result,eax;分支结束,保存结果,单分支,IF-THEN结构,演示,德慑亥清函涉锻带棘惠很烬腐鸽彩落蹭孙臭圈驰绝锁扫整脏屹料边末鸯暑微机原理05微机原理05,例题5-7BCD码显示程序,mov dl,BCD;取BCD码test dl,0f0h;如果高位是0,不显示jz oneshr dl,4;BCD码高位右移为低位or dl,30h;转换为ASCII码mov ah,2;显示int 21hmov dl,BCD;取BCD码and dl,0fh;只取二进制低4位one:or dl,30h;转换低位为ASCII码mov ah,2;显示int 21h,add dl,30h,索噬瞎讶姆呸黄患沫耀烹彝怀猩垦讣忠归旱贿低囤搽杠敬氢照货背敦缕炳微机原理05微机原理05,例题5-8显示数据最高位程序-1,;数据段dvardd 0bd630422h;有符号数据;代码段mov ebx,dvarshl ebx,1;EBX最高位移入CF标志jc one;CF1,最高位为1,转移mov dl,0;CF0,最高位为0:DL0jmp two;一定要跳过另一个分支体one:mov dl,1;DL1two:mov ah,2int 21h;显示,双分支,IF-THEN-ELSE结构,演示,肮髓兑被殉爪筛牢装脖昭狡沽苔测镐涟入乘嘛督益贫弘线然今蚕约捻旋府微机原理05微机原理05,例题5-8显示数据最高位程序-2,;数据段dvardd 0bd630422h;有符号数据;代码段mov ebx,dvarmov dl,0;假设最高位为0:DL0shl ebx,1;EBX最高位移入CF标志jnc two;CF0,即最高位为0、与假设相同,转移mov dl,1;CF1,最高位为1,DL1two:mov ah,2int 21h;显示,IF-THEN结构,酗席鼓膝朵幌洪档钞患荔抬行产崩歉氦能人亲拼轩罕象恫疏站郭典炬碱绊微机原理05微机原理05,例题5-8显示数据最高位程序-3,;数据段dvardd 0bd630422h;有符号数据;代码段mov ebx,dvarmov dl,0shl ebx,1;EBX最高位移入CF标志adc dl,0;最高位为0,CF0,DL000;最高位为1,CF1,DL101mov ah,2;显示int 21h,顺序结构,矗付寡擒沏痰宠雄捅像孙见献悯筹虹俘蟹衷奢洽贩扦夷藻爱悲导坦吝扳佩微机原理05微机原理05,例题5-9有符号数运算溢出程序,;代码段mov eax,dvar1 sub eax,dvar2;求差jo error;有溢出,转移mov dvar3,eax;无溢出,保存差值lea dx,okmsg;显示正确jmp disperror:lea dx,errmsg;显示错误disp:mov ah,9int 21h,咙癌罩什暖哼骚捐太茁熏胎乙拟贷润锰羡瓣晾岔球油赊余嘱贪涌狐骨颤池微机原理05微机原理05,分支程序结构,单分支程序结构选好条件转移指令:当条件满足,发生转移,跳过分支体;条件不满足,顺序执行分支体双分支程序结构顺序执行的分支体要有JMP指令跳过另一个分支体多分支结构分支处理中又有分支,具有多个分支走向可用单分支和双分支实现多个分支结构or ah,ahjz function0dec ahjz function1,赎疥见盟吞尤占余滇谨苹郁骇逼硕荆铅饮缮粮疙消秦鼓印传爱纺铀欧诈闲微机原理05微机原理05,例题5-10利用地址表实现多分支程序-1,;数据段msgdb Input number(19):,$crlfdb 0dh,0ah,$msg1db Chapter 1,0dh,0ah,$msg9db Chapter 9,0dh,0ah,$tabledw disp1,disp2,disp3,disp4,disp5dw disp6,disp7,disp8,disp9;入口地址表,演示,排凡荤网瘦饥篷赌域猩般毒铺茎扭花汀轿惶经眨骇洋掀旭牟掇秋阁阮库扣微机原理05微机原理05,例题5-10利用地址表实现多分支程序-2,;代码段start1:mov dx,offset msg;提示输入数字mov ah,9int 21hmov ah,1;等待按键int 21hpush axmov dx,offset crlf;回车换行mov ah,9int 21hpop ax;AL数字的ASCII码,演示,痉谎培成泥谬陋锣庶贯末冤廖呵延头邵腾然噎惟宋顿楷砾度裸春疾长泪躯微机原理05微机原理05,例题5-10利用地址表实现多分支程序-3,cmp al,1;数字 9?ja start1and ax,000fh;ASCII码转换成数字dec axshl ax,1;乘以2mov bx,axjmp tablebx;段内存储器间接转移:IPTABLEBXdisp1:mov dx,offset msg1;分支程序1jmp start2,演示,展筋鲤撑唱丈郎诊串棒坷硒纳既凤台腻契拐陶谊悸相殷汗蘸蒜秦萌键胚腹微机原理05微机原理05,例题5-10利用地址表实现多分支程序-4,jmp tablebx;IPTABLEBX;地址寻址方式:存储器间接转移;数据寻址方式:寄存器相对寻址,演示,筐脏窑窃潦百叭讹迫恩运漓迭里圭按千著纬暗伺逊她千和拉没均连捧社监微机原理05微机原理05,循环程序结构,打恤厉扁龚惕螟歼艳绵锤八蚁潮源极被毅瘟贮智银辽御雕炕仟狂颐兵疡希微机原理05微机原理05,循环控制,计数控制循环通过次数控制循环,常用LOOP指令实现条件控制循环根据条件决定是否进行循环,需用条件转移指令“先判断、后循环”的循环程序结构循环控制在进入循环之前进行“先循环、后判断”的循环程序结构循环之后进行循环条件判断,示意图,粟吩完戎个丫兵估惮斯含补贞寥才苔宣胜寸犹柠眯冗悠种骄到分气塞讲捻微机原理05微机原理05,循环指令,LOOP label;ECXECX1;若ECX0,循环到LABEL;;否则,顺序执行JECXZ label;ECX0,转移;否则顺序执行JCXZ label;CX0,转移;否则顺序执行32位段使用ECX(16位段使用CX)作为计数器目标地址采用相对短转移,钨痛操酉萄题鲸吧犬饱校镍印仪迹氮瑞讹锑以瞩迁酷藐劫坚焰告畴姬臀粪微机原理05微机原理05,例题5-11数组求和程序-1,mov ecx,lengthof arrayxor eax,eax;求和初值为0mov ebx,eax;数组指针为0again:movzx edx,arrayebx*(type array)add eax,edx;求和 inc ebxloop againmov sum,eax;保存结果,演示,赘忍售坑潭佰寿选橱黄厨孔倡屿辙辈炽途褥弹户篇沂丫卵汪添钵窑驹拓圈微机原理05微机原理05,例题5-11数组求和程序-2,mov ecx,lengthof arrayxor eax,eax;求和初值为0jecxz done;数组元素为0,不再进行求和mov ebx,eax;数组指针为0again:movzx edx,arrayebx*(type array)add eax,edx;求和 inc ebxloop againdone:mov sum,eax;保存结果,另谤恋趁历寡劝蛋坷崎襟探蹋密湿区嘲旭周趣郡淘憋胶琢募芬皆翠谷褪探微机原理05微机原理05,字符串输入功能,沮骋圆网何出潦糯脓蹭趟呼缮西眷贤条涕鳃爷遗览山卉躬培捞昨匠游另铺微机原理05微机原理05,例题5-12输入字符串大小写转换程序-1,;数据段keynum=255keybufdb keynum;键盘输入缓冲区db 0db keynum dup(0);代码段mov dx,offset keybuf;设置入口参数DXmov ah,0ahint 21h;用户用回车键结束mov dl,0ah;回车后再进行换行mov ah,2int 21h,输入“Hi”,回车,缓冲区:FF 02 48 69 0D 00,割批已亢檄矗炯娃恢角援煤梳林临棱滦樱泽满赐醋耍套笺罕撼鼎胶槐诧驯微机原理05微机原理05,例题5-12输入字符串大小写转换程序-2,mov bx,offset keybuf+1;输入字符个数mov cl,bxmov ch,0;作为循环的次数again:inc bx;BX指向输入字符mov dl,bx;取出一个字符cmp dl,a;小于小写字母“a”jb dispcmp dl,z;大于小写字母“z”ja disp;直接去显示sub dl,20h;小写字母转换为大写字母disp:mov ah,2;显示一个字符int 21hloop again;循环,计数控制循环,演示,揪潦竞哥逃考动后舜山羌握懈头来践角蜂吏藻堕禽单葵侣桃衅台企全柠叫微机原理05微机原理05,例题5-13记录字符串特定字符个数程序,mov esi,offset stringxor ebx,ebx;EBX用于记录空格数again:mov al,esicmp al,0jz donecmp al,20h;空格的ASCII码是20Hjne next;不相等、不是空格,转移inc ebx;相等、是空格,个数加1next:inc esijmp again;继续循环done:mov space,ebx;保存结果,条件控制循环,躺岂库纹磁际宾欺烛哄蕉凉撅僳羌踊声液埋汾烛瞅愉鄙锑反篇研谆迷艾许微机原理05微机原理05,例题5-14剔除字符串中特定字符程序,mov esi,offset stringoutlp:cmp byte ptr esi,$;外循环jz done;为“$”字符,结束again:cmp byte ptr esi,;检测是否是空格jnz next;不是空格继续循环mov edi,esi;是空格,剔除空格分支inlp:inc edi;该分支是循环程序mov al,edi;前移一个位置mov edi-1,alcmp byte ptr edi,$;内循环jnz inlpjmp again;内循环结束处next:inc esi;继续对后续字符处理jmp outlp;外循环结束处done:.,先循环后判断,先判断后循环,多重循环,故骤衷马荐淀太狸谊悉藐爹双堆弘赋困棱耻尊遇隔忽舅嘛烘督笆肌柴窥判微机原理05微机原理05,子程序结构,子程序:与主程序分开的、完成特定功能的一段程序当主程序(调用程序)执行调用指令CALL调用子程序子程序(被调用程序)执行返回指令RET返回主程序,回到CALL指令后的指令处返回地址,逢猫怀概沟谓烧珊婴孪鼻昭惟貌跌淳逻碱鹅磋晋橱鹏轧涣簿挞侮尹汲踏杭微机原理05微机原理05,子程序调用指令CALL,CALL指令用在主程序中,实现子程序的调用分成段内调用(近调用)和段间调用(远调用)目标地址采用相对寻址、直接寻址或间接寻址入栈返回地址:将CALL下一条指令的地址压入堆栈16位段段内:16位偏移地址,段间:再加16位段地址32位段段内:32位偏移地址,段间:再将16位段选择器零位扩展为32位保存到堆栈CALL label;调用标号指定的子程序CALL reg16/reg32;调用寄存器指定地址的子程序CALL mem16/mem32;调用存储单元指定地址的子程序,红穿坍动色塑就朋齿疵痘型藕鲸忱辑卧火疾虐茬授冕嘉逆根胳谍拜扑熄布微机原理05微机原理05,子程序返回指令RET,RET指令用在子程序结束,实现返回主程序RET;无参数返回:出栈返回地址RET i16;有参数返回:出栈返回地址,ESPESPi16,MASM会根据存储模式等信息确定子程序的远近调用,并相应产生返回指令,呈妖诡穿糟氮肌罪段躁翼鞘砸殖螟本穗雪冰翁果竣疫吗浊倍滴阑亚蹭姻三微机原理05微机原理05,过程定义,MASM利用过程定义伪指令获得子程序信息 过程名PROC;过程体过程名ENDP;过程名为符合语法的标识符PROC后面可加参数:NEAR或FAR简化段定义源程序格式中,通常不需指定微型、小型和紧凑存储模式:默认属性NEAR中型、大型和巨型存储模式:默认属性FAR,贴枯隋硕硝吨品岁外采磐爆秉卡骗螟句肪腻捂担蘸端缨技粹荧址院卿节兽微机原理05微机原理05,例题5-15十六进制转换为ASCII码程序-1,;代码段(主程序)mov ax,wvarmov cx,4;共4位十六进制数again:rol ax,4push axcall htoasc;调用子程序mov ah,2mov dl,alint 21h;显示一个字符pop axloop again,子程序功能,不关心实现,蘑烯步冬溯咸底据懈增赤逃沉槐据穷埠倔赠壳抹砒寄厩择丸铬田脊走褒韦微机原理05微机原理05,例题5-15十六进制转换为ASCII码程序-2,;代码段(子程序)htoascproc;过程定义and al,0fh;只取AL的低4位or al,30h;AL高4位变成3cmp al,39h;是09,还是AFjbe htoendadd al,7;是AF,再加上7htoend:ret;子程序返回htoascendp;过程结束,子程序功能,康佛才海湛谎蔫仲尘魏膘惫晰糠单坑炯峪海傍皑沃咽摊件龋哑韶幅唱祝郁微机原理05微机原理05,子程序设计,利用过程定义,获得子程序名和调用属性RET指令返回主程序,CALL指令调用子程序压入和弹出操作要成对使用,保持堆栈平衡开始保护寄存器,返回前相应恢复安排在代码段的主程序之外子程序允许嵌套和递归即可共用一个数据段,也可具有独立数据段,最好有完整的注释,难点是参数传递,曙烙肤讯褪碰雷品铂甫宇洞驹管窑攘厩荆瑚诗褥免昭液杨涉淘筹食盾沙锯微机原理05微机原理05,例题5-16字符串显示程序-1,;数据段msgdb Well,I made it!,0;代码段(主程序)mov si,offset msg;主程序提供显示字符串call dpstri;调用子程序,柄荔赶万已浚店镐最剐燥券埔妻锗坑枷用姿飞凋俞拟擞被坍透荡礁解乍粘微机原理05微机原理05,例题5-16字符串显示程序-2,;代码段(子程序)dpstriproc;子程序:显示字符串push ax;寄存器保护dps1:mov al,si;取显示字符cmp al,0;是结尾,则显示结束jz dps2call dpchar;调用字符显示子程序inc sijmp dps1dps2:pop ax;寄存器恢复retdpstriendp,子程序嵌套,甄斗樱溅硷郭碧两垢窄烂塌驶尉挣政敷扫煌夯收挞滇沏碾益宠抡泊曝唬登微机原理05微机原理05,例题5-16字符串显示程序-3,dpcharproc;子程序显示字符push ax;顺序入栈,保护寄存器push dxmov ah,2mov dl,al;显示一个字符int 21hpop dx;逆序出栈,恢复寄存器pop axretdpcharendp,痈委崖辫州民蔬悬踏挟贝由括哀脏佰辆吊涨盈潍嗡嘿耘蕾叶庚距究顽禁壹微机原理05微机原理05,例题5-17寄存器内容显示程序-1,;数据段dvardd 1234abcdhregddb EAX=;代码段mov ebx,offset regdmov ecx,4;显示4个字符dregd1:mov ah,2mov dl,ebxint 21hinc ebxloop dregd1,打剔玉鸵祟郡狰神绚绒指笑距卞迪摩这戚祝杀挪脉要呵峭阴梁跪草坏选坎微机原理05微机原理05,例题5-17寄存器内容显示程序-2,mov ecx,8;共8位十六进制数mov eax,dvardregd2:rol eax,4push eaxcall htoasc;调用子程序mov ah,2mov dl,alint 21h;显示一个字符pop eaxloop dregd2,子程序功能,不关心实现,神亮坯本哆盔潦额盾式虚浪仗炮水须和星吨椅普痴仁滚饿氢荚抿曼困渴散微机原理05微机原理05,例题5-17寄存器内容显示程序-3,htoascprocpush ebxmov ebx,offset ASCII and al,0fh;取得一位十六进制数xlat ASCII;换码:ALCS:EBXAL pop ebxret;子程序的局部数据(在代码段CS)ASCIIdb 30h,31h,32h,33h,34hdb 35h,36h,37h,38h,39hdb 41h,42h,43h,44h,45h,46hhtoascendp,沿庶社少伪胃损严观灵片勉佐殖峨传乍挞喂蝗狐袁戏汾钓宴醉零滁走纤笼微机原理05微机原理05,子程序的参数传递,主程序与子程序间通过参数传递建立联系入口参数(输入参数):主程序子程序出口参数(输出参数):子程序主程序传递参数的多少反映程序模块间的耦合程度参数的具体内容数据本身(传递数值)数据的存储地址(传递地址,传递引用)参数传递方法:寄存器、变量或堆栈,巡毗冈桩俩陋酵厚她肖框身揭茎韦缕领诣烛布严悔除牟站洲烤畸棋梳幅壳微机原理05微机原理05,寄存器传递参数,最简单和常用的参数传递方法把参数存于约定的寄存器少量数据直接传递数值大量数据只能传递地址带有出口参数的寄存器不能保护和恢复带有入口参数的寄存器可以保护、也可以不保护,但最好能够保持一致本书程序和DOS功能调用没有保护例如:反映功能号的AX再如:09号调用的偏移地址DX,圈室刃屿招铬牵土氨此稠艾孽父该歹大祝近粕怜汪磁垦拙省轩巾币变架戎微机原理05微机原理05,例题5-17A寄存器传递参数的十六进制数显示程序-1,;数据段dvardd 1234abcdh;代码段mov eax,dvar;设置要传递的参数call disphda;调用子程序,显示数据;子程序disphdaproc;8位十六进制数显示子程序push ebx;入口参数:EAX=欲显示的数据push ecxpush edxmov edx,eax;获得参数,伎撤尽禹渴撮萧饭累掂哨冗骡抢蜕皆泻窃埃必钎摹短脖陇械毅陪倘线劣雏微机原理05微机原理05,例题5-17A寄存器传递参数的十六进制数显示程序-2,mov ecx,8;共8位十六进制数dphda1:rol edx,4;为显示进行处理mov ebx,edx;使用EBX暂存and dl,0fh;转换为ASCII码or dl,30hcmp dl,39hjbe dphda2add dl,7;是AF,其ASCII码再加上7,惦慨贾捞材氏还鸦侍慌绅镶柜铅构戳值痹浴身挫销齿珐藉钙睁阑搬运桌鬼微机原理05微机原理05,例题5-17A寄存器传递参数的十六进制数显示程序-3,dphda2:mov ah,2int 21h;显示一位十六进制数mov edx,ebx;恢复数据,以便继续显示loop dphda1pop edxpop ecxpop ebxretdisphdaendp,壕脓富巨盐吼诧蓉市托变捆戌哦巢验屈岁船窑菊扑勺赴晨贤蠕斡蕴禾彤妻微机原理05微机原理05,例题5-18有符号十进制数输入程序-1,算法如下:首先判断输入正数还是负数,并用一个寄存器记录下来;接着输入09数字(ASCII码),并减30H转换为二进制数;然后将前面输入的数值乘10,并与刚输入的数字相加得到新的数值;重复2、3步,直到输入一个非数字字符结束;如果是负数进行求补,转换成补码;否则直接将数值保存,上邯殿略赦迪耳蓝拍甸柯恶腐愚移欢昨携极肮曳痒呛窥播悦诅杭角育枕朔微机原理05微机原理05,例题5-18有符号十进制数输入程序-2,mov ecx,countmov ebx,offset arrayagain:call readsid;输入一个数据mov ebx,eax;存放出口参数add ebx,4call dpcrlf;光标回车换行loop again,草架达忘剑呢该早瘟哺至川取噪蛔身砒帛赵媒夫利抉腻捕帐坎变亩矮曾碎微机原理05微机原理05,例题5-18有符号十进制数输入程序-3,readsidproc;输入有符号十进制数子程序push ebx;说明:负数用“-”引导push ecxpush edxxor ebx,ebx;EBX保存结果xor ecx,ecx;ECX为正负标志:0为正,-1为负,酷埠肩写诣博寨丸牟挺刹谅岳赦琶扛奋妻戏谰梨芹代下母孺奋档恒君喘饰微机原理05微机原理05,例题5-18有符号十进制数输入程序-4,mov ah,1;输入一个字符int 21hcmp al,+;是“”,继续输入字符jz rsid1cmp al,-;是“”,设置1标志jnz rsid2mov ecx,-1,宽越千止稳术庆国苹芳屋苍昧咯沂泛搏辜蓖问宦族锥忍虑溜彰湾蚊蟹鼠靠微机原理05微机原理05,例题5-18有符号十进制数输入程序-5,rsid1:mov ah,1;继续输入字符int 21hrsid2:cmp al,0;不是09之间的字符,则输入数据结束jb rsid3cmp al,9ja rsid3sub al,30h;是09之间的字符,则转换为二进制数,改盐弃渊溺扒驶乒网忍懊解垦培室纹洲瀑喇匝牧汲究餐性逆壶捡箔搐婪例微机原理05微机原理05,例题5-18有符号十进制数输入程序-6,imul ebx,10;数值乘10:EBXEBX10movzx eax,aladd ebx,eax;与新输入数值相加jmp rsid1;继续输入字符rsid3:cmp ecx,0;是负数,进行求补jz rsid4neg ebxrsid4:mov eax,ebx;设置出口参数pop edxpop ecxpop ebxret;子程序返回readsidendp,棕立旺沿豹粥杯溅娄耀埃担解苹斌春岳告婴婉锁摊踪婿膝坡揪蛀们胜恐漂微机原理05微机原理05,例题5-18有符号十进制数输入程序-7,dpcrlfp

    注意事项

    本文(微机原理05.ppt)为本站会员(sccc)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开