回复 2楼 hu9jj
这是程序全部、、、 需要怎么改才能实现呢?改了好多东西都不能实现,反而改乱了、、、
CODE
SEGMENT
ASSUME
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