汇编语言:根据数值进行求和或清零

    技术2022-07-10  155

    汇编语言:根据数值进行求和或清零

    题目要求运行截图 编程平台代码实现

    题目要求

    设在A、B和D字单元中已经分别存放着三个数。 若三个数都不是0,则求出三个数的和,并存放在S字单元中;若其中有一个数为0,则把其他两个单元也清零。 将A、B、D、S这四个字单元处理前后的数值展示出来。

    运行截图

    编程平台

    Masm for Windows 集成实验环境 2012.5

    代码实现

    DATAS SEGMENT A DW 25 B DW 34 D DW 111 S DW 0 hint DB '--Before--',13,10,'$' result DB '--After--',13,10,'$' break DB 13,10,'$';换行符 scale DW 10;以十进制形式输出数值 DATAS ENDS STACKS SEGMENT STACK DB 200H DUP(?) STACKS ENDS CODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKS MAIN PROC MOV AX,DATAS MOV DS,AX LEA DX,hint;输出原始数据前的提示 MOV AH,9H INT 21H CALL OUTPUTALL;输出A、B、D、S的数值 ;分别测试A、B、D中的数据是否为0,出现一个为0则全部清0 MOV AX,A CMP AX,0;测试A中的数据是否为0 JE cle MOV BX,B CMP BX,0;测试B中的数据是否为0 JE cle MOV DX,D CMP DX,0;测试D中的数据是否为0 JE cle ;对A、B、D进行求和,结果放入S ADD AX,BX ADD AX,DX LEA SI,S MOV [SI],AX JMP outp cle: CALL CLEAR;将A、B、D中的数据清0 outp: LEA DX,result;输出当前数据前的提示 MOV AH,9H INT 21H CALL OUTPUTALL;输出A、B、D、S的数值 MOV AH,4CH INT 21H MAIN ENDP ;子程序 ;功能:输出A、B、D、S存放的数据。 OUTPUTALL PROC MOV DL,'A';输出A的内容 MOV AH,2H INT 21H MOV DL,':';冒号 MOV AH,2H INT 21H MOV AX,A CALL OUTPUTDATA;以scale进制形式输出数据 LEA DX,break;输出换行符 MOV AH,9H INT 21H MOV DL,'B';输出B的内容 MOV AH,2H INT 21H MOV DL,':';冒号 MOV AH,2H INT 21H MOV AX,B CALL OUTPUTDATA;以scale进制形式输出数据 LEA DX,break;输出换行符 MOV AH,9H INT 21H MOV DL,'D';输出D的内容 MOV AH,2H INT 21H MOV DL,':';冒号 MOV AH,2H INT 21H MOV AX,D CALL OUTPUTDATA;以scale进制形式输出数据 LEA DX,break;输出换行符 MOV AH,9H INT 21H MOV DL,'S';输出S的内容 MOV AH,2H INT 21H MOV DL,':';冒号 MOV AH,2H INT 21H MOV AX,S CALL OUTPUTDATA;以scale进制形式输出数据 LEA DX,break;输出换行符 MOV AH,9H INT 21H RET OUTPUTALL ENDP ;子程序 ;功能:将数据以scale进制形式输出。 ;入口参数:AX存放要输出的数据,scale存放进制数。 OUTPUTDATA PROC MOV BX,scale TEST AX,8000H;判断正负 JZ pos PUSH AX MOV DL,'-';输出负号 MOV AH,2H INT 21H POP AX NEG AX;求补,得到负数的绝对值 pos: MOV SI,0;记录要输出的位数 lop1: MOV DX,0 DIV BX PUSH DX;余数入栈 INC SI CMP AX,0 JNE lop1 lop2: POP DX ADD DL,30H;转换成ASCII码 MOV AH,2H INT 21H DEC SI CMP SI,0 JNE lop2 RET OUTPUTDATA ENDP ;子程序 ;功能:将A、B、D中的数据清0。 CLEAR PROC MOV AX,0 LEA SI,A MOV [SI],AX LEA SI,B MOV [SI],AX LEA SI,D MOV [SI],AX RET CLEAR ENDP CODES ENDS END MAIN

    如果文章内容出错或者您有更好的解决方法,欢迎到评论区指正和讨论!

    Processed: 0.017, SQL: 9