汇编语言:根据输入的数值输出一个由“ * ”组成的口字形
题目要求运行截图
编程平台代码实现
题目要求
输入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
如果文章内容出错或者您有更好的解决方法,欢迎到评论区指正和讨论!