汇编语言:根据输入的数值输出一个由“ * ”组成的口字形

    技术2022-07-10  127

    汇编语言:根据输入的数值输出一个由“ * ”组成的口字形

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

    题目要求

    输入3-9之间的一个数n,输出一个由“ * ”组成的口字形。例如输入5,则输出: *        *        *        *        * *                                    * *                                    * *                                    * *        *        *        *        * 输入不在3-9范围内的数字要报错!

    运行截图

    编程平台

    Masm for Windows 集成实验环境 2012.5

    代码实现

    DATAS SEGMENT hint DB 'Enter a digit between 3-9: $' error DB 'The input is not in the required scope!$' break DB 13,10,'$' DATAS ENDS STACKS SEGMENT STACK DB 200H DUP(?) STACKS ENDS CODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKS START: MOV AX,DATAS MOV DS,AX LEA DX,hint;输入提示 MOV AH,9H INT 21H ;只接收一个字符 MOV AH,1H;输入一个字符 INT 21H MOV CL,AL;CL存储输入的字符 LEA DX,break;换行 MOV AH,9H INT 21H ;检查输入的内容是否符合要求 SUB CL,30H;;将数字样式不变地转换成十六进制,如输入3则转换成3H CMP CL,3 JB err CMP CL,9 JG err ;外循环CL个行,内循环CL个列 MOV CH,0 MOV SI,0;外循环标志 outlop: CMP SI,CX JE finish;外循环结束 MOV DI,0;内循环标志 inlop: CMP DI,CX JE next;内循环结束 CMP SI,0;是否为第一行,第一行要有CL个* JE asterisk MOV BX,SI INC BX CMP BX,CX;是否为最后一行,最后一行要有CL个* JE asterisk CMP DI,0;是否为第一列,第一列一定有* JE asterisk MOV BX,DI INC BX CMP BX,CX;是否为最后一列,最后一列一定有* JE asterisk MOV DL,' ';不用输出*的地方用空格代替 MOV AH,2H INT 21H JMP space asterisk:;输出*符号 MOV DL,'*' MOV AH,2H INT 21H space:;输出两个空格隔开*符号 MOV DL,' ' MOV AH,2H INT 21H MOV DL,' ' MOV AH,2H INT 21H INC DI JMP inlop next: LEA DX,break;换行 MOV AH,9H INT 21H INC SI JMP outlop err: LEA DX,error;出错提示 MOV AH,9H INT 21H finish: MOV AH,4CH INT 21H CODES ENDS END START

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

    Processed: 0.015, SQL: 9