回环矩阵,输入上限是9。怎么扩展上限???求指教!
CODE SEGMENTASSUME CS:CODE,DS:CODE
ORG 100H
START:
PUSH CS
POP DS
MOV AX,3
INT 10H ;BIOS中断,置文本显示模式
MOV AX,0B800H
MOV ES,AX ;定位显存
MOV DX,OFFSET MSG
MOV AH,9
INT 21H ;提示
T0: MOV AH,0
INT 16H ;接收数据
CMP AL,1BH ;Esc键结束程序 esc(ascii=1Bh)
JZ QUIT
CMP AL,'3' ;数据校验,保证输入3<al<9
JB T0
CMP AL,'9'
JA T0
MOV AH,0EH ;在Teletype模式下显示字符
INT 10H ;显示有效数
SUB AL,30H ;得到十进制数字
PUSH AX
MUL AL ;al*al
MOV SI,AX ;保存矩阵最大数到si中
POP AX
CBW ;chang byte to word
MOV BP,1 ;第一个元素值
MOV DI,3*80*2
NEXT:
MOV CNT1,AX ;输入数据保存到cnt1
DEC AX ;n-1
MOV CNT2,AX
MOV CNT3,AX
DEC AX ;(n-1)-1
MOV CNT4,AX
ADD DI,3*2
CALL SHOW ;输出矩阵
MOV AX,CNT1
SUB AX,2
SUB DI,3*2
CMP BP,SI
JBE NEXT ;bp<si,则继续执行
MOV AH,0
INT 16H ;等待
JNZ START
QUIT:
MOV AX,4C00H
INT 21H
SHOW: ;显示方阵
MOV CX,CNT1 ;right 向右赋值
M1: CALL CRT
INC BP ;下一个元素数值
LOOP M1
MOV CX,CNT2 ;down 向下赋值
JCXZ P2 ;cx=0,则转p2处
M2: ADD DI,(80-3)*2
CALL CRT
INC BP
LOOP M2
MOV CX,CNT3 ;left 向左赋值
JCXZ P2
M3: SUB DI,6*2 ;下一个元素位置
CALL CRT
INC BP
LOOP M3
MOV CX,CNT4 ;up 向上赋值
JCXZ P2
M4: SUB DI,(80+3)*2
CALL CRT
INC BP
LOOP M4
P2: RET
CRT:
MOV AX,BP
AAM ;调整指令
OR AX,3030H
XCHG AH,AL ;交换ah和al
CMP AL,'0'
JNZ P1
MOV AL,20H
P1: STOSB ;显示十位
INC DI
MOV AL,AH
STOSB ;显示个位
INC DI
MOV AL,20H
STOSB ;显示空格
INC DI
RET
MSG DB 'input(3-9),Esc to quit: $'
CNT1 DW ?
CNT2 DW ?
CNT3 DW ?
CNT4 DW ?
CODE ENDS
END START