第6章循环与分支程序课件

上传人:沈*** 文档编号:241660755 上传时间:2024-07-14 格式:PPT 页数:76 大小:590.50KB
返回 下载 相关 举报
第6章循环与分支程序课件_第1页
第1页 / 共76页
第6章循环与分支程序课件_第2页
第2页 / 共76页
第6章循环与分支程序课件_第3页
第3页 / 共76页
点击查看更多>>
资源描述
第六章第六章 循环与分支程序设计循环与分支程序设计6.1 分支程序设计分支程序设计 6.2 循环程序设计循环程序设计6.3 多重循环程序设计多重循环程序设计6.4 子程序子程序 7/14/202416.1 分支程序设计分支程序设计6.1.1 标号标号标号标号:用来说明可执行指令在汇编语言程序中的位置。用来说明可执行指令在汇编语言程序中的位置。和变量类似,实质上是一个地址值。可以作为和变量类似,实质上是一个地址值。可以作为 转移指令(或转移指令(或CALL)的操作数。的操作数。属性:属性:段属性段属性、位移量属性和距离属性位移量属性和距离属性。注注 意意:如如 果果 一一 个个 标标 号号 只只 在在 标标 号号 定定 义义 的的 段段 中中 用用 JMP或或 条条 件件 转转 移移 指指 令令(或或 CALL)来来 访访 问问,需需 要要 将将 标标 号号 的的 距距 离离 属属 性定义为性定义为NEAR;如如果果一一个个标标号号能能被被其其他他段段中中的的JMP指指令令(或或CALL)来访问,那么需要将这个标号的距离定义为来访问,那么需要将这个标号的距离定义为FAR。7/14/202421、定义距离属性为、定义距离属性为NEAR的标号的标号1)隐式说明隐式说明:即在标号后面加上冒号,放在指令的前面。即在标号后面加上冒号,放在指令的前面。例如:例如:L1:MOV AX,SI NEXT:MOV 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。7/14/202432、定义距离属性为、定义距离属性为FAR的标号的标号例如例如:L4 LABEL FAR MOV AX,CX L5 EQU THIS FAR OR DL,30H3、同时定义距离属性为、同时定义距离属性为FAR和和NEAR的标号的标号 例如:例如:L6 LABEL FARL7:AND AL,0FH或者或者:L6 EQU THIS FAR L7:AND AL,0FH7/14/202446.1.2 无条件转移指令无条件转移指令JMP指令(无条件转移)指令(无条件转移)格式:格式:JMP目的操作数目的操作数 功能:功能:JMP指令无条件地控制转移至目标单元指令无条件地控制转移至目标单元 (目的操作数)(目的操作数).JMP指令具体格式有以下五种:指令具体格式有以下五种:1、段内直接转移、段内直接转移 格式:格式:JMP 标号名标号名 ;标号为标号为NEAR属性属性 这个这个标号标号是在本段内某一指令的前面,后面是在本段内某一指令的前面,后面 缀以冒号来定义其位置的(位移量)。缀以冒号来定义其位置的(位移量)。7/14/20245例如例如:JMP L2 L1:ADD AX,100L2:MOV CX,30 JMP L12、段内直接短转移、段内直接短转移 格式:格式:JMP SHORT 标号名标号名 例如例如:JMP SHORT L1 L2:MOV DX,CX L1:OR DL,30H 7/14/202463、段内间接转移、段内间接转移格式:格式:JMP 地址表达式地址表达式例如例如:JMP BX ;把控制转向把控制转向CS:BX JMP VAR_WORD;把把控控制制转转向向VAR_WORD 存储单元中存放的地址处存储单元中存放的地址处4、段间间接转移段间间接转移格式:格式:JMP 双字存储变量双字存储变量功能:将控制转移到双字存储变量指定的地址,功能:将控制转移到双字存储变量指定的地址,即即 将双字存储变量第二个字作为段地址,将双字存储变量第二个字作为段地址,第一个字为偏移地址处继续执行。第一个字为偏移地址处继续执行。7/14/202475、段间直接转移段间直接转移格式:格式:JMP 标号标号 ;标号为;标号为FAR属性属性例如:例如:CODE1 SEGMENT JMP CODE2_NEXT CODE1 ENDS CODE2 SEGMENT CODE2_NEXT LABEL FAR CODE2 ENDS7/14/202486.3.3比较指令比较指令CMP 指令(比较指令)指令(比较指令)格式:格式:CMP 目的操作数,源操作数目的操作数,源操作数功能:功能:CMP指令与指令与SUB指令一样执行减法操作,指令一样执行减法操作,即目的操作数减去源操作数,但其结果不送即目的操作数减去源操作数,但其结果不送 回目的操作数。执行指令后,两个操作数保回目的操作数。执行指令后,两个操作数保 持原值不变。只是影响标志位:持原值不变。只是影响标志位:OF,CF,PF,SF,ZF,AF.注意:注意:CMP指令后面往往会跟着一条条件转移指令后面往往会跟着一条条件转移指令,根据比较结果产生不同的程序分支。指令,根据比较结果产生不同的程序分支。7/14/202496.1.4条件转移指令条件转移指令 8086/8088提供了很多条件转移指令提供了很多条件转移指令,而且往往一条指令而且往往一条指令有好几种助记符表示形式有好几种助记符表示形式,归纳主要分成两大类:归纳主要分成两大类:判断两数大小的条件转移指令。判断两数大小的条件转移指令。测试单个标志位的条件转移相令。测试单个标志位的条件转移相令。1、比较两个无符号数、比较两个无符号数,判断无符号数大小的条件转移指令判断无符号数大小的条件转移指令1)JAJNBE(jump if not blow or equal,or above)JA 指令(高于转移)指令(高于转移)JNBE 指令(不低于等于转移)指令(不低于等于转移)这是一条条件转移指令的两种助记符。这是一条条件转移指令的两种助记符。当两个无符号数进行比较时,如果当两个无符号数进行比较时,如果AB成立则转移。成立则转移。7/14/2024102)JBEJNA(jump if blow or equal,or not 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成立则转移。成立则转移。7/14/2024112、判断带符号数的大小的条件转移指令、判断带符号数的大小的条件转移指令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,转移到目标地址转移到目标地址7/14/2024123)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时时,转移到目标地址。转移到目标地址。2、判断带符号数的大小的条件转移指令、判断带符号数的大小的条件转移指令7/14/2024133、测试单个标志的条件转移指令、测试单个标志的条件转移指令1)测试)测试ZF JEJZ(jump if zero,or equal)JE指令(相等则转移)指令(相等则转移)JZ指令(等于指令(等于0转移)转移)当当ZF=l时转移到目标地址的条件转移指令的两种时转移到目标地址的条件转移指令的两种助记符。它既适用于判断无符号数的相等,又适助记符。它既适用于判断无符号数的相等,又适用于判断带符号数的相等用于判断带符号数的相等。JNEJNZ(jump if not zero,or not equal)JNE指令(不相等则转移)指令(不相等则转移)JNZ指令(不等于指令(不等于0转移)转移)当当ZF=0时转移到目标地址的条件转移指令的两种时转移到目标地址的条件转移指令的两种助记符。既适用于判断有助记符。既适用于判断有/无符号数的相等无符号数的相等.7/14/2024142)测试)测试CFJC(jump if carry)当当CF=1时,转移到目标地址。时,转移到目标地址。JNC(jump if not carry)当当CF=0时时,转移到目标地址。转移到目标地址。3)测试)测试SFJS(jump if sign)指令(为负转移)指令(为负转移)当当SF=1时,能转移到目标地址的条件转移指令。时,能转移到目标地址的条件转移指令。JNS(jump if not sign)指令(为正转移)指令(为正转移)当当SF=0时能转移到目标地址的条件转移指令时能转移到目标地址的条件转移指令4)测试)测试PFJPJPE 指令(为偶转移)指令(为偶转移)PF=1时时,转移到目标地址的条件转移指令的两种助记符转移到目标地址的条件转移指令的两种助记符.7/14/202415JNP/JPO (为奇转移)为奇转移)当当PF=0时时,转移到目标地址的条件转移指令转移到目标地址的条件转移指令5)测试)测试OFJO(jump if overflow)指令(溢出转移)指令(溢出转移)当满足当满足OF=1时,转移到目标地址的条件转移指令。时,转移到目标地址的条件转移指令。JNO(jump if not overflow)指令(未溢出转移)指令(未溢出转移)当当OF=0时,转移到目标地址的条件转移指令。时,转移到目标地址的条件转移指令。7/14/202416单路分支:单路分支:在在C语言中,单分支语句语言中,单分支语句 if(AL)(BL)AL=BL;汇编语言实现方法:汇编语言实现方法:比较指令后面紧跟上条件转移指令。比较指令后面紧跟上条件转移指令。CMP AL,BLJAE L1MOV AL,BLL1:反方向判断反方向判断7/14/202417例例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 7/14/202418 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 7/14/202419两路分支程序举例:两路分支程序举例:在在C语言中,两路分支表示如下:语言中,两路分支表示如下:if(ALCX,若,若CX不为不为0,则将控制转移,则将控制转移到目标操作数(指定标号处);否则顺序执行到目标操作数(指定标号处);否则顺序执行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,56HNUM EQU$-OFFSET ARRAY2SUM DW 15 DUP(?)(?)DATA ENDS7/14/202434 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时将控制转移到时将控制转移到 目标操作数(目标标号处)。目标操作数(目标标号处)。7/14/2024356.3 多重循环程序设计多重循环程序设计二重循环的参考格式:二重循环的参考格式:MOV CX,COUNT1;外外 层层 循循 环环 计计 数数 值值LOOPER1:.MOV BUF,CX ;存外循环计数到存外循环计数到BUF MOV CX,COUNT2;内层循环计数值内层循环计数值LOOPER2:.LOOP LOOPER2;内层循环结束内层循环结束 MOV CX,BUF;恢复外层循环计数值恢复外层循环计数值 .LOOP LOOPER1;外层循环结束外层循环结束7/14/202436例题例题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 ADATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATASTART:MOV AX,DATA MOV DS,AX MOV AH,4CH INT 21HCODE ENDS END START7/14/202437【例例5 5】将将1010个数从小到大排序个数从小到大排序A0A0 A1 A2 A3 A4 A5 A6 A7 A8 A9A1 A2 A3 A4 A5 A6 A7 A8 A9 5 8 4 20 15 1 6 9 3 75 8 4 20 15 1 6 9 3 7方法一方法一:对对 N N个数选择个数选择排序排序N=10N=10基本思想:基本思想:第第1 1次,在次,在A0A0AN-1AN-1中找最小的数交换到中找最小的数交换到A0,A0,第第2 2次,在次,在A1A1AN-1AN-1中找最小的数交换到中找最小的数交换到A1,A1,第第N-1N-1次次,AN-2,AN-2AN-1AN-1中找最小的数交换到中找最小的数交换到AN-1AN-1 7/14/2024381.1.第第1 1次次,选选A0A0AN-1AN-1的最小值交换到的最小值交换到A0:A0:将将1010个数从小到大排序个数从小到大排序A0 A1 A2 A3 A4 A5 A6 A7 A8 A9A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 5 8 4 20 15 1 6 9 3 75 8 4 20 15 1 6 9 3 75 54 44 41 12.2.第第2 2次次,选选A1A1AN-1AN-1的最小值交换到的最小值交换到A1:A1:for(jfor(j=0+1;j=0+1;j if(A0AjAj)则则 交换交换A0A0和和AjAj for(jfor(j=1+1;j=1+1;j if(A1AjAj)则则 交换交换A1A1和和AjAj 7/14/2024391.1.第第1 1次次,选选A0A0AN-1AN-1的最小值交换到的最小值交换到A0:A0:将将1010个数从小到大排序个数从小到大排序A0 A1 A2 A3 A4 A5 A6 A7 A8 A9A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 1 8 5 20 15 4 6 9 3 71 8 5 20 15 4 6 9 3 7 2.2.第第2 2次次,选选A1A1AN-1AN-1的最小值交换到的最小值交换到A1:A1:1 3 8 20 15 5 6 9 4 71 3 8 20 15 5 6 9 4 7 for(jfor(j=0+1;j=0+1;jif(A0AjAj)则则 交换交换A0A0和和AjAj for(jfor(j=1+1;j=1+1;j if(A1AjAj)则则 交换交换A1A1和和AjAj 7/14/202440将将1010个数从小到大排序个数从小到大排序A0 A1 A2 A3 A4 A5 A6 A7 A8 A9A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 1 8 5 20 15 4 6 9 3 71 8 5 20 15 4 6 9 3 7 1 3 8 20 15 5 6 9 4 71 3 8 20 15 5 6 9 4 7I.I.第第i i次次 ,选选AiAi AN-1AN-1的最小值交换到的最小值交换到AiAi:for(jfor(j=i+1;j=i+1;jAjAj)则则 交换交换AiAi 和和AjAj 这样的挑选要做这样的挑选要做N-1次。可得程序次。可得程序如下:如下:7/14/202441#define N 10for(i=0;i N-1;i+)for(i=0;i N-1;i+)for(j=i+1;j N;j+)for(j=i+1;j AjAj)tmptmp=AiAi;AiAi=AjAj;AjAj=tmptmp;printfprintf(排序为:排序为:n);n);将将1010个数从小到大排序个数从小到大排序7/14/202442 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;恢复CX的值 LOOP LOOP1 7/14/2024436.4 子程序子程序6.4.1子程序定义子程序定义 用用一一对对伪伪指指令令PROCENDP定定义义一一个个子子程程序序(过过程程),其格式如下:其格式如下:名称名称 PROC NEARFAR RET 名称名称 ENDP7/14/2024446.4 子程序子程序6.4.2子程序调用与返回子程序调用与返回 CALL指令指令:调用子程序,将其下条指令的地址调用子程序,将其下条指令的地址 (返回地址)保存在堆栈里,将控制转移(返回地址)保存在堆栈里,将控制转移 到过程,执行。到过程,执行。RET指令指令:返回主程序。返回主程序。RET指令会到堆栈里找到指令会到堆栈里找到 由由CALL指令保存的返回地址,将控制指令保存的返回地址,将控制 返回返回CALL指令的下条指令,继续运行。指令的下条指令,继续运行。7/14/202445调用子程序用CALL指令示意如下:示意如下:过程调用(主程序)过程调用(主程序)过程定义(子程序)过程定义(子程序)过程名过程名 PROC NEAR CALL过程名过程名 RET 过程名过程名 ENDP 6.4.3调用和返回指令调用和返回指令1、CALL(调用)指令调用)指令格式:格式:CALL 目的操作数目的操作数具体格式与具体格式与JMP指令相似,有四种格式:指令相似,有四种格式:7/14/2024461)段内直接调用)段内直接调用 CALL过程名(过程名(NEAR类型)类型)2)段内间接调用)段内间接调用 CALL WORD PTRBX3)段间直接调用段间直接调用 CALL 过程名(过程名(FAR类型)类型)4)段间间接调用)段间间接调用 CALL DWORD PTRBX CALL指令的功能是去启动一个过程指令的功能是去启动一个过程,将其下条指,将其下条指令的偏移地址保存进栈令的偏移地址保存进栈,以供过程定义中的以供过程定义中的RET能将能将控制转回到控制转回到CALL的下一条指令。的下一条指令。7/14/2024472、RET指令指令 格式:格式:RET RET 弹出值弹出值 功功 能能:RET指指 令令 将将 控控 制制 从从 一一 个个 过过 程程 返返 回回 到到 调调 用用 该该 过程的过程的CALL指令之后的指令指令之后的指令(返回断点处返回断点处)。7/14/2024486.4.4子程序举例子程序举例1、段内子程序调用和子程序定义程序格式实例。段内子程序调用和子程序定义程序格式实例。SEGX SEGMENT ASSUME START:CALL SUBT SUBT PROC NEAR RET SUBT ENDP SEGX ENDS END START7/14/202449例例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 7/14/202450MOV 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 21H7/14/202451BINIHEX PROC NEAR;将将AL中的一位十六进制数转中的一位十六进制数转 CMP AL,9 ;化为字符的化为字符的ASCII码输出码输出 JA L1 OR AL,30H JMP L2L1:ADD AL,37HL2:MOV DL,AL MOV AH,02H INT 21H RETBINIHEX ENDPCODE ENDSEND START7/14/202452例例6.8 程序要求从键盘输入一个十进制数,然后把程序要求从键盘输入一个十进制数,然后把 该数以十六进制形式在屏幕上显示出来该数以十六进制形式在屏幕上显示出来。DECIHEX SEGMENT ASSUME CS:DECIHEXREPEAT:CALL DECIBIN ;键入十进制数键入十进制数 CMP BX,0 JE ENDL ;等于零转结束等于零转结束 CALL CRLF ;显示回车换行显示回车换行 CALL BINIHEX ;输出十六进制数输出十六进制数 CALL CRLF ;显示回车换行显示回车换行 JMP REPEAT ;转去继续转去继续ENDL:MOV AH,4CH ;返回返回 DOS INT 21H7/14/202453DECIBIN 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 NEXTEXIT:RETDECIBIN ENDP7/14/202454BINIHEX 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 LOOP NEXT1 RETBINIHEX ENDP7/14/202455CRLF PROC NEAR MOV DL,0DH;回车 MOV AH,2 INT 21H MOV DL,0AH;换行 INT 21H RETCRLF ENDPDECIHEX ENDS END REPEAT7/14/2024562、段间子程序调用和子程序定义程序实例。、段间子程序调用和子程序定义程序实例。SEGX SEGMENTSUBT PROC FARRETSUBT ENDPCALL SUBTSEGX ENDSSEGY SEGMENTCALL SUBTSEGY ENDS7/14/2024576编编写写一一个个加加密密与与解解密密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寄存器的内容。寄存器的内容。要求:在此指令之前,要求:在此指令之前,BX寄存器中存放换码表的起寄存器中存放换码表的起 始地址,始地址,AL的内容为要换码的字节在换码表的内容为要换码的字节在换码表 中的下标。即是以中的下标。即是以BX为起点的换码表中,为起点的换码表中,以以(AL)为相对位移,取一字节装入为相对位移,取一字节装入AL。7/14/202458DATA 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 DUP(?)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,4CH MOV AH,4CH INT 21H INT 21HCODE ENDSCODE ENDS END START END START7/14/202459 MOV SI,0 MOV SI,0 MOV CX,4 MOV CX,4 MOV BX,OFFSET TAB_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 SI INC SI LOOP L2 LOOP L2 7/14/202460P79 P79 5_5_4.从从 键键 盘盘 输输 入入 一一 个个 十十 进进 制制 数数,以以 回回 车车(0DH)结结束束,将将其其转转换换成成它它所所代代表表的的二二进进制制数数据据,然后以十六进制形式输出。然后以十六进制形式输出。DATA SEGMENTDATA SEGMENT BUF DB?BUF DB?PROMPT DB PLEASE ENTER A NUM128:$PROMPT DB PLEASE ENTER A NUM128:$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,AX7/14/202461 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 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,BL7/14/202462 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 MOV 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 21H7/14/202463 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 START7/14/202464P79 15.键盘输入一个一位加法表达式。键盘输入一个一位加法表达式。1)按按十十进进制制输输出出其其正正确确的的结结果果。例例如如:7+8=15,2+3=05。2 2)按按十十六六进制制输出出其其正正确确结果果。例例如如:7 78=0FH8=0FH,2+3=05H2+3=05H。7/14/202465DATA SEGMENTDATA SEGMENTBUF DB 3 DUP(?)BUF DB 3 DUP(?)PROMPT DB PLEASE ENTER A equPROMPT DB PLEASE ENTER A equation,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 7/14/202466 MOV CX,3 MOV CX,3 MOV SI,0 MOV 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 7/14/202467 MOV AL,BUF0MOV AL,BUF0 ADD AL,BUF2 ADD AL,BUF2 CMP AL,9 CMP AL,9 JNA L2;JNA L2;输出个位输出个位 MOV 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 START7/14/202468 ;输入形如:输入形如: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 assume cs:code,ds:datacs:code,ds:datastart:movstart:mov ax,data ax,data movmov ds,axds,ax MOV DX,OFFSET LL MOV DX,OFFSET LL MOV AH,09H MOV AH,09H INT 21H INT 21H 7/14/202469 movmov ah,01h;ah,01h;输入第一个数输入第一个数 intint 21h 21h and AL,0fh and AL,0fh movmov A,AL A,AL movmov ah,01h;ah,01h;输入输入+,-号号 intint 21h 21h movmov OPR,AL OPR,AL movmov ah,01h;ah,01h;输入第二个数输入第二个数 intint 21h 21h and AL,0fh and AL,0fh movmov B,AL B,AL 7/14/202470 movmov ah,01h;ah,01h;输入输入=号号 intint 21h 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,AL7/14/202471 L1:CMP AL,10;ALL1: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 movmov ah,4ch ah,4ch intint 21h 21hcode endscode endsend startend start7/14/202472;二化十输出的另一方法二化十输出的另一方法 统计统计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 7/14/202473L33: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 7/14/202474L22: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 21hcode endsend start7/14/202475作业:作业:246(选做)(选做)综合题(综合题(二选一即可)二选一即可)1。从从键键盘盘输输入入两两个个多多字字节节二二进进制制数数,转转换换为为压压缩缩型型(或或是是非非压压缩缩型型)BCD码码存存储储,求求和和,将将结结果计算后按十进制输出。果计算后按十进制输出。2。从从键键盘盘输输入入两两个个十十进进制制数数,(假假设设和和小小于于一一个字大小)求和后,将结果以十进制输出。个字大小)求和后,将结果以十进制输出。7/14/202476
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!