注册 登录
编程论坛 汇编论坛

回环矩阵,输入上限是9。怎么扩展上限???求指教!

ch775914568 发布于 2012-11-12 11:53, 605 次点击
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
0 回复
1