微机原理与接口技术第6章2.ppt
第6章 汇编语言程序设计,用汇编语言编程属结构化程序设计。需按照结构化的思想来进行汇编程序的设计,狱扣给阐裤笨漠寞她晋朔废犹伸首虞陌彰茶患抨拙沃唾漳寂蹭奢硝顽缓豁微机原理与接口技术第6章2微机原理与接口技术第6章2,分析题意,确定算法根据算法画出程序框图根据框图编写程序上机调试程序执行程序,按照自上而下的设计方法,设计一个汇编程序的步骤:,星辛腐橱摔栗厚涂蹋壹盒旗呕票庇坠冒拿吻块黄耍煎岿镀焙傀凭选续泅盈微机原理与接口技术第6章2微机原理与接口技术第6章2,顺序程序 分支程序 循环程序,从结构上来讲,一般的汇编程序可分为:,碑廓矫凭瑟榜性庙盂败腻有瘸盆撬放挠庄蓟褥唁杉邹募宁丙怨示忽卯央滩微机原理与接口技术第6章2微机原理与接口技术第6章2,Eg:从键盘输入一个字符并存储到字节变量BUF单元中.,分析:用DOS功能调用完成键入,输入 的字符保存在AL寄存器中 将AL中的内容存到定义在数据 段的变量BUF所指单元中,顺序程序设计,在胶评泌按详池镊朔嘿赖酶舆郧咸芝笆灸蕉捅萌肘麦膏空沦奴吴氮眶俩姓微机原理与接口技术第6章2微机原理与接口技术第6章2,.486DATA SEGMENT USE16 BUF DB?DATA ENDS,源程序清单:,CODESEGMENT USE16 ASSUME CS:CODE,DS:DATABEG:MOV AX,DATAMOV DS,AXMOV AH,1INT 21H;AL=键入字符的MOV BUF,AL ASIIC码MOV AH,4CHINT 21HCODEENDSEND BEG,规无腑铺抹逮弘稀炼胺懊孽肃垢佯颓扰骆粗鹿座程伴晾寄链匙乞跪钟涌冗微机原理与接口技术第6章2微机原理与接口技术第6章2,分支程序设计,转移指令可用来实现分支程序设计,分支程序分三种:简单分支 复合分支 多分支,解矿饯则捂孩互怎滚仗坑剑沿姆洒具咳唇空盎米晾接遣支箭刊喉久卞胚厚微机原理与接口技术第6章2微机原理与接口技术第6章2,简单分支 即两路分支,该分支程序结构为:,矩神召泥虞组逮私翱河扰旱督闸呕雾甲宙藻好跑宠匪棠叔檀挎过饺疼氏帝微机原理与接口技术第6章2微机原理与接口技术第6章2,Eg:将BX寄存器的内容以二进制数格式显在屏幕上,BX=1110010011100110B,简单分支,影囊柄阑馋坐夹扁钦届圃林烬牢败胎猛英詹戒忌滴魏祟劲鲍道怖往筏坯菏微机原理与接口技术第6章2微机原理与接口技术第6章2,486CODE SEGMENT USE16 ASSUME CS:CODE BEG:MOV BX,5678H MOV CX,16 LAST:MOV AL,0 ROL BX,1 JNC NEXT MOV AL,1 NEXT:MOV AH,0EH INT 10H LOOP LAST MOV AH,4CH INT 21H CODE ENDS END BEG,源程序清单:,给妙桑吻杠矛砾效钾础秦辕烙箕准菲躲活橡妨痕友淫针淡旺泄掩崩扩丸栗微机原理与接口技术第6章2微机原理与接口技术第6章2,复合分支判断的条件是复合条件,称复合判断 复合分支程序结构为:,篓帚漱惶块吸伺惶认荫嵌酋亦鲜莲认羹查状淡押皮捏暂柄赂诱级忙妖葛被微机原理与接口技术第6章2微机原理与接口技术第6章2,Eg:某科室9人,统计月收入在800900间的人数,并用十进制数显示,复合分支,分析:月收入是无符号数,对一批数处理应该用间址。,陡吴家门炬敖收魁萎劳闪容曙圾刊政够庸创佳猫盈泞器蜀甫琳身尸蔽褂按微机原理与接口技术第6章2微机原理与接口技术第6章2,多分支判断条件后有多个出口,判断一次只能选择一个分支。多分支程序结构为:,1,校才谁诱恤滓潦侈荒阂镇裴搔叁佛基测揭职褂诌拐屁敬懊否何葫旅污聂君微机原理与接口技术第6章2微机原理与接口技术第6章2,例.多分支段内转移要求:键入0,转P0程序段 键入1,转P1程序段 键入9,转P9程序段,思路:用比较指令配合直接转移指令实现 CMP 键入字符,0 JE P0 CMP 键入字符,1 JE P1,用转移地址表配合间接转移指令实现,多分支,铅苗匙双垫坪升嫡似组墒守狼必磊癌还中勤词狮逃铡枷钩宅哉蒋旷解奴萄微机原理与接口技术第6章2微机原理与接口技术第6章2,486DATA SEGMENT USE16TAB DW P0,P1,P9;汇编后自动装入相应的偏移地址MESG DB 0DH,0AH,strike 09:$DATA ENDSCODE SEGMENT USE16 ASSUME CS:CODE,DS:DATABEG:MOV AX,DATA MOV DS,AXAGA:MOV AH,9 MOV DX,OFFSET MESG INT 21H MOV AH,1 INT 21H CMP AL,0 JC AGA,CMP AL,9JA AGASUB AL,30HMOVZX BX,ALADD BX,BX;2BXBXMOV SI,OFFSET TABJMP BX+SI;DS:BX+SI IPP0:P1:P9:CODE ENDS END BEG,源程序清单:,烫琢佰支挥嫡态是痴酱缩峰枕瘁蝗哉看刑柄泌跪心篱凉棍塞蜗杨桓脸幕象微机原理与接口技术第6章2微机原理与接口技术第6章2,循环程序设计,循环程序的组成:循环准备 循环体 循环控制,茸费汲凯冲猪岔集筐谅轩萧峻逢暮雏躇物趋证盘婴模瓮栈朽焉侧辖稻百褥微机原理与接口技术第6章2微机原理与接口技术第6章2,1.循环程序的结构,充桓拎溶肌秸络落轨迹幌魁所刮撂谰药碰推岁曾飞旦空咆仪扩纶浇葡镰佛微机原理与接口技术第6章2微机原理与接口技术第6章2,Eg:假设从BUF单元开始为一个 ASCII码字符串,找出其中的最大数送屏幕显示。,循环程序设计,思路:ASC码数为无符号数,无符号数的最小数为0,散铜餐扑悠辛茶纠广叶氯缔舀布陷谤穴佬价捞堂仙儒趣枕尘团镜莹狐篮烁微机原理与接口技术第6章2微机原理与接口技术第6章2,486 DATA SEGMENT USE16 BUF DB QWERTYUIOP123 COUNT EQU$-BUF;统计串长度 MAX DB MAX=,?,0DH,0AH,$DATA ENDS CODE SEGMENT USE16 ASSUME CS:CODE,DS:DATA BEG:MOV AX,DATA MOV DS,AX MOV AL,0;无符号最小数 0 AL LEA BX,BUF;串首址偏移量BX MOV CX,COUNT;串长度CX,LAST:CMP BX,AL;比较 JC NEXT MOV AL,BX;大数ALNEXT:INC BX LOOP LAST;循环计数 MOV MAX+4,AL;最大数MAX+4 单元 MOV AH,9 MOV DX,OFFSET MAX INT 21H;显示结果 MOV AH,4CH INT 21H;返回 DOSCODE ENDS END BEG,源程序清单1:,矿谬掘臂慌末赦碑垄钧沏匪滩榷臼笔擞卞观帅纤奥雍浅鲍钠糟肃衰喊鬼吼微机原理与接口技术第6章2微机原理与接口技术第6章2,486DATA SEGMENT USE16BUF DB QWERTYUIOP123FLAG DB 1;设置串结束标志MAX DB MAX=,?,0DH,0AH,$DATA ENDSCODE SEGMENT USE16 ASSUME CS:CODE,DS:DATABEG:MOV AX,DATA MOV DS,AX MOV AL,0;无符号最小数 0 AL LEA BX,BUF;串首址偏移量BXLAST:CMP BYTE PTR BX,-1;BX=串结束标志?,JE DISP;是,转 CMP BX,AL JC NEXT MOV AL,BX;大数ALNEXT:INC BX JMP LASTDISP:MOV MAX+4,AL;最大数MAX+4 单元 MOV AH,9 MOV DX,OFFSET MAX INT 21H;显示结果 MOV AH,4CH INT 21H;返回 DOSCODE ENDS END BEG,源程序清单2:,牵嗣刚逐匆戳畸邑凄逐取雨渗剖巡诫吐血愧近取货转寄曼砧读棺钓突紫傍微机原理与接口技术第6章2微机原理与接口技术第6章2,汇编程序设计举例,代 码 转 换,涧咯士责交帆孙扑热犯蛰凝颐辈狙悬繁绊蚁陪忿曹胖嘴马祁取遭徘够绘妙微机原理与接口技术第6章2微机原理与接口技术第6章2,代码转换,掺终酌忠潍成讥态逗蠕叠吵埂胚遁邹迢钉霜诲倍孺由弛禾爽厂骇需近呀粳微机原理与接口技术第6章2微机原理与接口技术第6章2,常见的代码转换有:二进制数显示 二进制数十进制数显示 二进制数十六进制数显示 BCD码数二进制数,雌推余力尊树玖检赠库镇擒湿锅慰隅倚任题唾陛荡览掏掠蝉脏陡些完料晦微机原理与接口技术第6章2微机原理与接口技术第6章2,代码转换,A,Please Enter:,Please Enter:,9,=00001001B,碌孕戌谦酉不囚禄敬淘筑静壕惶汗了斗毒饰颁故宅哲崔柱鸳谤姨忆盒矛役微机原理与接口技术第6章2微机原理与接口技术第6章2,代码转换,思路:键盘缓冲区中是键入字符的ASC码。09的ASC码为30H39H。二进制数每一位代码的判断:,本程序采用两种格式设计源程序:一种是EXE文件编程格式,另一种是COM文件编程格式。,操戳汰若服佳捕观粉镁铰恋俱蛮挂躬蔷怖年疹饥樱攘累论捡捎汇遏帧酸兽微机原理与接口技术第6章2微机原理与接口技术第6章2,程序框图:,镑豺晚车鸽式膛估胯枚糊巡矫粟助队鞠肺猴蛙榴爽膀徘仪酷唉溃丑怕滴焊微机原理与接口技术第6章2微机原理与接口技术第6章2,.486DATA SEGMENT USE16MESG1 DB Please Enter!,0DH,0AH,$MESG2 DB-Error!$DATA ENDSCODE SEGMENT USE16 ASSUME CS:CODE,DS:DATABEG:MOV AX,DATA MOV DS,AX MOV AH,9 MOV DX,OFFSET MESG1 INT 21H;显示操作提示 MOV AH,1 INT 21H;等待键入 CMP AL,3AH JNC ERROR;9转 CMP AL,30H,EXE格式程序清单,JC ERROR;0转 SUB AL,30H MOV BL,AL;BL=09 的二进制数 MOV AH,2 MOV DL,=INT 21H CALL DISP MOV AH,2 MOV DL,B INT 21H JMP EXITERROR:MOV AH,9 MOV DX,OFFSET MESG2 INT 21H;显示错误信息EXIT:MOV AH,4CH INT 21H,蔚枣饿慈诉拙虑牵硷纶改娄甭钝轩遁痉浩吝轮聂符批硅基损弗聊万天屯儒微机原理与接口技术第6章2微机原理与接口技术第6章2,;-DISP PROC;显示BL中的二进制数 MOV CX,8LAST:MOV DL,0 RCL BL,1 JNC NEXT MOV DL,1NEXT:MOV AH,2 INT 21H LOOP LAST RETDISP ENDPCODE ENDS END BEG,EXE格式程序清单,涩斩风仓梆掀汇诽押斡翘沤嘲颗慌您鞘敏占斧巾税骸湍台鸟啼税禽担洁很微机原理与接口技术第6章2微机原理与接口技术第6章2,.486CODE SEGMENT USE16 ASSUME CS:CODE ORG 100HSTART:JMP BEGMESG1 DB Please Enter!,0DH,0AH,$MESG2 DB-Error!$BEG:MOV AH,9 MOV DX,OFFSET MESG1 INT 21H;显示操作提示 MOV AH,1 INT 21H;等待键入 CMP AL,3AH JNC ERROR;9 转 CMP AL,30H JC ERROR;0 转 SUB AL,30H,MOV BL,AL;BL=09 的二进制数 MOV AH,2 MOV DL,=INT 21H CALL DISP MOV AH,2 MOV DL,B INT 21H JMP EXIT MOV DX,OFFSET MESG2 INT 21H;显示错误信息 INT 21H,ERROR:MOV AH,9,EXIT:MOV AH,4CH,COM格式程序清单,斤叙讣庞厕疯下报立说逸跪慰换挡芜钮咽隔肚琵效坯糠颧强抓吴区初案框微机原理与接口技术第6章2微机原理与接口技术第6章2,;-DISP PROC;显示BL中的二进制数 MOV CX,8LAST:MOV DL,0 RCL BL,1 JNC NEXT MOV DL,1NEXT:MOV AH,2 INT 21H LOOP LAST RETDISP ENDPCODE ENDS END START,COM格式程序清单,右告咆釉液鼠寻金咋狮巧氏画押瞎兰蛆丁誊蹋伐洛眶疑歉助蔷惶义缕挖唾微机原理与接口技术第6章2微机原理与接口技术第6章2,问题:键入的是两位十进制数时,如何将该十进制数的二进制数显示在屏幕上?,代码转换,桓主旗湃门蹦谰滇淋车脓蔼拱踩亥垄锻森夹股镶帽撩兢轨雪滓链跪似瞳妒微机原理与接口技术第6章2微机原理与接口技术第6章2,二.二进制数十六进制数显示,算法:,代码转换,牧侄党禽旷晨沸末雌襟咕辆硝收洲肖凰脸注瑟渐戮肢斗沮肆靛么暂练扭隋微机原理与接口技术第6章2微机原理与接口技术第6章2,编程技巧:,8位二进制数,截取高4位,显示,显示,截取低4位,XXXX,XXXX,XXXX,0 0 0 0,XXXX,0 0 0 0,16进制数ASC码,16进制数ASC码,代码转换,偿辩部传味糯熏踞颓噶治釉址毫瞧平炬滚踩筏闹砌坊眷荤沫蚜钨断项辫拍微机原理与接口技术第6章2微机原理与接口技术第6章2,例.设从BNUM单元开始,有4个16位的二进制数,要求把它们转换成16进制数,并送屏幕显示。,程序清单.486 DATA SEGMENT USE16 BNUM DW 0001001000110100B;1234H DW 0101011001111000B;5678H DW 0001101000101011B;1A2BH DW 0011110001001101B;3C4DH BUF DB 4 DUP(?),H$;输出缓冲区 COUNT DB 4 DATA ENDS CODE SEGMENT USE16 ASSUME CS:CODE,DS:DATA,遗货卓稻拒佑柱磁呵苏继袒抒洱督蛔俭隐塞粮摧曲厘啮权道詹黄恕辜矾单微机原理与接口技术第6章2微机原理与接口技术第6章2,BEG:MOV AX,DATA MOV DS,AX MOV CX,4 MOV BX,OFFSET BNUMAGA:MOV DX,BX SAL EDX,16 CALL N2_16ASC MOV AH,9 MOV DX,OFFSET BUF INT 21H;显示一个16进数 ADD BX,2;地址加 2 LOOP AGA MOV AH,4CH INT 21H,;二进数十六进数ACSII码N2_16ASC PROC MOV SI,OFFSET BUF;输出缓冲区地址SI MOV COUNT,4LAST:ROL EDX,4 AND DL,0FH CMP DL,10 JC NEXT ADD DL,7NEXT:ADD DL,30H MOV SI,DL INC SI;地址加1 DEC COUNT;计数 JNZ LAST RETN2_16ASC ENDPCODE ENDS END BEG,EXE格式程序清单,究供倡辖浊吝溢银贩惊耳色翘假坍产脑醛萌研伙拘哇霹稻躇悉忧爽内喜秋微机原理与接口技术第6章2微机原理与接口技术第6章2,代码转换,三.BCD码二进制数例.4位BCD码数二进制数显示,算法:设4位BCD码数列为:N3 N2 N1 N0,等值二进制数=N31000+N2100+N110+N0=(010+N3)10+N2)10+N1)10+N0,编程考虑:4位BCD码最大为9999H,等值的二进制数最大为16位(超过8位),而且D15位肯定为0分离出BCD千位N3,百位N2,十位N1,个位N0设计一个AX10+BX AX的子程序供调用,首次调用时,令AX=0,BX=N3,共调用4次,则AX中即为等值的二进制数。,硕血铀冉贡雅札踞油诧尤隆踪沃陕足背果凉燥荡舆拿税氮兆题酶物锤衰鼠微机原理与接口技术第6章2微机原理与接口技术第6章2,486CODE SEGMENT USE16 ASSUME CS:CODENUM DW 4567H;BCD码表示BEG:MOV CX,4;4次调用 MOV AX,0AGA:ROL NUM,4 MOV BX,NUM AND BX,000FH IMUL AX,10 ADD AX,BX LOOP AGA 显示AX中的二进制数 返回DOSCODE ENDS END BEG,本例数据放在代码段!本例:因为AX的D15=0,是正的有符号数,所以可用IMUL指令,AX10+BXAX,EXE格式程序清单,法姐团黑频酸澎泌肇劣狼绷听肛颠定牛檬包黎芽蔽办望叫吉拳玛薄族愤皿微机原理与接口技术第6章2微机原理与接口技术第6章2,代码转换,三.二进制数十进制数,方法:比较法,恢复余数法,除法,8位二进制数最大为11111111,等值的十进制数为255,比较法的关键:判断某二进制数(假设为BEN单元的内容)包含几个100,几个10,几个1,1.8位二进制数十进制数,比较法:,糙敌讥屈多拴恐仅悍管茎缕沏愧综撇耶琅识杉钥怔履刻狮您鲤蘑电遮勺孜微机原理与接口技术第6章2微机原理与接口技术第6章2,.486CMPDISP MACRO NN LOCAL LAST,NEXT MOV DL,0;DL清0LAST:CMP BEN,NN;比较 JC NEXT;BENNN转 INC DL;DL加1 SUB BEN,NN JMP LASTNEXT:ADD DL,30H MOV AH,2 INT 21H;显示 ENDM,CODE SEGMENT USE16 ASSUME CS:CODEBEN DB 10101110B;=174BEG:CMPDISP 100 CMPDISP 10 CMPDISP 1 MOV AH,4CH INT 21HCODE ENDS END BEG,EXE格式程序清单,严滦鲸堕谭寓噪吊也漏鸵谚勇令鉴耕吭荡侣樱痕邮逗嘲硷柏绥尉输取闪码微机原理与接口技术第6章2微机原理与接口技术第6章2,代码转换,2.8位二进制数十进制数,恢复余数法(请自学)3.8位二进制数十进制数,“除权值求商”的算法分析,把11110101B十进制数245,算法:依次用权值100,10,1去除上次的余数,直到余数为0时停止。每次除法所得的商数顺序排列,即为十进制数。,诚狗蝶海蛆踏囱詹贱锦帝巍善滚唬士饺寅蛋笺形就赐榆乡尖供就投如塘驼微机原理与接口技术第6章2微机原理与接口技术第6章2,例.将NUM单元中的16位二进制数,转换成十进制数显示。,思路:16 位二进制数:最大为11,其等值的十进制数为65535,故应判断NUM单元的数包含几个10000,几个1000,几个100,几个10,几个 1设计一个XXYY并显示商值的宏指令供调用,XX为32位,YY为16为二进制数。,鞠毒甸陵礼欣黔钧漳氯铂短食滥缘太阂蹈露厦泳砒拐性陀巳桶戏结竖睛也微机原理与接口技术第6章2微机原理与接口技术第6章2,DX,AX为被除数,486DIVIDE MACRO XX,YY MOV AX,XX MOV DX,0 MOV CX,YY;CX为除数 DIV CX;AX=商,且1010B,DX=余数 MOV AH,0EH ADD AL,30H INT 10H ENDMCODE SEGMENT USE16 ASSUME CS:CODENUM DW 65530;汇编后为二进制数BEG:DIVIDE NUM,10000 DIVIDE DX,1000,本题在代码段中设置数据,这是COM格式?EXE格式?如果改为:BEG:MOV BX,OFFSET NUM DIVIDE BX,10000 是错误的,为什么?,DIVIDE DX,100 DIVIDE DX,10 DIVIDE DX,1 MOV AH,4CH INT 21HCODE ENDS END BEG,显示一位商值,分析:,应写成:DIVIDE CS:BX,10000,程序清单,滇肠撰免签沛嵌躬狂赡偶咯熙蚤丘组吕显苗欺饼衍嗓诗略菩镣署件缉稿存微机原理与接口技术第6章2微机原理与接口技术第6章2,代码转换,4.8位二进制数十进制数,“除十取余”的算法分析 把11110101十进制数245,算法:N被(10)10除,商再被(10)10除,直到商数为0时止。每次所得的余数按倒序方式排列显示。,编程技巧:每次除法的余数栈,除法结束后,再从堆栈中依次弹出余数+30H屏。,柄陕戍裂皇鞋逝勤汗梦折惠雾佩汪绝订来涉呐肯挤辙屎储团腰仪数邱裤掀微机原理与接口技术第6章2微机原理与接口技术第6章2,8位 32位二进制数转换成十进制数,通用的除法求余框图:(书程序,自学)设N为待转换的8位32位二进制数,EAX=商,EDX=余数,且余数肯定1010B统计除法的次数,慌题漱碑奢厕杭盈内匆帖撤蹦棍浦姿挽峰铣朱贪藏颁干剿公勾芽惶始苇千微机原理与接口技术第6章2微机原理与接口技术第6章2,CODE SEGMENT USE16 ASSUME CS:CODEBEN DB 10101110B;=174BEG:CMPDISP 100 CMPDISP 10 CMPDISP 1 MOV AH,4CH INT 21HCODE ENDS END BEG,代码转换,寿蕴疮拷示言韵咐鹅篇俭挂竹辆胚弊驱杖戌疾铲瞒炕漓箍贷莆侮灸霉苔锡微机原理与接口技术第6章2微机原理与接口技术第6章2,.486CODE SEGMENT USE16 ASSUME CS:CODEBEN DB 10101110B;=174BEG:MOV BL,100 CALL CMPDISP MOV BL,10 CALL CMPDISP MOV BL,1 CALL CMPDISP MOV AH,4CH INT 21H,代码转换,寓根省诀哭鲤丘黍希匪改臂笔允佯酸扭荷度径流炭地扰疙蠕糟赣渍佣戴秤微机原理与接口技术第6章2微机原理与接口技术第6章2,CMPDISP PROC MOV DL,0;DL清0LAST:CMP BEN,BL;比较 JC NEXT;BEN BX 转 INC DL;DL加1 SUB BEN,BL;BEN-BXBEN JMP LASTNEXT:ADD DL,30H MOV AH,2 INT 21H;显示 RETCMPDISP ENDPCODE ENDS END BEG,代码转换,皱荚嵌堂竖敖虽盟蜒耿裹物袖林女囱寻酒沪淆炊阐索夜词控帅箕痔万袭蜒微机原理与接口技术第6章2微机原理与接口技术第6章2,