第六章循环与分支程序1.ppt

上传人:本田雅阁 文档编号:2917104 上传时间:2019-06-05 格式:PPT 页数:69 大小:752.02KB
返回 下载 相关 举报
第六章循环与分支程序1.ppt_第1页
第1页 / 共69页
第六章循环与分支程序1.ppt_第2页
第2页 / 共69页
第六章循环与分支程序1.ppt_第3页
第3页 / 共69页
第六章循环与分支程序1.ppt_第4页
第4页 / 共69页
第六章循环与分支程序1.ppt_第5页
第5页 / 共69页
点击查看更多>>
资源描述

《第六章循环与分支程序1.ppt》由会员分享,可在线阅读,更多相关《第六章循环与分支程序1.ppt(69页珍藏版)》请在三一文库上搜索。

1、6/5/2019,1,第六章 循环与分支程序设计,6.1 分支程序设计 6.2 循环程序设计 6.3 多重循环程序设计 6.4 子程序,6/5/2019,2,6.1 分支程序设计,6.1.1 标号,标号: 用来说明可执行指令在汇编语言程序中的位置。 和变量类似,实质上是一个地址值。可以作为 转移指令(或CALL)的操作数。 属性: 段属性、位移量属性和距离属性。,注意: 如果一个标号只在标号定义的段中用JMP或条件 转移指令(或CALL)来访问,需要将标号的距离属 性定义为NEAR; 如果一个标号能被其他段中的JMP指令(或CALL) 来访问,那么需要将这个标号的距离定义为FAR。,6/5/2

2、019,3,1、定义距离属性为NEAR的标号,1)隐式说明:即在标号后面加上冒号,放在指令的前面。 例如:L1: MOV AX,SI NEXT: MOC AX,BX L1和NEXT都是标号名,它们的距离属性均为NEAR。,2)显式说明:即用LABEL伪指令或在EQU指令中 用THIS操作符明显的说明。 例如:L2 LABEL NEAR MOV DX,CX L3 EQU THIS NEAR OR DL,30H 标号L2和L3的距离属性均为NEAR。,6/5/2019,4,2、定义距离属性为FAR的标号,例如: L4 LABEL FAR MOV AX,CX L5 EQU THIS FAR OR D

3、L,30H,3、同时定义距离属性为FAR和NEAR的标号,例如: L6 LABEL FAR L7: AND AL,0FH 或者: L6 EQU THIS FAR L7: AND AL,0FH,6/5/2019,5,6.1.2 无条件转移指令,JMP指令(无条件转移) 格式:JMP目的操作数 功能:JMP指令无条件地控制转移至目标单元 (目的操作数).,JMP指令具体格式有以下五种:,1、段内直接转移 格式:JMP 标号名 ; 标号为NEAR属性 这个标号是在本段内某一指令的前面,后面 缀以冒号来定义其位置的(位移量)。,6/5/2019,6,例如: JMP L2 L1: ADD AX,100

4、L2: MOV CX,30 JMP L1,2、段内直接短转移 格式:JMP SHORT 标号名 例如: JMP SHORT L1 L2: MOV DX,CX L1: OR DL,30H ,6/5/2019,7,3、段内间接转移 格式: JMP 地址表达式 例如: JMP BX ;把控制转向CS:BX JMP VAR_WORD ;把控制转向VAR_WORD 存储单元中存放的地址处,4、 段间间接转移 格式: JMP 双字存储变量 功能:将控制转移到双字存储变量指定的地址, 即 将双字存储变量第二个字作为段地址, 第一个字为偏移地址处继续执行。,6/5/2019,8,5、 段间直接转移 格式: J

5、MP 标号 ;标号为FAR属性 例如: CODE1 SEGMENT JMP CODE2_NEXT CODE1 ENDS CODE2 SEGMENT CODE2_NEXT LABEL FAR CODE2 ENDS,6/5/2019,9,6.3.3比较指令,CMP 指令(比较指令) 格式:CMP 目的操作数,源操作数 功能:CMP指令与SUB指令一样执行减法操作, 即目的操作数减去源操作数,但其结果不送 回目的操作数。执行指令后,两个操作数保 持原值不变。只是影响标志位: OF,CF,PF,SF,ZF,AF. 注意:CMP指令后面往往会跟着一条条件转移 指令,根据比较结果产生不同的程序分支。,6/

6、5/2019,10,6.1.4条件转移指令,8086/8088提供了很多条件转移指令,而且往往一条指令 有好几种助记符表示形式,归纳主要分成两大类: 判断两数大小的条件转移指令。 测试单个标志位的条件转移相令。,1、比较两个无符号数,判断无符号数大小的条件转移指令,1)JAJNBE(jump if not blow or equal , or above) JA 指令(高于转移) JNBE 指令(不低于等于转移) 这是一条条件转移指令的两种助记符。 当两个无符号数进行比较时,如果AB成立则转移。,6/5/2019,11,2)JBEJNA(jump if blow or equal , or n

7、ot above) JBE指令(低于或等于转移) JNA指令(不高于转移) 当两个无符号数进行比较时,如果AB成立,则转移,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成立则转移。,6/5/2019,12,2、判断带符号数的大小的条件转移指令,1)JGJNLE(jump

8、 if greater, or not less or equal) JG指令(大于转移) JNLE措令(不小于等于转移) 当两个带符号数相比较时,如果AB,则转移 到目标地址。,2)JGEJNL(jump if greater or equal, or not less) JGE指令(大于等于转移) JNL指令(不小于转移) 两个带符号数相比较时,若AB,转移到目标地址,6/5/2019,13,3)JLJNGE(jump if less, or not greater or equal ) JL指令(小于转移) JNGE指令(不大于等于转移) 当两个带符号数相比较时,当AB时,转移到目标地址

9、。,4)JLEJNG(jump if less or equal, or not greater) JLE指令(小于等于转移) JNG指令(不大于转移) 当两个带符号数相比较时,当AB时,转移到目标地址。,2、判断带符号数的大小的条件转移指令,6/5/2019,14,3、测试单个标志的条件转移指令,1)测试ZF JEJZ(jump if zero, or equal) JE指令(相等则转移) JZ指令(等于0转移) 当ZF=l时转移到目标地址的条件转移指令的两种 助记符。它既适用于判断无符号数的相等,又适 用于判断带符号数的相等。,JNEJNZ(jump if not zero, or not

10、 equal) JNE指令(不相等则转移) JNZ指令(不等于0转移) 当ZF=0时转移到目标地址的条件转移指令的两种 助记符。既适用于判断有/无符号数的相等.,6/5/2019,15,2)测试CF JC(jump if carry) 当CF=1时,转移到目标地址。,JNC(jump if not carry) 当CF=0时,转移到目标地址。,3)测试SF JS(jump if sign)指令(为负转移) 当SF=1时,能转移到目标地址的条件转移指令。,JNS(jump if not sign)指令(为正转移) 当SF=0时能转移到目标地址的条件转移指令,4)测试PF JPJPE 指令(为偶转

11、移) PF=1时,转移到目标地址的条件转移指令的两种助记符.,6/5/2019,16,JNP/JPO (为奇转移) 当PF=0时,转移到目标地址的条件转移指令,5)测试OF JO(jump if overflow)指令(溢出转移) 当满足OF=1时,转移到目标地址的条件转移指令。,JNO(jump if not overflow)指令(未溢出转移) 当OF=0时,转移到目标地址的条件转移指令。,6/5/2019,17,单路分支:,在C语言中,单分支语句 if (AL)(BL) AL=BL; 汇编语言实现方法: 比较指令后面紧跟上条件转移指令。 CMP AL,BL JAE L1 MOV AL,B

12、L L1: ,反方向判断,6/5/2019,18,例6.6 求一组无符号数的最大值和最小值,分别放 在存储单元MAX和MIN中。,DATA SEGMENT A DW 349AH,567H,7802H,9031H,0002H,8671H MAX DW ? MIN DW ? DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX :;插入程序 MOV AH,4CH INT 21H CODE ENDS END START,6/5/2019,19,MOV AX,0 ;AX用于存放最大值 MOV BX,0FFFF

13、H ;BX用于存放最小值 MOV SI,0 MOV CX,6 L1: CMP AX,ASI JA L2 MOV AX,ASI L2: CMP BX,ASI JB L3 MOV BX,ASI L3: INC SI INC SI LOOP L1 MOV MAX,AX MOV MIN,BX,6/5/2019,20,两路分支程序举例:,在C语言中,两路分支表示如下: if (ALBL)AL=BL; else BL=AL; 汇编语言实现两路分支程序如下: CMP AL,BL JAE L1 MOV AL,BL JMP L2 L1: MOV BL,AL L2: ,6/5/2019,21,两路分支程序举例:

14、例: 将存放在AL中的十六进制数字输出,方法: 利用0-30H- OR 30H 9-39H A-41H-ADD 37H B-42H F-47H,CMP AL,9 JA L1 OR AL,30H JMP L2 L1: ADD AL,37H L2: MOV DL,AL MOV AH,02H INT 21H,6/5/2019,22,程序举例: 例6.5 将0B4H-25H 的结果用十六进制输出,方法二、利用0-30H- OR 30H 9-39H A-41H-ADD 37H B-42H F-47H,6/5/2019,23,MOV AL,D SUB AL,E MOV F,AL AND AL,0F0H M

15、OV CL,4 SHR AL,CL CMP AL,9 JA L1 OR AL,30H JMP L2 L1: ADD AL,37H,L2: MOV DL,AL MOV AH,02H INT 21H MOV AL,F AND AL,0FH CMP AL,9 JA L3 OR AL,30H JMP L4 L3: ADD AL,37H L4: MOV DL,AL MOV AH,02H INT 21H,6/5/2019,24,程序举例: 例6.5 将0B4H-25H 的结果用十六进制输出,方法三、利用0-30H- OR 30H 9-39H A-41H- OR 30H ADD 7H B-42H F-47H

16、,6/5/2019,25,MOV AL,D SUB AL,E MOV F,AL AND AL,0F0H MOV CL,4 SHR AL,CL OR AL,30H CMP AL,39H JBE L1 ADD AL,7H,L1: MOV DL,AL MOV AH,02H INT 21H MOV AL,F AND AL,0FH OR AL,30H CMP AL,39H JBE L2 ADD AL,7H L2: MOV DL,AL MOV AH,02H INT 21H,6/5/2019,26,6.2 循环程序设计,JCXZ:当CX为0时跳转的条件转移指令; LOOP:使CX的值递减并且产生一个无 条件

17、跳转的循环指令; LOOPE/LOOPZ,LOOPNE/LOOPNZ 条件循环迭代控制指令,根据零状态标志 位的状态, 决定是否继续进行循环操作。,循环控制指令可用来控制循环。它们用CX寄存器作为计数器,来控制循环次数。并且都是短距离转移指令。,6/5/2019,27,1、 LOOP 指令(执行循环直到计数为0) 格式:LOOP 短距离标号 例如:L1: LOOP L1 功能: CX-1=CX,若CX不为0,则将控制转移 到目标操作数(指定标号处);否则顺序执行LOOP指令之后的指令。,程序举例 例6l 一组数求和,假设有20个16位二进制数, 要对这20个数求和(假设和值65536) 程序如

18、下:,6/5/2019,28,DATA SEGMENT ARRY DW 123CH, 3DH,100H,90H,345H,12H, DW 0A5H, 4BH,89H DW 87H,234H,64H,35H,20H,21H,50H, DW 88H,92H,11H,0FFH DATA ENDS CODE SEGMENT ASSUME CS: CODE, DS: DATA START: MOV AX,DATA MOV DS,AX,6/5/2019,29,MOV CX,20 MOV SI,0 MOV AX, 0 NEXT: ADD AX,ARRYSI INC SI INC SI LOOP NEXT M

19、OV AH,4CH INT 21H CODE ENDS END START,6/5/2019,30,2、LOOPELOOPZ(如果相等如果为0则循环) 格式:LOOPELOOPZ 短距离标号 功能:该指令将 CX减 1,若 CX不为 0且ZF置1 (即CX0且运算结果为0),则将控制转移到 目标操作数,否则: 顺序执行LOOPE/LOOPZ指令之后的指令。,6/5/2019,31,例6.2 在字节数组中找出第一个非零元素,并显示 输出第一个非零元素的下标 程序如下:,DATA SEGMENT ARRAY DB 0,0,0,0,0,0,84,0,9,10 COUNT EQU -OFFSET AR

20、RAY DATA ENDS CODE SEGMENT ASSUME CS: CODE, DS: DATA BEGIN: MOV AX,DATA MOV DS,AX MOV CX,COUNT MOV DI,-1,6/5/2019,32,NEXT: INC DI CMP ARRAYDI, 0 LOOPZ NEXT JNE OK MOV DL, N; 没找到非零元素,显示N JMP DISPLAY OK: MOV DX, DI OR DL,30H DISPLAY:MOV AH,02H INT 21H MOV AH,4CH INT 21H CODE ENDS END BEGIN,6/5/2019,33

21、,3、LOOPNELOOPNZ(不等不为零,则循环) 格式:LOOPNELOOPNZ 短距离标号 功能:该指令将 CX减1,若 CX不为 0且 ZF为 0(即CX0且运算结果不为0),则将控制转移到指定标号;否则,顺序执行下一条指令。,例6.3 求两个一维字数组的和,数组元素个数为N, 当计算到两个数组对应元素之和为零时就停 止求和,(假设数组元素为无符号二进制数)。 其实现程序如下:,DATA SEGMENT ARR1 DW 23H, 34H, 0, 5H, 66H, 0, 345H, 567H ARR2 DW 34H, 24H, 0, 2H, 44H, 0, 345H, 56H NUM E

22、QU $-OFFSET ARRAY2 SUM DW 15 DUP(?) DATA ENDS,6/5/2019,34,CODE SEGMENT ASSUME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX MOV AX,0 MOV SI,0FFFEH ;-2=SI MOV CX,NUM SHR CX,1 ;NUM/2=CX NZERO:INC SI INC SI MOV AX,ARR1SI ADD AX,ARR2SI MOV SUMSI,AX LOOPNZ NZERO,DATA SEGMENT ARR1 DW 23H, 34H, 0, 5H, 66H, 0

23、, 345H, 567H ARR2 DW 34H, 24H, 0, 2H, 44H, 0, 345H, 56H NUM EQU $-OFFSET ARRAY2 SUM DW 15 DUP(?) DATA ENDS,6/5/2019,35,JNZ L MOV DL,Y JMP Q L: MOV DL,N Q: MOV AH,02H INT 21H MOV AH,4CH INT 21H CODE ENDS END START,3、JCXZ(CX为 0转移) 格式:JCXZ 短矩离标号 功能:JCXZ指令在CX等于0时将控制转移到 目标操作数(目标标号处)。,6/5/2019,36,6.3 多重循环

24、程序设计,二重循环的参考格式: MOV CX,COUNT1;外层循环计数值LOOPER1: . MOV BUF,CX ; 存外循环计数到BUF MOV CX,COUNT2;内层循环计数值LOOPER2: . LOOP LOOPER2;内层循环结束 MOV CX, BUF;恢复外层循环计数值 . LOOP LOOPER1;外层循环结束,6/5/2019,37,例题6.4:将N个不同的无符号数 A0,A1,A2, AN-1 由小到大排序。,DATA SEGMENT A DB 9,8,7,6,5,4,3,2,1,0 COUNT EQU $-offset A DATA ENDS CODE SEGMEN

25、T ASSUME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX,MOV AH,4CH INT 21H CODE ENDS END START,6/5/2019,38,MOV CX,COUNT-1 ;外循环循环COUNT-1次 MOV BX,0 LOOP1:MOV DX,CX ;把CX的值暂时保存在DX中 MOV SI,1 LOOP2:MOV AL,ABX CMP AL,ABX+SI JNA L1 XCHG AL,ABX+SI;交换ABX和ABX+SI值 MOV ABX,AL L1: INC SI LOOP LOOP2 INC BX MOV CX,DX;

26、恢复CX的值 LOOP LOOP1,6/5/2019,39,6.4 子程序,6.4.1子程序定义,用一对伪指令PROCENDP定义一个子程序(过程), 其格式如下: 名称 PROC NEARFAR RET 名称 ENDP,6.4.2子程序调用与返回,调用子程序用CALL指令,CALL指令将其下条指令 的地址(返回地址)保存在堆栈里,将控制转移到 过程,执行。当执行到RET指令时,RET指令就会 到堆栈里找到由CALL指令保存的返回地址,将控 制返回调用(CALL)指令的下条指令继续运行。,6/5/2019,40,调用子程序用CALL指令 示意如下: 过程调用(主程序) 过程定义(子程序) 过程

27、名 PROC NEAR CALL过程名 RET 过程名 ENDP,6.4.3调用和返回指令,1、CALL(调用)指令 格式:CALL 目的操作数 具体格式与JMP指令相似,有四种格式:,6/5/2019,41,1)段内直接调用 CALL过程名(NEAR类型) 2)段内间接调用 CALL WORD PTRBX 3)段间直接调用 CALL 过程名(FAR类型) 4)段间间接调用 CALL DWORD PTRBX,CALL指令的功能是去启动一个过程 .将其下条指令的偏移地址保存进栈,以供过程定义中的RET能将控制转回到CALL的下一条指令。,6/5/2019,42,2、RET指令 格式:RET RE

28、T 弹出值 功能:RET指令将控制从一个过程返回到调用该 过程的CALL指令之后的指令(返回断点处)。,6/5/2019,43,6.4.4子程序举例,1、段内子程序调用和子程序定义程序格式实例。 SEGX SEGMENT ASSUME START: CALL SUBT SUBT PROC NEAR RET SUBT ENDP SEGX ENDS END START,6/5/2019,44,例6.7 求0A5H与43H之和,用十六进制形式输出,要求 用子程序实现。,DATA SEGMENT A DB 0A5H B DB 43H C DB ? DATA ENDS CODE SEGMENT ASSU

29、ME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX,6/5/2019,45,MOV 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,6/5/2019,46,BINIHEX PROC NEAR ;将AL中的一位十六进制数转 CMP AL,9 ;化为字符的ASCII码输出 JA L1 OR AL,30H JMP L2 L1: ADD AL,37H L2: MOV D

30、L,AL MOV AH,02H INT 21H RET BINIHEX ENDP CODE ENDS END START,6/5/2019,47,例6.8 程序要求从键盘输入一个十进制数,然后把 该数以十六进制形式在屏幕上显示出来。,DECIHEX SEGMENT ASSUME CS:DECIHEX REPEAT: CALL DECIBIN ;键入十进制数 CMP BX,0 JE ENDL ;等于零转结束 CALL CRLF ; 显示回车换行 CALL BINIHEX ; 输出十六进制数 CALL CRLF ;显示回车换行 JMP REPEAT ;转去继续 ENDL: MOV AH, 4CH

31、;返回 DOS INT 21H,6/5/2019,48,DECIBIN 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 XCHG AX,BX ADD BX, AX JMP NEXT,EXIT: RET DECIBIN ENDP,6/5/2019,49,BINI

32、HEX 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 L2 L1: ADD DL,37H L2: MOV AH,02H INT 21H LOOP NEXT1,RET BINIHEX ENDP,6/5/2019,50,CRLF PROC NEAR MOV DL,0DH;“回车“

33、 MOV AH,2 INT 21H MOV DL,0AH;“换行“ INT 21H RET CRLF ENDP DECIHEX ENDS END REPEAT,6/5/2019,51,2、段间子程序调用和子程序定义程序实例。 SEGX SEGMENT SUBT PROC FAR RET SUBT ENDP CALL SUBT SEGX ENDS SEGY SEGMENT CALL SUBT SEGY ENDS,6/5/2019,52,习题讲解1编写一个加密与解密09位字序列的程序,设0,1,2,3,4,5,6,7,8,9对应的密码表为9,0,8,2,7,4,63,1,5,键盘输入任意一个4位数

34、要求程序能够马上输出这4位数对应的密码。例如:键盘输入4925,显示输出7584。,格式:XLAT 换码表 或 XLAT 功能:(BX)+(AL)=AL;即是用换码表中一 个字节的内容置换AL寄存器的内容。 要求:在此指令之前,BX寄存器中存放换码表的起 始地址,AL的内容为要换码的字节在换码表 中的下标。即是以BX为起点的换码表中, 以(AL)为相对位移,取一字节装入AL。,6/5/2019,53,DATA segment TAB_DA DB 9,0,8,2,7,4,6,3,1,5 NUM DB 4 DUP(?) DATA ends CODE SEGMENT ASSUME CS:CODE,D

35、S:DATA START: MOV AX,DATA MOV DS,AX : MOV AH,4CH INT 21H CODE ENDS END START,6/5/2019,54,MOV SI,0 MOV CX,4 MOV BX,OFFSET TAB_DA L1: MOV AH,01H INT 21H AND AL,0FH XLAT TAB_DA MOV NUMSI,AL INC SI LOOP L1,MOV CX,4 MOV SI,0 L2: MOV DL,NUMSI OR DL,30H MOV AH,02H INT 21H INC SI LOOP L2,6/5/2019,55,习题讲解1.

36、从键盘输入一个十进制数,以回车(0DH)结束,将其转换成它所代表的二进制数据,然后以十六进制形式输出。,DATA SEGMENT BUF DB ? PROMPT DB PLEASE ENTER A NUM128:$ DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX,6/5/2019,56,MOV DX,OFFSET PROMPT MOV AH,09H INT 21H MOV BUF,0 IN_L:MOV AH,01H INT 21H CMP AL,0DH JE OUT_L AND AL,0FH

37、SAL BUF,1 MOV BL,BUF SAL BUF,1 SAL BUF,1 ADD BUF,BL,6/5/2019,57,ADD BUF,AL JMP IN_L OUT_L: MOV DL,0DH MOV AH,02H INT 21H MOV DL,0AH MOV AH,02H INT 21H MOV AL,BUF AND AL,0F0H MOV CL,4 SHR AL,CL,NEXT: CMP AL,9 JA L1 OR AL,30H JMP L2 L1: ADD AL ,37H L2: MOV DL,AL MOV AH,02H INT 21H,6/5/2019,58,MOV AL,B

38、UF AND AL,0FH NEXT2:CMP AL,9 JA L3 OR AL,30H JMP L4 L3: ADD AL,37H L4: MOV DL,AL MOV AH,02H INT 21H,MOV AH,4CH INT 21H CODE ENDS END START,6/5/2019,59,习题讲解3. 键盘输入一个一位加法表达式。 1)按十进制输出其正确的结果。例如:7+8=15,2+3=05。 2)按十六进制输出其正确结果。例如:78=0FH,2+3=05H。,6/5/2019,60,DATA SEGMENT BUF DB 3 DUP(?) PROMPT DB PLEASE EN

39、TER A equation,0dh,0ah,$ DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV DX,OFFSET PROMPT MOV AH,09H INT 21H,6/5/2019,61,MOV CX,3 MOV SI,0 L1: MOV AH,01H INT 21H AND AL,0FH MOV BUFSI,AL INC SI LOOP L1 MOV DL,= MOV AH,02H INT 21H,6/5/2019,62,MOV AL,BUF0 ADD AL,BUF2 CMP

40、AL,9 JNA L2;输出个位 MOV BL,AL MOV DL,1 MOV AH,02H INT 21H MOV AL,BL;输出十位 SUB AL,10 L2: MOV DL,AL OR DL,30H MOV AH,02H INT 21H,END_L: MOV AH,4CH INT 21H CODE ENDS END START,6/5/2019,63,;输入形如:8+9=计算+,- data segment LL DB PLEASE ENTER A+B=$ A DB ? OPR DB ? B DB ? C DB ? data ends code segment assume cs:co

41、de,ds:data start:mov ax,data mov ds,ax MOV DX,OFFSET LL MOV AH,09H INT 21H,6/5/2019,64,mov ah,01h;输入第一个数 int 21h and AL,0fh mov A,AL mov ah,01h;输入+,-号 int 21h mov OPR,AL mov ah,01h;输入第二个数 int 21h and AL,0fh mov B,AL,6/5/2019,65,mov ah,01h;输入=号 int 21h MOV AL,A CMP OPR,+ JNZ SUBR ADD AL,B ;+ MOV C,AL

42、 JMP L1 SUBR:SUB AL,B ;- MOV C,AL,6/5/2019,66,L1: CMP AL,10 ;AL中内容输出 JB L2 MOV DL,31H;输出高位 MOV AH,02H INT 21H MOV AL,C SUB AL,10 L2: OR AL,30H;输出低位 MOV DL,AL MOV AH,02H INT 21H,mov ah,4ch int 21h code ends end start,6/5/2019,67,;二化十输出的另一方法 统计 data segment D DW 346 data ends code segment assume cs:co

43、de,ds:data start:mov ax,data mov ds,ax MOV CL,0 L3: CMP D,100 JB L33 SUB D,100 INC CL JMP L3,6/5/2019,68,L33: MOV DL,CL;输出百位 OR DL,30H MOV AH,02H INT 21H MOV CL,0 L2: CMP D,10 JB L22 SUB D,10 INC CL JMP L2,6/5/2019,69,L22: MOV DL,CL;输出十位 OR DL,30H MOV AH,02H INT 21H L1: MOV DX,D;输出个位 OR DL,30H MOV AH,02H INT 21H mov ah,4ch int 21h code ends end start,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1