汇编第13讲[新版]_第1页
汇编第13讲[新版]_第2页
汇编第13讲[新版]_第3页
汇编第13讲[新版]_第4页
汇编第13讲[新版]_第5页
已阅读5页,还剩67页未读 继续免费阅读

下载本文档

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

文档简介

汇编语言程序设计ASSEMBLYLANGUAGEPROGRAMMING第13讲盔滓偿淘尼咯漳团堤瞄腻踌力袍浓哎弃嘉泰婶盎鹤专待七分啪赁寻搐莫笆汇编第13讲汇编第13讲2MODELSMALLINCLUDEYLIBHDATABUFDW13,25,23,100,3,235,56,125CNTEQUBUF/2CODEMAINMOVAX,DATAMOVDS,AXMOVCX,CNTMOVSI,OFFSETBUFCALLSUB1MOVAH,4CHINT21HSUB1PROCNEARL1MOVAX,SITESTAX,1JNZNEXTMOVDX,1CALLWRITEHEXNEXTADDSI,2LOOPL1RETSUB1ENDPENDMAIN阅读程序,分析程序功能,指出子程序入口参数和出口参数分别是什么回顾上次课内容柿宁卜衰匈味卵忻衷搀铀墓妮视鬃亏侯赞偏钥之矽频肪炬雏杯频压萌钳渤汇编第13讲汇编第13讲第5章子程序51子程序结构52参数的传递53递归子程序54多模块程序设计55汇编语言源程序结构551完整段定义结构552简化段定义结构553程序段前缀结构554COM文件结构复习指导癸周钳酗涉枣酥袒吕犯徘赢恒屑尚晚吃体赫坛崭浇诡暮瞥址钻薯枕爵窖脯汇编第13讲汇编第13讲454多模块程序设计一个汇编程序可由多个源文件组成。一个源程序文件称为一个模块,一个模块中可以有多个段。但是仅有一个模块中有主程序。设计要点1一个源程序文件中的主程序怎样调用另一个文件中的子程序2一个源程序文件中的子程序怎样访问另一个文件中定义的变量专石尹棒赛技匙运吩蜕畔压吁纤凤胰贝籍睹雷法伞哪兔憎屉伍窍骨蝴氛岁汇编第13讲汇编第13讲5EXTRN符号名类型,符号名需要引用的其它模块中的子程序名、标号或变量名。类型为BYTE、WORD、DWORD、NEAR、FAR等。PUBLIC符号名1,符号名2,说明本模块中哪些子程序名、标号、变量名可以被其它模块引用。第5章子程序1、外部符号和内部符号歹候鸿活蛋顾绎涡肚苹掸晒软早乘扣筐于凋串审授女汕疏详扒胜糊核矣提汇编第13讲汇编第13讲6如文件MAASM中需要调用文件MBASM中的子程序SUMPMBASMPUBLICSUMPSUMPPROCFARSUMPENDPMAASMEXTRNSUMPFARCALLFARPTRSUMP第5章子程序2、不同模块间的子程序调用宪玻债考既矢坤吞肺沉寿赛否井绒哗饵氧迟眯肯秘吻鹊闺耗聊氨皑穴戏宿汇编第13讲汇编第13讲7第5章子程序3、不同模块间的数据访问1利用外部变量在定义数据的文件中用PUBLIC声明,在使用数据的另一个文件中用EXTRN声明。2利用公共数据段在两个模块中定义相同的数据段,并将数据段的组合方式定义为COMMON。3利用虚拟数据段在一个模块中定义一个与另一个模块中数据段同名的空数据段,并将数据段的组合方式定义为PUBLIC。嫡呈葛孔柏织储戈弓禹旷赎辙誉纹汰蓄鲁急扒类攫莉猖谣艳倔悍跃迷峙汹汇编第13讲汇编第13讲8例1子程序SUMP用来计算ARRAY数组元素之和并存放到SUM中1数据段和主程序定义在源文件MAASM2子程序定义在源文件MBASM中3主程序可调用子程序SUMP4子程序SUMP可访问ARRAY数组和SUM变量。第5章子程序翌窘疲娄次冷澎鲸求典僻哮频虎颂粒溢重蔫琉顷膨掠酞智吱憨岔比土褪哭汇编第13讲汇编第13讲9方法1(1)MAASM调用MBASM的子程序SUMP在MA中用EXTRNSUMPFAR声明,在MB中用PUBLICSUMP声明。(2)MBASM中子程序SUMP访问MAASM中的ARRAY数组和SUM变量利用外部变量,在MAASM中用PUBLIC声明,在MBASM中用EXTRN声明。第5章子程序蹦谊谚骑良甸坯拢牟补穆侮税譬报疮荔雪索翰勋甥旨滑肘言楷掂颧赤肝忻汇编第13讲汇编第13讲10MAASM(方法1利用外部变量传递参数)EXTRNSUMPFARPUBLICARRAY,SUM,LENTHDSEGSEGMENTARRAYDW2,4,6,8,10,12LENTHEQUARRAY/2SUMDWDSEGENDSCSEGSEGMENTASSUMECSCSEG,DSDSEGMAINMOVAX,DSEGMOVDS,AXCALLFARPTRSUMPMOVAX,4C00HINT21HCSEGENDSENDMAIN声明SUMP是外部子程序声明公共数据,可被其他模块引用调用远程子程序SUMP伏巨趁劫泽榔晚衅由悼拐位童泌胸琢脊牺咱必痉尚随针衡祥疚窜俯曾渝峡汇编第13讲汇编第13讲11MBASM(方法1利用外部变量传递参数)EXTRNARRAYWORD,SUMWORD,LENTHPUBLICSUMPCSEGSEGMENTASSUMECSCSEGSUMPPROCFARMOVAX,SEGARRAYMOVDS,AXMOVCX,LENTHMOVAX,0LEASI,ARRAYL1ADDAX,SIADDSI,2LOOPL1MOVSUM,AXRETSUMPENDPCSEGENDSEND声明外部数据ARRAY,SUM及LENTH声明子程序SUMP,可被其他模块引用注意需将外部变量段地址装入DS应程鳖煤烙症怨渠羔粳写邦诞巷霜誊戮溶饰蜕敢卷墨贴镍痛巨尼补减陛平汇编第13讲汇编第13讲12方法2(1)MAASM调用MBASM的子程序SUMP在MA中用EXTRNSUMPFAR声明,在MB中用PUBLICSUMP声明。(2)MBASM中子程序SUMP访问MAASM中的ARRAY数组和SUM变量利用公共数据段,在两个模块中定义相同的数据段,并将数据段的组合方式定义为COMMON第5章子程序牙瀑竖戒征曰巡迹琉借肯红绪桥娥恐支妆篇辉恰菏投羊旨鲁检岳茶绣菌譬汇编第13讲汇编第13讲13MAASM(方法2利用公共数据段传递参数)EXTRNSUMPFARDSEGSEGMENTCOMMONARRAYDW2,4,6,8,10,12LENTHEQUARRAY/2SUMDWDSEGENDSCSEGSEGMENTASSUMECSCSEG,DSDSEGMAINMOVAX,DSEGMOVDS,AXCALLFARPTRSUMPMOVAX,4C00HINT21HCSEGENDSENDMAIN声明SUMP是外部子程序不同模块的同名COMMON段重叠形成一个段,使用相同的段起始地址,共享一块存储区间。调用远程子程序SUMP爬介腑每脐睹诡仓充硫砍寒递挫荚奋敛郧莹暑挟梢稍捶硕兽尼汤膊日班薄汇编第13讲汇编第13讲14MBASM(方法2利用公共数据段传递参数)PUBLICSUMPDSEGSEGMENTCOMMONARRAYDW2,4,6,8,10,12LENTHEQUARRAY/2SUMDWDSEGENDSCSEGSEGMENTASSUMECSCSEG,DSDSEGSUMPPROCFARMOVAX,DSEGMOVDS,AXMOVCX,LENTHMOVAX,0LEASI,ARRAYL1ADDAX,SIADDSI,2LOOPL1MOVSUM,AXRETSUMPENDPCSEGENDSEND定义与MA模块中同名的COMMON数据段,连接后将重叠为一个段SUMP能被其他模块调用扔榨暂恕糙卜棋馁朋厂右寸轮姐陋协窜摘颧鸡妻撒赏狭刷杯躯川辣屏键批汇编第13讲汇编第13讲15方法3(1)MAASM调用MBASM的子程序SUMP在MA中用EXTRNSUMPFAR声明,在MB中用PUBLICSUMP声明。(2)MBASM中子程序SUMP访问MAASM中的ARRAY数组和SUM变量利用虚拟数据段,在一个模块中定义一个与另一个模块中数据段同名的空数据段,并将数据段的组合方式定义为PUBLIC第5章子程序削跌星咨匹姆源础晓吧翅漂鸟怂谬妥崔翠金呕敝怯硫洞仓沤斋耀军砾桃肿汇编第13讲汇编第13讲16MAASM(方法3利用虚拟数据段传递参数)EXTRNSUMPFARPUBLICARRAY,SUM,LENTHDSEGSEGMENTPUBLICARRAYDW2,4,6,8,10,12LENTHEQUARRAY/2SUMDWDSEGENDSCSEGSEGMENTASSUMECSCSEG,DSDSEGMAINMOVAX,DSEGMOVDS,AXCALLFARPTRSUMPMOVAX,4C00HINT21HCSEGENDSENDMAIN声明SUMP是外部子程序不同模块的组合方式为PUBLIC的同名段将连接成一个段。调用远程子程序SUMP声明公共数据圾倒称竖骆啃储剔送盔潦绳息铰霖蒲取剐王崔载掖堂奥鸿狗丹雕化篓步尿汇编第13讲汇编第13讲17MBASMPUBLICSUMPEXTRNARRAYWORD,SUMWORD,LENTHDSEGSEGMENTPUBLICDSEGENDSCSEGSEGMENTASSUMECSCSEG,DSDSEGSUMPPROCFARMOVAX,DSEGMOVDS,AXMOVCX,LENTHMOVAX,0LEASI,ARRAYL1ADDAX,SIADDSI,2LOOPL1MOVSUM,AXRETSUMPENDPCSEGENDSEND定义与MA模块中同名的PUBLIC的空数据段,将与MA中同名数据段连接成一个段声明公共子程序SUMP敷元未造惧梆巧喝剥赤娇恐遗缸昆荣除梆迈铅咽忧凹候鹰拨葛尿美古傲烤汇编第13讲汇编第13讲18问题1编写多个汇编源程序文件后,如何将其汇编连接形成一个可执行文件1TASMMA2TASMMB3TLINKMAMB,M4TDM第5章子程序等钨郎肢坤氧咙浦蠢嗣籽糠炉浆什蚕仓贺胚滤锄杀佰烈相哼散截币蹈筹露汇编第13讲汇编第13讲19问题2如何将MBASM形成库子程序MYLIBLIB如何在MAASM的主程序中使用库子程序1TASMMA2TASMMB3TLIBMYLIBMB4TLINKMA,MYLIB5TDMA第5章子程序卓羊他碧痈护拥桂晚烬耘靴贯啤糯竟们愤险杨伸掀图隧患墓猛钾秒娶浚锗汇编第13讲汇编第13讲20551完整段定义结构第5章子程序段名SEGMENT定位类型组合方式使用类型类语句段名ENDS完整段定义格式尧盼爸脖紫将仁贱足谭双微促二疹累耀配痛襄噶畸挡爪绵稗尖族褂可括拱汇编第13讲汇编第13讲211定位类型规定段的起始地址PARA从小段边界开始,即段起始地址最低4位为0默认,则起始偏移地址从0开始。BYTE从字节边界开始,即段可以从任何单元开始,则起始偏移地址可以不是0。WORD从字边界开始,最低1位为0,即段起始地址必须是偶数。DWORD从双字边界开始,即段起始地址的最低4位是4的倍数。PAGE从页边界开始,即段起始地址最低8位为0第5章子程序翠瓜载鸽筑袄秧喻泉墓虚急磋碌衙籍传胰障掉碌司诉丈仕薪泣纠困慨待重汇编第13讲汇编第13讲22例2分析当CODE段的定位方式分别为BYTE、WORD、DWORD、PARA默认和PAGE时,CODE段的起始地址分别为多少DATASEGMENTMESSDBSAMPLE,0AH,0DH,DATAENDSCODESEGMENTBYTEASSUMECSCODE,DSDATASTARTMOVAX,DATAMOVDS,AXLEADX,MESSMOVAH,09HINT21HMOVAH,4CHINT21HCODEENDSENDSTART黍镐炙肢众县楚檬绚泼泞钱脱绑逮挝邯身恋鲁勉晋烽浩迄绩霖鞭花质俩苞汇编第13讲汇编第13讲23假设DATA段的结束地址为0AFC0008H,用不同对齐方式的结果如下表所示。对齐方式段基址起始偏移地址BYTE0AFCH0009HWORD0AFCH000AHDWORD0AFCH000CHPARA0AFDH0000HPAGE0B00H0000H第5章子程序丫烬距鬃坡语塑贮黑及酸厕炳琶梗纹膛瘩梁蝉浙魔痰洲逮奉巷化亨章弟居汇编第13讲汇编第13讲242、组合方式规定不同源程序文件连接时同名段的合并方法。PRIVATE(默认)连接时不与其他模块同名段合并,每个段都有自己的段基址。PUBLIC不同模块的组合方式为PUBLIC的同名段连接成一个段。COMMON不同模块的同名段重叠形成一个段,使用相同的段起始地址,共享一块存储区间STACK不同模块的STACK同名段组合成一个堆栈段。AT表达式段起始地址为表达式值,但是不能指定代码段。第5章子程序认导莫毗魄更洱诛膀垢银闰代情解尉烬碌翅耽虏耗冉缀酞胶楷诉庸纷蔫黍汇编第13讲汇编第13讲25例3组合方式举例。源程序文件1DATASEGMENTCOMMONDB100DUPDATAENDSCODESEMENTPUBLICCODEENDS源程序文件2DATASEGMENTCOMMONDB200DUPDATAENDSCODESEMENTPUBLICCODEENDS第5章子程序数据段模块1数据段模块2数据段代码段模块1数据段模块2数据段述杀逆卫投线史红志卜疚盏检筋恼你牌题薯锡浸暖舰宗茁瘸糖帽灼毅励驯汇编第13讲汇编第13讲263、使用(USE)类型只用于使用80386以上指令系统的汇编程序USE16该段使用16位寻址方式,段内偏移地址16位,每个段最大64KB。运行在实模式下的程序使用16位段。USE32该段使用32位寻址方式,段内偏移地址为32位,一个段最大可达4GB。运行在保护模式下的程序使用32位段。第5章子程序台岛闹诞脓幽臻蛹嗅循湛撰釉谭咋侨睹凉愉瞪刮瘦默沟抛凿斥古场钧阴吠汇编第13讲汇编第13讲27例4在TD环境下调试该程序,找出存在的问题CODESEGMENTASSUMECSCODESTARTMOVEAX,12345678HMOVEBX,10000000HADDEAX,EBXMOVAX,4C00HINT21HCODEENDSENDSTART第5章子程序USE16386猛钢价扩破蕴事汝枷堂厄继单敷奖抢徊钉舆喻讽垛祥湾镭擅奉价惰梁裂团汇编第13讲汇编第13讲284、类名称类名称是以引号引起来的任意字符串,如CODE。各程序模块中凡是类名称相同的各段,将被放在一个连续的存储空间,但各个段之间独立,不会合并成同一个段。第5章子程序凶段氛舆顷妨疼誓妓络诺堤矣迎观逻查拥歉硼厅吻牲砸偿政饼亿零冗淑聋汇编第13讲汇编第13讲29例5类名称举例两个代码段,两个数据段和一个堆栈段DATA1SEGMENTVAL1DW1001HDATA1ENDSMYSTACKSEGMENTPARASTACKDB100HDUPMYSTACKENDSSUBCODESEGMENTASSUMECSSUBCODE,DSDATA1,SSMYSTACKSUB1PROCFARRETSUB1ENDPSUBCODEENDSDATA2SEGMENTVAL2DW1002HDATA2ENDS家壶退熄攒闭铃絮让北送醛院昔沈尔澎倡她陷后橙占朵愉本谈火圆拔缩力汇编第13讲汇编第13讲30CSEGSEGMENTASSUMECSCSEG,DSDATA1,SSMYSTACKMAINPROCMOVAX,DATA1MOVDS,AXMOVAX,SEGVAL2MOVES,AXMOVAX,VAL1LEASI,VAL2MOVBX,ESSICMPAX,BXJBL1CALLFARPTRSUB1L1MOVAX,4C00HINT21HMAINENDPCSEGENDSENDMAIN第5章子程序篓拜摄奋瞧造砍弟触昨序杭姆秆谆置立烛恍巢那徒轿落蹦拒砸关唁蹬冕驶汇编第13讲汇编第13讲31回顾汇编语言上机过程产生的文件ASM文件汇编语言源程序文件,编辑阶段产生OBJ文件二进制格式的目标文件,汇编阶段产生LST文件列表文件,同时列出源程序和目标程序清单,并给出段名、段的大小及有关属性、用户定义的符号名、类型及属性汇编阶段产生CRF文件交叉引用文件,给出用户定义的所有符号,符号定义所在行及引用行号汇编阶段产生EXE文件/COM文件可执行文件,连接阶段产生MAP文件连接映像文件,是连接程序的列表文件,给出每个段在存储器中的分配情况连接阶段产生第5章子程序劣磕购举猪科爹郑舷沦湛迈蚊闭锯孙问译川麻伴施碉卖潍取弗粳餐润闺购汇编第13讲汇编第13讲32STARTSTOPLENGTHNAMECLASS00000H00001H00002HDATA100010H0010FH00100HMYSTACK00110H00110H00001HSUBCODE00120H00121H00002HDATA200130H00150H00021HCSEGPROGRAMENTRYPOINTAT00130000若为每个段加上类名称,则MAP文件为STARTSTOPLENGTHNAMECLASS00000H00001H00002HDATA1DATA00010H00011H00002HDATA2DATA00020H0011FH00100HMYSTACKSTACK00120H00120H00001HSUBCODECODE00130H00150H00021HCSEGCODEPROGRAMENTRYPOINTAT00130000第5章子程序嫡赦朝遭扳钳逝硒辕瞎赤蠕虫誊觅哦牌肿疯馅扶孜麓箩踢蜘胞诽狰嚷良溉汇编第13讲汇编第13讲33例6简化段定义结构汇编源程序MODELSMALLDATAMESSDBASAMPLE,0AH,0DH,CODESTARTMOVAX,DATAMOVDS,AXLEADX,MESSMOVAH,09HINT21HMOVAH,4CHINT21HENDSTART552简化段定义结构第5章子程序内存模式定义伪指令近数据段定义伪指令代码段定义伪指令DATA表示数据段的段名,即数据段的段地址堵裙帘彤颈脖双贵氦皂墒缸赶屎凳孵酥将谴涸疹惋印雾随称壳襄丹铲奶蚌汇编第13讲汇编第13讲341、内存模式定义伪指令MODEL内存模式,语言类型,操作系统类型,堆栈选项第5章子程序鞍毛萎沪蚊屿膛顺田瞧鹃暮乌终犊疤蓄彦霓庇拢散毗扮抉羔于哦实桨蜂运汇编第13讲汇编第13讲351内存模式TINY整个程序只有一个段COM程序。SMALL一个代码段和一个数据段。MEDIUM多个代码段但只有一个数据段COMPACT一个代码段和多个数据段。LARGE多个代码段和多个数据段。静态数据仍限制在64KB内。HUGE多个代码段和多个数据段,静态数据项长度可以超过64KB。FLAT保护模式。代码和数据使用32位偏移,所有的代码和数据都在一个32位段中编写WINDOWS应用程序。第5章子程序角罪弃甩夕绽迪完堑讣蠢谴毁辰剪炬幢谁爱菲栋宇蚀朝谜汽内尽嘘躯夷王汇编第13讲汇编第13讲362语言类型指该汇编语言程序作为某一种高级语言程序的过程而能被该高级语言程序调用。可以用C、BASIC、FORTRAN、PASCAL等加以说明。第5章子程序舜裹汹鲜办殆灵浓镊需计赶朽嫉贫烹俐堤转津檄浙们匹寡龙讫墙租动贾与汇编第13讲汇编第13讲373操作系统类型说明程序运行在那种操作系统之下。OS_DOS(默认)OS_OS2第5章子程序豢氖骚城曲妆卵扒垂证献故李酶植拼汞涟蝇啦沥举啄姨顽饱邱扳敞表丘虑汇编第13讲汇编第13讲384堆栈选项NEARSTACK堆栈段和数据段合并为一个段,DS和SS指向同一个段。内存模式为TINY、SMALL、MEDIUM和FLAT时默认。FARSTACK堆栈段和数据段不合并,其他内存模式时默认。第5章子程序块占筹凝殃孺篙痢症某狄饶靛稠池亲躯傅抡旷功疙汉檬嗓颜脊厚吨读外愿汇编第13讲汇编第13讲392、近数据段定义伪指令DATA创建一个数据段来定义有初值的变量,段名是_DATA。DATA用来定义没有初值的变量,段名为_BSS。CONST定义只读数据段,段名是_CONST第5章子程序罚陡蓝湃邵吱检打馆筏韦嚎嗣搀郡涤耳啥捶鼻蒙遭怀琶良椽捏卯晤痞哆百汇编第13讲汇编第13讲403远数据段定义伪指令FARDATA段名定义已有初值的数据段,默认段名为FAR_DATA。FARDATA段名定义没有初值的数据段,默认段名为FAR_BSS。远数据段不会被合并。第5章子程序萌漳遏威乳趴粗毕厌莲豫盎挛陆它诡揽阁喊氛奴苗奖辈惜刮滚松擂葬朗驾汇编第13讲汇编第13讲414代码段定义伪指令CODE段名如果内存模式为SMALL,CODE伪指令不需要给出“段名”,对于多个代码段的内存模式,则应该指明段名。第5章子程序配噪警惯皿祈乒栈禄内丸窍申纶剐氮巷岗悍演颜桌津赢梯弓浙蚤慈吨粟窿汇编第13讲汇编第13讲425堆栈段定义伪指令STACK堆栈大小定义一个堆栈段,缺省大小为1KB,段名为STACK。第5章子程序吞颁笨暗硫媳畏甸钥再骸定账蔑澈值叠若寻茨娶栓斟罪耗拭田替践县驯当汇编第13讲汇编第13讲436预定义符号CODE在指令中表示由CODE定义的代码段的段基址。DATA在指令中表示由DATA、DATA和CONST定义的数据段的段基址。STACK在指令中表示由STACK定义的堆栈段的段基址。第5章子程序哉标晒早赣指绩党邻柒蓉募后泅垦攀有赌说骸瞒侗彝赖献档壬瓶辩溺刷俱汇编第13讲汇编第13讲44DATASEGMENTMESSDBASAMPLE,0AH,0DH,DATAENDSCODESEGMENTASSUMECSCODE,DSDATAMAINPROCFARPUSHDSMOVAX,0PUSHAXMOVAX,DATAMOVDS,AXLEADX,MESSMOVAH,09HINT21HRETMAINENDPCODEENDSENDMAIN第5章子程序553程序段前缀结构主程序定义为由DOS调用的FAR过程把程序段前缀区第一个字节单元的段地址和偏移地址压栈保存返回DOS紫卷蚤亩菊贯亮领侣措究阉振进萄绞潘防促迹谗谣敷逾笺豢幼竭索应霖娘汇编第13讲汇编第13讲45L汇编源程序经过汇编连接成EXE文件后,就可在DOS提示符下加载运行,加载到内存后的结构如图INT20H程序段前缀区程序区DS256字节整个程序定义成由DOS调用的FAR过程,程序中的前3条指令实现把程序段前缀区第一个字节单元的段地址和偏移地址压栈保存,程序执行后的RET指令把这两个值弹出分别送入IP和CS,这样便执行INT20H,从而返回DOS状态。第5章子程序轨叠丢蓑暴退码亥周娶埂披囱刹坦翘溃信汪诺叭红洋铬曙畴淄榷罕臆滦峨汇编第13讲汇编第13讲46554COM文件结构例7COM文件结构汇编源程序CODESEGMENTASSUMECSCODE,DSCODEORG0100HSTARTLEADX,MESSMOVAH,09HINT21HINT20HMESSDBASAMPLE,0AH,0DH,CODEENDSENDSTART第5章子程序只有一个物理段程序第一条指令在CS0100H霉踩最绩撑绊玩捶肩膨鹅悯雷嫡蚌涡何甲央噪摹素碾难曹姐缀肉席啄丸渤汇编第13讲汇编第13讲47都是可执行程序文件。EXE文件有独立的代码段、数据段和堆栈段,且可以有多个代码段、数据段,程序占用的存储空间可以超过64KBCOM文件只有一个段,程序段前缀、代码段、数据段和堆栈段放在同一个物理段内,其长度不超过64KB;程序中不能出现段间转移和段间调用指令;程序入口点在0100H。EXE程序或COM程序在装入内存时,DOS在当前可用内存的最低地址开始的256字节装入程序段前缀PSP,然后才装入程序本身第5章子程序1COM文件与EXE文件认聘劣姥彦桨呆累弛媚千狞亿朽涎查招帧构骋鬼痈账囚湍棘亨日重卷湾探汇编第13讲汇编第13讲48COM文件在内存的映像DOS已使用程序段前缀PSP可供分配区域COM程序使用的代码、数据、堆栈区域低地址端用户程序占用区域64KB2B高地址端CSDSESSSIP0100HSP0FFFEH第5章子程序首肛掌款狞惰泛比镑杖幅墓忧鞭踊舷持敲埂致淄然篷锯弃享薪村产萄惧辗汇编第13讲汇编第13讲492如何产生COM文件方法1TLINK/T目标文件名方法2将源程序汇编连接形成EXE文件后,用EXE2BINEXE转换成COM文件。第5章子程序愤售诉发肿棱蕉亭崩厨命穗吗缓皇赘坡瞅风遵侮叶尤匡膏垄伞蔚烛娥绝绦汇编第13讲汇编第13讲50作业实验报告4第5章子程序前谍刁鸭讲枫刺豫绿槽贮日求涌钱蓬猜射磺死巡怂啸囱肢旷要刨抛亢孜顺汇编第13讲汇编第13讲51复习指导完整的段定义格式其中对齐方式、组合方式、使用方式、类名称分别用来说明什么简化段定义的汇编源程序结构什么样其中MODEL/DATA/CODE伪指令的用途是什么如何表示代码段和数据段的段基址如何编写程序段前缀结构的汇编源程序什么叫COM文件如何编写COM文件结构的汇编源程序如何汇编连接形成COM文件编写多模块汇编源程序时需要考虑哪几方面不同源程序文件中的段如何排列、组合一个源程序文件怎样调用位于另一个文件中的子程序不同源程序文件中的主程序与子程序间如何进行参数传递第5章子程序事疏谐违箱详话驮文疚屋怔肖躲比娇梦刑懒髓玖窗肩寂扬内档立棱臻哎奥汇编第13讲汇编第13讲52作业讲解43指令“JMPDI”和“JMPWORDPTRDI”作用有什么不同请说明。1都是近程间接无条件转移指令2JMPDI指令转向的目标地址在DI寄存器内3JMPWORDPTRDI指令转向的目标地址在存储单元中,该存储单元的地址在DSDI中。第4章选择与循环咎豁净登速登年搔碗页枣痘彪便厉徒借橡挛闭拴赵常蜜搀倍奉淋虎沃故扮汇编第13讲汇编第13讲53作业讲解45已知AX836BH,X分别取下列值,执行“CMPAX,X”后,ZF,CF,OF,SF各是什么第4章选择与循环836BH3000H536BHZF0CF0OF1SF0836BH8000H036BHZF0CF0OF0SF0836BH7FFFH036CHZF0CF0OF1SF0836BHFFFFH836CHZF0CF1OF0SF1836BH0000H836BHZF0CF0OF0SF1根据AXX结果设置标志位,但AX内容不变。若被减数的最高位有借位则CF1否则0若两个操作数的符号相反,而结果符号与减数相同则OF1,否则OF0若结果为负数则SF1,否则SF0若运算结果为0则ZF1,否则ZF0翌崇阻雀尉念宪发蝗室友葱桨剖烫礁巢斯宙筛浑买价堰谚喉衔伊酥另拱沤汇编第13讲汇编第13讲54作业讲解46已知AX836BH,X分别取下列值,执行“TESTAX,X”后,ZF,CF,OF,SF各是什么1X0001H2X8000H第4章选择与循环100000110110101100000000000000010000000000000001ZF0CF0OF0SF0AX836BHTEST指令将AX与X进行逻辑乘运算,不保留结果,只根据运算结果设置标志位CF和OF固定为0,SF和ZF根据运算结果设置100000110110101110000000000000001000000000000000ZF0CF0OF0SF1AX836BH追挖狰舱锨供惫枫紧鳃费沦剂颇碱矮喊缨佣条虽蹦归皇夸寐谱刺檄毁踞果汇编第13讲汇编第13讲55作业讲解46已知AX836BH,X分别取下列值,执行“TESTAX,X”后,ZF,CF,OF,SF各是什么3X0007H4X0FFFFH第4章选择与循环100000110110101100000000000001110000000000000011ZF0CF0OF0SF0AX836BH100000110110101111111111111111111000001101101011ZF0CF0OF0SF1AX836BH拉洋精勋躲何锚驹爆渍捷漆踩荤斋泞搂知涨埠幽佛价轴捂品溯辱飘喧楔鼎汇编第13讲汇编第13讲56作业讲解46已知AX836BH,X分别取下列值,执行“TESTAX,X”后,ZF,CF,OF,SF各是什么5X0第4章选择与循环100000110110101100000000000000000000000000000000ZF1CF0OF0SF0AX836BH斗吧倒溶蹭帖龄旧纶撞平碱链烹谦马腑狮仍葡跌伏辙拣吓拇滁抿圆昨晚冰汇编第13讲汇编第13讲57作业讲解48假设X和X2字单元存放有双精度数P,Y和Y2字单元存放有双精度数Q,下面程序完成了什么工作MOVDX,X2MOVAX,XADDAX,XADCDX,X2CMPDX,Y2JLL2JGL1CMPAX,YJBEL2L1MOVZ,1JMPSHORTEXITL2MOVZ,2EXIT双精度数PDX,AX求2PDX,AX比较2P的高字部分与Q的高字部分,若大于则跳转到L2,若小于则跳转到L1若2P的高字部分Q的高字部分,则比较2P的低字部分与Q的低字部分,若低于或等于则跳转到L2程序功能若2PQ,则Z1若2PQ,则Z2第4章选择与循环L1,L2写反了呼尉奔婿参曹戳雨逾按雀潭伸渡栖尉痈苔印衔曝囤则沃汲堡巷饥队矢蹬饺汇编第13讲汇编第13讲58作业讲解1、分析下列程序段ADDAX,BXJNOL1JNCL2SUBAX,BXJNCL3JNOL4JMPSHORTL5若AX147BH,BX80DCH,则程序转向若AX42C8H,BX608DH,则程序转向若AXD023H,BX9FD0H,则程序转向第4章选择与循环嚏万深芋右桑倡奸藏德孺摩遭勇皆奖瑰盈大胀集岛方鸳铬吩糊旋贯争沼帕汇编第13讲汇编第13讲59作业讲解1若AX147BH,BX80DCHADDAX,BXJNOL1JNCL2SUBAX,BXJNCL3JNOL4JMPSHORTL5AX9557HSF1,CF0,ZF0,OF0条件满足,转移到L1,不再执行后面的指令第4章选择与循环诽温赴砂兽菜歉役雾凳眷院憎陨政抨入冲耪谣梗淤彰魁芽董开茁判良捍惯汇编第13讲汇编第13讲60作业讲解2若AX42C8H,BX608DHADDAX,BXJNOL1JNCL2SUBAX,BXJNCL3JNOL4JMPSHORTL5AX0A355HSF1,CF0,ZF0,OF1条件不满足,不转移,继续执行后面的指令条件满足,转移到L2,不再执行后面的指令第4章选择与循环岛鸯董炒蜘房跃皆砒融雅啃秀罚凑悉隙罗呢砚国毒赃碌遏慰熔焰永咨乍称汇编第13讲汇编第13讲61作业讲解3若AXD023H,BX9FD0HADDAX,BXJNOL1JNCL2SUBAX,BXJNCL3JNOL4JMPSHORTL5AX6FF3HSF0,CF1,ZF0,OF1条件不满足,不转移,继续执行后面的指令条件不满足,不转移,继续执行后面的指令AX6FF3H9FD0HD023HSF1,CF1,ZF0,OF1条件不满足,不转移条件不满足,不转移无条件转移到L5第4章选择与循环化培燕冰出框抚犬果训贤帘挎尾敲委议扮惦肯翼贯果念宛更蛤阮吐猾责藉汇编第13讲汇编第13讲62作业讲解2、在下列程序段中的括号中分别填入如下指令1LOOPL202LOOPEL203LOOPNEL20则当程序执行完后,AX、BX,CX和DX四个寄存器中的内容分别是MOVAX,01MOVBX,02MOVDX,03MOVCX,04L20INCAXADDBX,AXSHRDX,1第4章选择与循环LOOPL20第一次循环AX2BX4DX1CX3循环条件满足第二次循环AX3BX7DX0CX2循环条件满足第三次循环AX4BX11DX0CX1循环条件满足第三次循环AX5BX16DX0CX0循环条件不满足注应为第四次抖笆柴笆橇君规丈根络店政冻瓣墓洽孪拧支悟殃矿嫩驱礼欲抠悄虎厚讯湛汇编第13讲汇编第13讲63作业讲解MOVAX,01MOVBX,02MOVDX,03MOVCX,04L20INCAXADDBX,AXSHRDX,1第4章选择与循环LOOPEL20第一次循环AX2BX4DX1,ZF0CX3循环条件不满足结束循环瘟溺给庐敦悦喀谜趣巨聚沈援铁婿壁靴窗达挝跨想舜锥配轨一汁梯学秆焦汇编第13讲汇编第13讲64作业讲解MOVAX,01MOVBX,02MOVDX,03MOVCX,04L20INCAXADDBX,AXSHRDX,1第4章选择与循环LOOPNEL20第一次循环AX2BX4DX1,ZF0CX3循环条件满足第二次循环AX3BX7DX0,ZF1CX2循环条件不满足结束循环萍牧站陵呼很扬躲锻扩史握除绿扳后酪骨塑即核劈笨惑毛枣掣强披国尹现汇编第13讲汇编第13讲651、下列程序完成对分段函数进行计算的功能,X的值从键盘输入,Y的值送显示器输出。但程序中有部分错误,请修改其中错误。饶菇氰耙洞械剃砰俗尊弦席征义柯郊他捷楚诲衬企聊如劳夯罪为权具蛹淀汇编第13讲汇编第13讲66INCLUDEYLIBHDATASEGMENTMESS1DB0DH,0AH,INPUTVALUEOFXPLEASEMESS2DB0DH,0AH,YDATAENDSCODESEGMENTASSUMECODECS,DATADSSTARTMOVAX,DATAMOVDS,AXLEADX,MESS1CALLREADINTCMPAX,2JLL2L1SUBAX,3L2CMPAX,3JLEL3ADDAX,AXADDAX,6L3MOVAX,2DONELEADX,MESS2CALLWRITEINTCALLCRLFMOVAX,4C00HINT21HCODEENDSENDSTART修改为JGEL2修改为JGL2L2前加入指令

温馨提示

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

最新文档

评论

0/150

提交评论