《第六章循环与分支程序优秀PPT.ppt》由会员分享,可在线阅读,更多相关《第六章循环与分支程序优秀PPT.ppt(69页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第六章循环与分支程序第一页,本课件共有69页12/6/202226.1 分支程序设计分支程序设计6.1.1 标号标号标号标号:用来说明可执行指令在汇编语言程序中的位置。用来说明可执行指令在汇编语言程序中的位置。和变量类似,实质上是一个地址值。可以作为和变量类似,实质上是一个地址值。可以作为 转移指令(或转移指令(或CALL)的操作数。)的操作数。属性:属性:段属性、位移量属性和距离属性。段属性、位移量属性和距离属性。注注 意意:如如 果果 一一 个个 标标 号号 只只 在在 标标 号号 定定 义义 的的 段段 中中 用用JMP或或 条条 件件 转转移移指指令令(或或CALL)来来访访问问,需需
2、要要将将标标号号的的距距离离属属 性性定义为定义为NEAR;如如果果一一个个标标号号能能被被其其他他段段中中的的JMP指指令令(或或CALL)来访问,那么需要将这个标号的距离定义为来访问,那么需要将这个标号的距离定义为FAR。第二页,本课件共有69页12/6/202231、定义距离属性为、定义距离属性为NEAR的标号的标号1)隐式说明隐式说明:即在标号后面加上冒号,放在指令的前面。即在标号后面加上冒号,放在指令的前面。例如:例如:L1:MOV AX,SI NEXT:MOC AX,BX L1和和NEXT都是标号名,它们的距离属性均为都是标号名,它们的距离属性均为NEAR。2)显式说明显式说明:即
3、用即用LABEL伪指令或在伪指令或在EQU指令中指令中 用用THIS操作符明显的说明。操作符明显的说明。例如:例如:L2 LABEL NEAR MOV DX,CX L3 EQU THIS NEAR OR DL,30H 标号标号L2和和L3的距离属性均为的距离属性均为NEAR。第三页,本课件共有69页12/6/202242、定义距离属性为、定义距离属性为FAR的标号的标号例如例如:L4 LABEL FAR MOV AX,CX L5 EQU THIS FAR OR DL,30H3、同时定义距离属性为、同时定义距离属性为FAR和和NEAR的标号的标号 例如:例如:L6 LABEL FARL7:AND
4、 AL,0FH或者:或者:L6 EQU THIS FAR L7:AND AL,0FH第四页,本课件共有69页12/6/202256.1.2 无条件转移指令无条件转移指令JMP指令(无条件转移)指令(无条件转移)格式:格式:JMP目的操作数目的操作数 功能:功能:JMP指令无条件地控制转移至目标单元指令无条件地控制转移至目标单元 (目的操作数)(目的操作数).JMP指令具体格式有以下五种:指令具体格式有以下五种:1、段内直接转移、段内直接转移 格式:格式:JMP 标号名标号名 ;标号为标号为NEAR属性属性 这个这个标号标号是在本段内某一指令的前面,后面是在本段内某一指令的前面,后面 缀以冒号来
5、定义其位置的(位移量)。缀以冒号来定义其位置的(位移量)。第五页,本课件共有69页12/6/20226例如例如:JMP L2 L1:ADD AX,100L2:MOV CX,30 JMP L12、段内直接短转移、段内直接短转移 格式:格式:JMP SHORT 标号名标号名 例如例如:JMP SHORT L1 L2:MOV DX,CX L1:OR DL,30H 第六页,本课件共有69页12/6/202273、段内间接转移、段内间接转移格式:格式:JMP 地址表达式地址表达式例如例如:JMP BX ;把控制转向把控制转向CS:BX JMP VAR_WORD;把把控控制制转转向向VAR_WORD 存储
6、单元中存放的地址处存储单元中存放的地址处4、段间间接转移段间间接转移格式:格式:JMP 双字存储变量双字存储变量功能:将控制转移到双字存储变量指定的地址,功能:将控制转移到双字存储变量指定的地址,即即 将双字存储变量第二个字作为段地址,将双字存储变量第二个字作为段地址,第一个字为偏移地址处继续执行。第一个字为偏移地址处继续执行。第七页,本课件共有69页12/6/202285、段间直接转移段间直接转移格式:格式:JMP 标号标号 ;标号为;标号为FAR属性属性例如:例如:CODE1 SEGMENT JMP CODE2_NEXT CODE1 ENDS CODE2 SEGMENT CODE2_NEX
7、T LABEL FAR CODE2 ENDS第八页,本课件共有69页12/6/202296.3.3比较指令比较指令CMP 指令(比较指令)指令(比较指令)格式:格式:CMP 目的操作数,源操作数目的操作数,源操作数功能:功能:CMP指令与指令与SUB指令一样执行减法操作,指令一样执行减法操作,即目的操作数减去源操作数,但其结果不送即目的操作数减去源操作数,但其结果不送 回目的操作数。执行指令后,两个操作数保回目的操作数。执行指令后,两个操作数保 持原值不变。只是影响标志位:持原值不变。只是影响标志位:OF,CF,PF,SF,ZF,AF.注意:注意:CMP指令后面往往会跟着一条条件转移指令后面往
8、往会跟着一条条件转移指令,根据比较结果产生不同的程序分支。指令,根据比较结果产生不同的程序分支。第九页,本课件共有69页12/6/2022106.1.4条件转移指令条件转移指令 8086/8088提供了很多条件转移指令提供了很多条件转移指令,而且往往一条指令而且往往一条指令有好几种助记符表示形式有好几种助记符表示形式,归纳主要分成两大类:归纳主要分成两大类:判断两数大小的条件转移指令。判断两数大小的条件转移指令。测试单个标志位的条件转移相令。测试单个标志位的条件转移相令。1、比较两个无符号数、比较两个无符号数,判断无符号数大小的条件转移指令判断无符号数大小的条件转移指令1)JAJNBE(jum
9、p if not blow or equal,or above)JA 指令(高于转移)指令(高于转移)JNBE 指令(不低于等于转移)指令(不低于等于转移)这是一条条件转移指令的两种助记符。这是一条条件转移指令的两种助记符。当两个无符号数进行比较时,如果当两个无符号数进行比较时,如果AB成立则转移。成立则转移。第十页,本课件共有69页12/6/2022112)JBEJNA(jump if blow or equal,or not above)JBE指令(低于或等于转移)指令(低于或等于转移)JNA指令(不高于转移)指令(不高于转移)当两个无符号数进行比较时,如果当两个无符号数进行比较时,如果A
10、B成立,则转移成立,则转移3)JAEJNB(jump if not blow,or above or equal)JAE指令(高于等于转移)指令(高于等于转移)JNB指令(不低于转移)指令(不低于转移)当两个无符号数相比较时,如果当两个无符号数相比较时,如果AB成立,则转移。成立,则转移。4)JB/JNAE(jump if blow,or not above or equal)JB指令(低于转移)指令(低于转移)JNAE指令(不高于等于转移)指令(不高于等于转移)当两个无符号数相比较时,如果当两个无符号数相比较时,如果AB成立则转移。成立则转移。第十一页,本课件共有69页12/6/202212
11、2、判断带符号数的大小的条件转移指令、判断带符号数的大小的条件转移指令1)JGJNLE(jump if greater,or not less or equal)JG指令(大于转移)指令(大于转移)JNLE措令(不小于等于转移)措令(不小于等于转移)当两个带符号数相比较时,如果当两个带符号数相比较时,如果AB,则转移,则转移 到目标地址。到目标地址。2)JGEJNL(jump if greater or equal,or not less)JGE指令(大于等于转移)指令(大于等于转移)JNL指令(不小于转移)指令(不小于转移)两个带符号数相比较时两个带符号数相比较时,若若AB,转移到目标地址转
12、移到目标地址第十二页,本课件共有69页12/6/2022133)JLJNGE(jump if less,or not greater or equal)JL指令(小于转移)指令(小于转移)JNGE指令(不大于等于转移)指令(不大于等于转移)当两个带符号数相比较时当两个带符号数相比较时,当当AB时时,转移到目标地址。转移到目标地址。4)JLEJNG(jump if less or equal,or not greater)JLE指令(小于等于转移)指令(小于等于转移)JNG指令(不大于转移)指令(不大于转移)当两个带符号数相比较时当两个带符号数相比较时,当当AB时时,转移到目标地址。转移到目标地
13、址。2、判断带符号数的大小的条件转移指令、判断带符号数的大小的条件转移指令第十三页,本课件共有69页12/6/2022143、测试单个标志的条件转移指令、测试单个标志的条件转移指令1)测试)测试ZF JEJZ(jump if zero,or equal)JE指令(相等则转移)指令(相等则转移)JZ指令(等于指令(等于0转移)转移)当当ZF=l时转移到目标地址的条件转移指令的两种时转移到目标地址的条件转移指令的两种助记符。它既适用于判断无符号数的相等,又适助记符。它既适用于判断无符号数的相等,又适用于判断带符号数的相等用于判断带符号数的相等。JNEJNZ(jump if not zero,or
14、not equal)JNE指令(不相等则转移)指令(不相等则转移)JNZ指令(不等于指令(不等于0转移)转移)当当ZF=0时转移到目标地址的条件转移指令的两种时转移到目标地址的条件转移指令的两种助记符。既适用于判断有助记符。既适用于判断有/无符号数的相等无符号数的相等.第十四页,本课件共有69页12/6/2022152)测试)测试CFJC(jump if carry)当当CF=1时,转移到目标地址。时,转移到目标地址。JNC(jump if not carry)当当CF=0时时,转移到目标地址。转移到目标地址。3)测试)测试SFJS(jump if sign)指令(为负转移)指令(为负转移)当
15、当SF=1时,能转移到目标地址的条件转移指令。时,能转移到目标地址的条件转移指令。JNS(jump if not sign)指令(为正转移)指令(为正转移)当当SF=0时能转移到目标地址的条件转移指令时能转移到目标地址的条件转移指令4)测试)测试PFJPJPE 指令(为偶转移)指令(为偶转移)PF=1时时,转移到目标地址的条件转移指令的两种助记符转移到目标地址的条件转移指令的两种助记符.第十五页,本课件共有69页12/6/202216JNP/JPO (为奇转移)为奇转移)当当PF=0时时,转移到目标地址的条件转移指令转移到目标地址的条件转移指令5)测试)测试OFJO(jump if overf
16、low)指令(溢出转移)指令(溢出转移)当满足当满足OF=1时,转移到目标地址的条件转移指令。时,转移到目标地址的条件转移指令。JNO(jump if not overflow)指令(未溢出转移)指令(未溢出转移)当当OF=0时,转移到目标地址的条件转移指令。时,转移到目标地址的条件转移指令。第十六页,本课件共有69页12/6/202217单路分支:单路分支:在在C语言中,单分支语句语言中,单分支语句 if(AL)(BL)AL=BL;汇编语言实现方法:汇编语言实现方法:比较指令后面紧跟上条件转移指令。比较指令后面紧跟上条件转移指令。CMP AL,BLJAE L1MOV AL,BLL1:反方向判
17、断反方向判断第十七页,本课件共有69页12/6/202218例例6.6 求一组无符号数的最大值和最小值,分别放求一组无符号数的最大值和最小值,分别放 在存储单元在存储单元MAX和和MIN中。中。DATA SEGMENT A DW 349AH,567H,7802H,9031H,0002H,8671H MAX DW?MIN DW?DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATASTART:MOV AX,DATA MOV DS,AX :;插入程序 MOV AH,4CH INT 21HCODE ENDS END START 第十八页,本课件共有69页12/6/2
18、02219 MOV AX,0 ;AX用于存放最大值 MOV BX,0FFFFH ;BX用于存放最小值 MOV SI,0 MOV CX,6L1:CMP AX,ASI JA L2 MOV AX,ASIL2:CMP BX,ASI JB L3 MOV BX,ASIL3:INC SI INC SI LOOP L1 MOV MAX,AX MOV MIN,BX 第十九页,本课件共有69页12/6/202220两路分支程序举例:两路分支程序举例:在在C语言中,两路分支表示如下:语言中,两路分支表示如下:if(ALCX,若,若CX不为不为0,则将控制转移,则将控制转移到目标操作数(指定标号处);否则顺序执行到目
19、标操作数(指定标号处);否则顺序执行LOOP指令之指令之后的指令。后的指令。程序举例程序举例例例6l 一组数求和,假设有一组数求和,假设有20个个16位二进制数,位二进制数,要对这要对这20个数求和(假设和值个数求和(假设和值SI MOV CX,NUM SHR CX,1;NUM/2=CXNZERO:INC SI INC SI MOV AX,ARR1SI ADD AX,ARR2SI MOV SUMSI,AX LOOPNZ NZERODATA SEGMENTARR1 DW 23H,34H,0,5H,66H,0,345H,567HARR2 DW 34H,24H,0,2H,44H,0,345H,56H
20、NUM EQU$-OFFSET ARRAY2SUM DW 15 DUP(?)(?)DATA ENDS第三十四页,本课件共有69页12/6/202235 JNZ L MOV DL,Y JMP Q L:MOV DL,N Q:MOV AH,02H INT 21H MOV AH,4CH INT 21HCODE ENDS END START3、JCXZ(CX为为 0转移)转移)格式:格式:JCXZ 短矩离标号短矩离标号 功能:功能:JCXZ指令在指令在CX等于等于0时将控制转移到时将控制转移到 目标操作数(目标标号处)。目标操作数(目标标号处)。第三十五页,本课件共有69页12/6/2022366.3
21、多重循环程序设计多重循环程序设计二重循环的参考格式:二重循环的参考格式:MOV CX,COUNT1;外外层层循循环环计计数数值值LOOPER1:.MOV BUF,CX ;存外循环计数到存外循环计数到BUF MOV CX,COUNT2;内层循环计数值内层循环计数值LOOPER2:.LOOP LOOPER2;内层循环结束;内层循环结束 MOV CX,BUF;恢复外层循环计数值恢复外层循环计数值 .LOOP LOOPER1;外层循环结束外层循环结束第三十六页,本课件共有69页12/6/202237例题例题6.4:将:将N个不同的无符号数个不同的无符号数 A0,A1,A2,AN-1 由小到大排序。由小
22、到大排序。DATA SEGMENT A DB 9,8,7,6,5,4,3,2,1,0 COUNT EQU$-offset ADATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATASTART:MOV AX,DATA MOV DS,AX MOV AH,4CH INT 21HCODE ENDS END START第三十七页,本课件共有69页12/6/202238 MOV CX,COUNT-1 ;外循环循环COUNT-1次 MOV BX,0 LOOP1:MOV DX,CX ;把CX的值暂时保存在DX中 MOV SI,1 LOOP2:MOV AL,ABX CMP AL,
23、ABX+SI JNA L1 XCHG AL,ABX+SI;交换ABX和ABX+SI值 MOV ABX,AL L1:INC SI LOOP LOOP2 INC BX MOV CX,DX;恢复CX的值 LOOP LOOP1 第三十八页,本课件共有69页12/6/2022396.4 子程序子程序6.4.1子程序定义子程序定义 用用一一对对伪伪指指令令PROCENDP定定义义一一个个子子程程序序(过过程程),其格式如下:其格式如下:名称名称 PROC NEARFAR RET 名称名称 ENDP6.4.2子程序调用与返回子程序调用与返回 调用子程序用调用子程序用CALL指令,指令,CALL指令将其下条指
24、令指令将其下条指令的地址(返回地址)保存在堆栈里,将控制转移到的地址(返回地址)保存在堆栈里,将控制转移到过程,执行。当执行到过程,执行。当执行到RET指令时,指令时,RET指令就会指令就会到堆栈里找到由到堆栈里找到由CALL指令保存的返回地址,将控指令保存的返回地址,将控制返回调用(制返回调用(CALL)指令的下条指令继续运行。)指令的下条指令继续运行。第三十九页,本课件共有69页12/6/202240调用子程序用CALL指令示意如下:示意如下:过程调用(主程序)过程调用(主程序)过程定义(子程序)过程定义(子程序)过程名过程名 PROC NEAR CALL过程名过程名 RET 过程名过程名
25、 ENDP6.4.3调用和返回指令调用和返回指令1、CALL(调用)指令(调用)指令格式:格式:CALL 目的操作数目的操作数具体格式与具体格式与JMP指令相似,有四种格式:指令相似,有四种格式:第四十页,本课件共有69页12/6/2022411)段内直接调用)段内直接调用 CALL过程名(过程名(NEAR类型)类型)2)段内间接调用)段内间接调用 CALL WORD PTRBX3)段间直接调用)段间直接调用 CALL 过程名(过程名(FAR类型)类型)4)段间间接调用)段间间接调用 CALL DWORD PTRBX CALL指令的功能是去启动一个过程指令的功能是去启动一个过程.将其下条指令的
26、将其下条指令的偏移地址保存进栈偏移地址保存进栈,以供过程定义中的以供过程定义中的RET能将控制转回能将控制转回到到CALL的下一条指令。的下一条指令。第四十一页,本课件共有69页12/6/2022422、RET指令指令 格式:格式:RET RET 弹出值弹出值 功功 能能:RET指指 令令 将将 控控 制制 从从 一一 个个 过过 程程 返返 回回 到到 调调 用用 该该 过程的过程的CALL指令之后的指令指令之后的指令(返回断点处返回断点处)。第四十二页,本课件共有69页12/6/2022436.4.4子程序举例子程序举例1、段内子程序调用和子程序定义程序格式实例。段内子程序调用和子程序定义
27、程序格式实例。SEGX SEGMENT ASSUME START:CALL SUBT SUBT PROC NEAR RET SUBT ENDP SEGX ENDS END START第四十三页,本课件共有69页12/6/202244例例6.7 求求0A5H与与43H之和,用十六进制形式输出,要求之和,用十六进制形式输出,要求 用子程序实现。用子程序实现。DATA SEGMENT A DB 0A5H B DB 43H C DB?DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATASTART:MOV AX,DATA MOV DS,AX 第四十四页,本课件共有69
28、页12/6/202245MOV AL,A ADD AL,B MOV C,AL MOV CL,4 SHR AL,CL CALL BINIHEX;将将AL中的十六进制数输出中的十六进制数输出 MOV AL,C AND AL,0FH CALL BINIHEX MOV AH,4CH INT 21H第四十五页,本课件共有69页12/6/202246BINIHEX PROC NEAR;将将AL中的一位十六进制数转中的一位十六进制数转 CMP AL,9 ;化为字符的化为字符的ASCII码输出码输出 JA L1 OR AL,30H JMP L2L1:ADD AL,37HL2:MOV DL,AL MOV AH,
29、02H INT 21H RETBINIHEX ENDPCODE ENDSEND START第四十六页,本课件共有69页12/6/202247例例6.8 程序要求从键盘输入一个十进制数,然后把程序要求从键盘输入一个十进制数,然后把 该数以十六进制形式在屏幕上显示出来该数以十六进制形式在屏幕上显示出来。DECIHEX SEGMENT ASSUME CS:DECIHEXREPEAT:CALL DECIBIN ;键入十进制数键入十进制数 CMP BX,0 JE ENDL ;等于零转结束等于零转结束 CALL CRLF ;显示回车换行显示回车换行 CALL BINIHEX ;输出十六进制数输出十六进制数
30、 CALL CRLF ;显示回车换行显示回车换行 JMP REPEAT ;转去继续转去继续ENDL:MOV AH,4CH ;返回返回 DOS INT 21H第四十七页,本课件共有69页12/6/202248DECIBIN PROC NEAR;从键盘键入一个十进制数(限定数字0-9 MOV BX,0;如果输入非0-9之间的字符,退出),化为二进制数存入BX寄存器NEXT:MOV AH,01H INT 21H CMP AL,30H JB EXIT CMP AL,39H JA EXIT AND AL,0FH XOR AH,AH ;AH清0 XCHG AX,BX MOV CX,10 MUL CX XC
31、HG AX,BX ADD BX,AX JMP NEXTEXIT:RETDECIBIN ENDP第四十八页,本课件共有69页12/6/202249BINIHEX PROC NEAR ;将保存在BX的二进制数用十六进制输出 MOV CX,4;需要输出4个十六进制位,用循环4次来实现NEXT1:ROL BX,1;将BX循环左移4位,既是将BX的高四位移到了低四位 ROL BX,1 ROL BX,1 ROL BX,1 MOV DL,BL AND DL,0FH;截取低4位 CMP DL,9 JA L1 OR DL,30H JMP L2L1:ADD DL,37HL2:MOV AH,02H INT 21H
32、LOOP NEXT1 RETBINIHEX ENDP第四十九页,本课件共有69页12/6/202250CRLF PROC NEAR MOV DL,0DH;回车 MOV AH,2 INT 21H MOV DL,0AH;换行 INT 21H RETCRLF ENDPDECIHEX ENDS END REPEAT第五十页,本课件共有69页12/6/2022512、段间子程序调用和子程序定义程序实例。、段间子程序调用和子程序定义程序实例。SEGX SEGMENTSUBT PROC FARRETSUBT ENDPCALL SUBTSEGX ENDSSEGY SEGMENTCALL SUBTSEGY EN
33、DS第五十一页,本课件共有69页12/6/202252习习题题讲讲解解1编编写写一一个个加加密密与与解解密密09位位字字序序列列的的程程序序,设设0,1,2,3,4,5,6,7,8,9对对应应的的密密码码表表为为9,0,8,2,7,4,63,1,5,键键盘盘输输入入任任意意一一个个4位位数数要要求求程程序序能能够够马马上上输输出出这这4位位数数对对应的密码。例如:键盘输入应的密码。例如:键盘输入4925,显示输出,显示输出7584。格式:格式:XLAT 换码表换码表 或或 XLAT功能:功能:(BX)+(AL)=AL;即是用换码表中一;即是用换码表中一 个字节的内容置换个字节的内容置换AL寄存
34、器的内容。寄存器的内容。要求:在此指令之前,要求:在此指令之前,BX寄存器中存放换码表的起寄存器中存放换码表的起 始地址,始地址,AL的内容为要换码的字节在换码表的内容为要换码的字节在换码表 中的下标。即是以中的下标。即是以BX为起点的换码表中,为起点的换码表中,以以(AL)为相对位移,取一字节装入为相对位移,取一字节装入AL。第五十二页,本课件共有69页12/6/202253DATA segmentDATA segment TAB_DA DB 9,0,8,2,7,4,6,3,1,5 TAB_DA DB 9,0,8,2,7,4,6,3,1,5 NUM DB 4 DUP(?)NUM DB 4 D
35、UP(?)DATA endsDATA endsCODE SEGMENTCODE SEGMENT ASSUME CS:CODE,DS:DATA ASSUME CS:CODE,DS:DATASTART:MOV AX,DATASTART:MOV AX,DATA MOV DS,AX MOV DS,AX :MOV AH,4CHMOV AH,4CH INT 21H INT 21HCODE ENDSCODE ENDS END START END START第五十三页,本课件共有69页12/6/202254 MOV SI,0 MOV SI,0 MOV CX,4 MOV CX,4 MOV BX,OFFSET T
36、AB_DA MOV BX,OFFSET TAB_DAL1:MOV AH,01HL1:MOV AH,01H INT 21H INT 21H AND AL,0FH AND AL,0FH XLAT TAB_DA XLAT TAB_DA MOV NUMSI,AL MOV NUMSI,AL INC SI INC SI LOOP L1 LOOP L1 MOV CX,4 MOV CX,4 MOV SI,0 MOV SI,0L2:MOV DL,NUMSIL2:MOV DL,NUMSI OR DL,30H OR DL,30H MOV AH,02H MOV AH,02H INT 21H INT 21H INC S
37、I INC SI LOOP L2 LOOP L2 第五十四页,本课件共有69页12/6/202255习习题题讲讲解解1.从从键键盘盘输输入入一一个个十十进进制制数数,以以回回车车(0DH)结结束束,将将其其转转换换成成它它所所代代表表的的二二进进制制数数据据,然然后后以以十十六进制形式输出。六进制形式输出。DATA SEGMENTDATA SEGMENT BUF DB?BUF DB?PROMPT DB PLEASE ENTER A NUM128:$PROMPT DB PLEASE ENTER A NUM128:$DATA ENDSDATA ENDSCODE SEGMENTCODE SEGMEN
38、T ASSUME CS:CODE,DS:DATA ASSUME CS:CODE,DS:DATASTART:MOV AX,DATASTART:MOV AX,DATA MOV DS,AX MOV DS,AX第五十五页,本课件共有69页12/6/202256 MOV DX,OFFSET PROMPT MOV DX,OFFSET PROMPT MOV AH,09H MOV AH,09H INT 21H INT 21H MOV BUF,0 MOV BUF,0 IN_L:MOV AH,01H IN_L:MOV AH,01H INT 21H INT 21H CMP AL,0DH CMP AL,0DH JE
39、OUT_L JE OUT_L AND AL,0FH AND AL,0FH SAL BUF,1 SAL BUF,1 MOV BL,BUF MOV BL,BUF SAL BUF,1 SAL BUF,1 SAL BUF,1 SAL BUF,1 ADD BUF,BL ADD BUF,BL第五十六页,本课件共有69页12/6/202257 ADD BUF,AL ADD BUF,AL JMP IN_L JMP IN_LOUT_L:MOV DL,0DHOUT_L:MOV DL,0DH MOV AH,02H MOV AH,02H INT 21H INT 21H MOV DL,0AH MOV DL,0AH MO
40、V AH,02H MOV AH,02H INT 21H INT 21H MOV AL,BUF MOV AL,BUF AND AL,0F0H AND AL,0F0H MOV CL,4 MOV CL,4 SHR AL,CL SHR AL,CLNEXT:CMP AL,9NEXT:CMP AL,9 JA L1 JA L1 OR AL,30H OR AL,30H JMP L2 JMP L2L1:ADD AL,37HL1:ADD AL,37HL2:MOV DL,ALL2:MOV DL,AL MOV AH,02H MOV AH,02H INT 21H INT 21H第五十七页,本课件共有69页12/6/20
41、2258 MOV AL,BUF MOV AL,BUF AND AL,0FH AND AL,0FH NEXT2:CMP AL,9 NEXT2:CMP AL,9 JA L3 JA L3 OR AL,30H OR AL,30H JMP L4 JMP L4L3:ADD AL,37HL3:ADD AL,37HL4:MOV DL,ALL4:MOV DL,AL MOV AH,02H MOV AH,02H INT 21H INT 21H MOV AH,4CH MOV AH,4CH INT 21H INT 21HCODE ENDSCODE ENDS END START END START第五十八页,本课件共有6
42、9页12/6/202259习题讲解习题讲解3.键盘输入一个一位加法表达式。键盘输入一个一位加法表达式。1)按按十十进进制制输输出出其其正正确确的的结结果果。例例如如:7+8=15,2+3=05。2 2)按按十十六六进进制制输输出出其其正正确确结结果果。例例如如:7 78=0FH8=0FH,2+3=05H2+3=05H。第五十九页,本课件共有69页12/6/202260DATA SEGMENTDATA SEGMENTBUF DB 3 DUP(?)BUF DB 3 DUP(?)PROMPT DB PLEASE ENTER A equPROMPT DB PLEASE ENTER A equation
43、,0dh,0ah,$tion,0dh,0ah,$DATA ENDSDATA ENDSCODE SEGMENTCODE SEGMENT ASSUME CS:CODE,DS:DATA ASSUME CS:CODE,DS:DATASTART:MOV AX,DATASTART:MOV AX,DATA MOV DS,AX MOV DS,AX MOV DX,OFFSET PROMPT MOV DX,OFFSET PROMPT MOV AH,09H MOV AH,09H INT 21H INT 21H 第六十页,本课件共有69页12/6/202261 MOV CX,3 MOV CX,3 MOV SI,0 M
44、OV SI,0L1:MOV AH,01HL1:MOV AH,01H INT 21H INT 21H AND AL,0FH AND AL,0FH MOV BUFSI,AL MOV BUFSI,AL INC SI INC SI LOOP L1 LOOP L1 MOV DL,=MOV DL,=MOV AH,02H MOV AH,02H INT 21H INT 21H 第六十一页,本课件共有69页12/6/202262 MOV AL,BUF0 MOV AL,BUF0 ADD AL,BUF2 ADD AL,BUF2 CMP AL,9 CMP AL,9 JNA L2;JNA L2;输出个位输出个位 MOV
45、 BL,ALMOV BL,AL MOV DL,1 MOV DL,1 MOV AH,02H MOV AH,02H INT 21H INT 21H MOV AL,BL;MOV AL,BL;输出十位输出十位 SUB AL,10SUB AL,10 L2:MOV DL,AL L2:MOV DL,AL OR DL,30H OR DL,30H MOV AH,02H MOV AH,02H INT 21H INT 21H END_L:MOV AH,4CHEND_L:MOV AH,4CH INT 21H INT 21HCODE ENDSCODE ENDS END START END START第六十二页,本课件共
46、有69页12/6/202263 ;输入形如:输入形如:8+9=8+9=计算计算+,-data segmentdata segment LL DB PLEASE ENTER A+B=$LL DB PLEASE ENTER A+B=$A DB?A DB?OPR DB?OPR DB?B DB?B DB?C DB?C DB?data endsdata endscode segmentcode segment assume cs:code,ds:data assume cs:code,ds:datastart:mov ax,datastart:mov ax,data mov ds,ax mov ds,a
47、x MOV DX,OFFSET LL MOV DX,OFFSET LL MOV AH,09H MOV AH,09H INT 21H INT 21H 第六十三页,本课件共有69页12/6/202264 mov ah,01h;mov ah,01h;输入第一个数输入第一个数 int 21hint 21h and AL,0fh and AL,0fh mov A,AL mov A,AL mov ah,01h;mov ah,01h;输入输入+,-号号 int 21hint 21h mov OPR,AL mov OPR,AL mov ah,01h;mov ah,01h;输入第二个数输入第二个数 int 21
48、hint 21h and AL,0fh and AL,0fh mov B,AL mov B,AL 第六十四页,本课件共有69页12/6/202265 mov ah,01h;mov ah,01h;输入输入=号号 int 21hint 21h MOV AL,A MOV AL,A CMP OPR,+CMP OPR,+JNZ SUBR JNZ SUBR ADD AL,B;+ADD AL,B;+MOV C,AL MOV C,AL JMP L1 JMP L1SUBR:SUB AL,B;-SUBR:SUB AL,B;-MOV C,AL MOV C,AL第六十五页,本课件共有69页12/6/202266 L1
49、:CMP AL,10;AL L1:CMP AL,10;AL中内容输出中内容输出 JB L2JB L2 MOV DL,31H;MOV DL,31H;输出高位输出高位 MOV AH,02HMOV AH,02H INT 21H INT 21H MOV AL,C MOV AL,C SUB AL,10 SUB AL,10L2:OR AL,30H;L2:OR AL,30H;输出低位输出低位 MOV DL,ALMOV DL,AL MOV AH,02H MOV AH,02H INT 21H INT 21H mov ah,4ch mov ah,4ch int 21h int 21hcode endscode e
50、ndsend startend start第六十六页,本课件共有69页12/6/202267;二化十输出的另一方法二化十输出的另一方法 统计统计data segment D DW 346 data endscode segment assume cs:code,ds:datastart:mov ax,data mov ds,ax MOV CL,0 L3:CMP D,100 JB L33 SUB D,100 INC CL JMP L3 第六十七页,本课件共有69页12/6/202268L33:MOV DL,CL;输出百位输出百位 OR DL,30H MOV AH,02H INT 21H MOV