数阵程序需要增强功能,各位大大进来看看
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
这个程序现在实现的是输入一个不小于3不大于9的数。 比如输入4输出
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7
输出第一个永远是1. 这个程序因为输入上限是9,所以只定义到十位。现在要将功能改为:输入没上限,要求输入后,按回车进入执行程序。由于屏幕显示问题,只能显示到26所以要定义到千位。
各位看看、、、