⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 3_4test.asm

📁 在屏幕上开三个窗口
💻 ASM
字号:
       DATAS  SEGMENT
         CHAR  DB       ?
         NUM  DB        0,0,0
         DIS  DW        ?
     WIN_ULR  DB        5,5,18
     WIN_ULC  DB        10,50,15
     WIN_LRR  DB        15,15,22
     WIN_LRC  DB        30,70,65
   WIN_WIDTH  DB        20,20,50
          WR  DB        15,15,22
          WC  DB        10,50,15
       DATAS  ENDS

       CODES  SEGMENT
              ASSUME    CS:CODES,DS:DATAS
    
        MAIN  PROC      FAR
      START:
              MOV       AX,DATAS
              MOV       DS,AX
      
              CALL      CLEAR
              CALL      RIGHT
              MOV       AX,4C00H
              INT       21H
        MAIN  ENDP

      SCROLL  PROC      NEAR        ;书P332
              MOV       AH,6
              MOV       AL,1
              LEA       SI,WIN_ULR
              ADD       SI,DIS
              MOV       CH,[SI]
              LEA       SI,WIN_ULC
              ADD       SI,DIS
              MOV       CL,[SI]
              LEA       SI,WIN_LRR
              ADD       SI,DIS
              MOV       DH,[SI]
              LEA       SI,WIN_LRC
              ADD       SI,DIS
              MOV       DL,[SI]
              MOV       BH,7
              INT       10H
              MOV       BX,DIS
              MOV       NUM[BX],0
              MOV       DH,WIN_LRR[BX]
              MOV       WR[BX],DH
              MOV       DH,WIN_ULC[BX]
              MOV       WC[BX],DH
              RET
      SCROLL  ENDP
    
    
       CLEAR  PROC      NEAR        ;书p330
             
    
              MOV       AH,6
              MOV       AL,0
              MOV       BH,7
              MOV       CH,0
              MOV       CL,0
              MOV       DH,24
              MOV       DL,79
              INT       10H
    
              MOV       DX,0
              MOV       AH,2
              INT       10H
    
             
              RET
       CLEAR  ENDP

    GET_CHAR  PROC      NEAR        ;书P332
              
              MOV       AH,0
              INT       16H
              CMP       AH,1
              JE        TO_EXIT
              JNE       CMPL
    TO_EXIT:  CALL      EXIT
       CMPL:
              CMP       AH,4BH
              JE        TO_LEFT
              JNE       CMPR
    TO_LEFT:
              CALL      LEFT
       CMPR:
              CMP       AH,4DH
              JE        TO_RIGHT
              JNE       NEXT
    TO_RIGHT:
              CALL      RIGHT
              
       NEXT:
              MOV       DL,AL
              MOV       AH,2

              INT       21H
              MOV       CHAR,AL
              ADD       [SI],1
              MOV       BX,DIS
              ADD       NUM[BX],1
              MOV       CL,WIN_WIDTH[BX]
              CMP       NUM[BX],CL
              JE        TO_SCROLL
              JNE       RET1
  TO_SCROLL:
              CALL      SCROLL
       RET1:
              RET
    GET_CHAR  ENDP

    DIS_PLAY  PROC      NEAR        ;书P333

             
              MOV       AH,9
              MOV       AL,CHAR
              MOV       BH,0
              MOV       BL,7
              MOV       CX,1
              INT       10H
              ADD       [SI],1
              ADD       NUM+2,1
              CMP       NUM+2,50
              JE        TO_SCROLL2
              JNE       RET2
 TO_SCROLL2:
              CALL      SCROLL
       RET2:
              RET
    DIS_PLAY  ENDP

  POSE_CURSE  PROC      NEAR        ;光标定位 书P331下
              MOV       AH,2
              LEA       SI,WR
              ADD       SI,DIS
              MOV       DH,[SI]
              LEA       SI,WC
              ADD       SI,DIS
              MOV       DL,[SI]
              MOV       BH,0
              INT       10H
              RET
  POSE_CURSE  ENDP

       RIGHT  PROC      NEAR
              
     AGAIN:
              MOV       DIS,1
              CALL      POSE_CURSE
              CALL      GET_CHAR
              CALL      DOWN
              JMP       AGAIN
              RET
       RIGHT  ENDP

        LEFT  PROC      NEAR
              
     AGAIN1:
              MOV       DIS,0
              CALL      POSE_CURSE
              CALL      GET_CHAR
              CALL      DOWN
              JMP       AGAIN1
              RET
        LEFT  ENDP

        DOWN  PROC      NEAR
              MOV       DIS,2
              CALL      POSE_CURSE
              CALL      DIS_PLAY
              RET
        DOWN  ENDP

        EXIT  PROC      NEAR
              MOV       AH,2
              MOV       DH,0
              MOV       DL,0
              MOV       BH,0
              INT       10H
              MOV       AX,4C00H
              INT       21H
        EXIT  ENDP
       CODES  ENDS
              END       START



⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -